From patchwork Sun Jul 16 14:00:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yaqi Tang X-Patchwork-Id: 129559 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E706942E8D; Sun, 16 Jul 2023 16:01:50 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E27E840DFD; Sun, 16 Jul 2023 16:01:50 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 9D7864013F for ; Sun, 16 Jul 2023 16:01:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689516108; x=1721052108; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=W+wHLtJIvDq2hyNEl2PDOWJW8f+1/CNK8TqzT9VFkaE=; b=JorN5aNwMnUOckbdMRVP+p33N9NZq12Y89ItKwgjkauvSADSORhn1Jsd dhYihvKK8C1nYJTmetxm5DSD/L8Jd4bj90/dZ5nxnpdOVIxuNaI+xLPMz r5agAqmm//LtOs7hNjpg3RcOR2/PyzqiJv9HY1MEMuGtVi20C0KEIEaDI jmKlBhcGcrfU+eFnh0hBOODOPiXhzwThHNV2nQBOs3Lng0u9HKmAlJPHp 0egLUTyCWKANrMo1S+m6a/AzLG6PWBaEivn7eozijNj82eBA8XnUwwFYX Tz4vfueWEyvwb7NJ1IMJodRjTv19o8KBaXaqGpZK4Bqb+hFrbgjPwlB32 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10773"; a="345351239" X-IronPort-AV: E=Sophos;i="6.01,210,1684825200"; d="scan'208";a="345351239" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jul 2023 07:01:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10773"; a="896930452" X-IronPort-AV: E=Sophos;i="6.01,210,1684825200"; d="scan'208";a="896930452" Received: from dpdk-yaqi.sh.intel.com ([10.67.118.189]) by orsmga005.jf.intel.com with ESMTP; 16 Jul 2023 07:01:47 -0700 From: Yaqi Tang To: dts@dpdk.org Cc: Yaqi Tang Subject: [PATCH V1 1/3] test_plans/index: add test plan for igc_tx_timestamp Date: Sun, 16 Jul 2023 14:00:52 +0000 Message-Id: <20230716140054.3222247-2-yaqi.tang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230716140054.3222247-1-yaqi.tang@intel.com> References: <20230716140054.3222247-1-yaqi.tang@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Add new test plan for igc enable tx timestamp offloading. Signed-off-by: Yaqi Tang --- test_plans/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/test_plans/index.rst b/test_plans/index.rst index 2ac4850d..dc6f6d22 100644 --- a/test_plans/index.rst +++ b/test_plans/index.rst @@ -57,6 +57,7 @@ The following are the test plans for the DPDK DTS automated test system. ice_vf_support_multicast_address_test_plan ice_rss_protocol_agnostic_flow_test_plan ice_fdir_protocol_agnostic_flow_test_plan + igc_tx_timestamp_test_plan cloud_filter_with_l4_port_test_plan dcf_lifecycle_test_plan crypto_perf_cryptodev_perf_test_plan From patchwork Sun Jul 16 14:00:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yaqi Tang X-Patchwork-Id: 129560 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1E36042E8D; Sun, 16 Jul 2023 16:01:55 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 16537427EE; Sun, 16 Jul 2023 16:01:55 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id B2E3E4013F for ; Sun, 16 Jul 2023 16:01:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689516112; x=1721052112; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=661eVFG7oPWB7oLZD0b3QzdND98/Qz0y7BicbvOaDV4=; b=Vech7dnsh8ujGa7wMeccOoiWIOEI2yDf00GhHFE7Wo+IVfT3fhRO5HCH D9jrEsSt+GmDNweDP3KLC776uPQtZsi0cSW/8gI2r05eD7IMQjr23wOWF QIZHFZAJefqFS8Z/LMXSrKau+9Yie4TX1ihw6S6wEot3uG4l0NYLit9oK /dRqhnEfqUbq1xZg+Y7Qfjg6V9POF3UDrgYN1FT9ZN8qxThT4XyYH96LS fOMtsZFj52vVofySd8b1RMHoDhXccEJ0bvKzM/2lleJqMVu7xaeFTjyJx gT1vrrcL2okBbceSp5jwmvd9CU6jvPU3RtQgwjS9AclIvja+r8wkbNuwq g==; X-IronPort-AV: E=McAfee;i="6600,9927,10773"; a="345351250" X-IronPort-AV: E=Sophos;i="6.01,210,1684825200"; d="scan'208";a="345351250" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jul 2023 07:01:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10773"; a="896930498" X-IronPort-AV: E=Sophos;i="6.01,210,1684825200"; d="scan'208";a="896930498" Received: from dpdk-yaqi.sh.intel.com ([10.67.118.189]) by orsmga005.jf.intel.com with ESMTP; 16 Jul 2023 07:01:49 -0700 From: Yaqi Tang To: dts@dpdk.org Cc: Yaqi Tang Subject: [PATCH V1 2/3] test_plans/igc_tx_timestamp: igc enable tx timestamp offloading Date: Sun, 16 Jul 2023 14:00:53 +0000 Message-Id: <20230716140054.3222247-3-yaqi.tang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230716140054.3222247-1-yaqi.tang@intel.com> References: <20230716140054.3222247-1-yaqi.tang@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org IGC Enable Tx timestamp offloading by leveraging I225 NIC's "Launch Time". Signed-off-by: Yaqi Tang --- test_plans/igc_tx_timestamp_test_plan.rst | 161 ++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 test_plans/igc_tx_timestamp_test_plan.rst diff --git a/test_plans/igc_tx_timestamp_test_plan.rst b/test_plans/igc_tx_timestamp_test_plan.rst new file mode 100644 index 00000000..727e73be --- /dev/null +++ b/test_plans/igc_tx_timestamp_test_plan.rst @@ -0,0 +1,161 @@ +.. SPDX-License-Identifier: BSD-3-Clause + Copyright(c) 2023 Intel Corporation + +================================== +IGC Enable Tx Timestamp Offloading +================================== + +Description +=========== +IGC Enable Tx timestamp offloading by leveraging I225 NIC's "Launch Time". +Measure time interval for Rx timestamp when setting Tx interval between packets in one burst and MAX/MIN error. +Currently, the minimum time interval for Rx timestamp when setting Tx interval implemented by 2.5G IGC NIC is 300ns. + +.. note:: + testpmd> set txtimes (inter),(intra) + inter is the delay between the bursts in the device clock units. + intra is the delay between the packets within the burst specified in the device clock units. + Due to the time difference in the software, the inter value should be as large as possible to avoid conflicts, + so the inter value in this plan is set to 30000000. + +Prerequisites +============= + +Topology +-------- +The connection is as below table:: + +-----------------------------+ + | DUT | TESTER | + +=============================+ + | 2.5G | + | IGC-NIC-1 ---- IGC-NIC-2 | + +-----------------------------+ + +Hardware +-------- +Supported NICs: IGC-I225_LM/IGC-I226_LM + +Software +-------- +dpdk: http://dpdk.org/git/dpdk +runtime command: https://doc.dpdk.org/guides/testpmd_app_ug/testpmd_funcs.html + +General Set Up +-------------- +1. Compile DPDK:: + + # CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib --default-library=static + # ninja -C -j 110 + +2. Get the pci device id and interface of DUT and tester. + For example, 0000:18:00.0 and 0000:86:00.0 is pci device id, + ens785 and ens803 is interface:: + + # ./usertools/dpdk-devbind.py -s + + 0000:18:00.0 'Device 125b' if=ens785 drv=igc unused=vfio-pci + 0000:86:00.0 'Device 125b' if=ens803 drv=igc unused=vfio-pci + +3. Bind the DUT port to dpdk:: + + # ./usertools/dpdk-devbind.py -b vfio-pci + +4. Tester compile test-timestamp app:: + + # gcc /root/pkt_rx_tx.c -o test-timestamp -lpthread + +5. Tester Launch test-timestamp app:: + + # ./test-timestamp -i -t + +Test Case +========= +Test Case 1: Enable tx timestamp, check time interval of rx timestamp +--------------------------------------------------------------------- +Launch testpmd enable tx timestamp offloading, set different txtimes intra and measure time interval of Rx timestamp between packets in one burst and MAX/MIN error. +When the set txtimes intra more than 300ns, the time interval for Rx timestamp is the set intra. When it's less than 300ns, the time interval for Rx timestamp is 300ns. + +Subcase 1: set txtimes intra 2000ns +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Test Steps +~~~~~~~~~~ +1. Launch testpmd enable tx timestamp:: + + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 1-2 -n 4 -a 0000:18:00.0 -- -i --tx-offloads=0x200000 + +2. Set txtimes intra:: + + set fwd txonly + set txtimes 30000000,2000 + start + +3. Check the time interval of Rx timestamp is 2000ns and measure MAX/MIN error. + +Subcase 2: set txtimes intra 1000ns +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. Modify subcase 1 test step 2 to:: + + set txtimes 30000000,1000 + +2. Execute subcase 1 test steps to check the time interval of Rx timestamp is 1000ns and measure MAX/MIN error. + +Subcase 3: set txtimes intra 400ns +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. Modify subcase 1 test step 2 to:: + + set txtimes 30000000,400 + +2. Execute subcase 1 test steps to check the time interval of Rx timestamp is 400ns and measure MAX/MIN error. + +Subcase 4: set txtimes intra 300ns +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. Modify subcase 1 test step 2 to:: + + set txtimes 30000000,300 + +2. Execute subcase 1 test steps to check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. + +Subcase 5: set txtimes intra 200ns +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. Modify subcase 1 test step 2 to:: + + set txtimes 30000000,200 + +2. Execute subcase 1 test steps to check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. + +Test Case 2: Without tx timestamp, check time interval of rx timestamp +---------------------------------------------------------------------- +Launch testpmd without tx timestamp offloading, set different txtimes intra and measure time interval for Rx timestamp between packets in one burst and MAX/MIN error. +Regardless of the value of txtimes intra, the time interval for Rx timestamp is 300ns. + +Subcase 1: set txtimes intra 2000ns +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Test Steps +~~~~~~~~~~ +1. Launch testpmd enable tx timestamp:: + + ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 1-2 -n 4 -a 0000:18:00.0 -- -i + +2. Set txtimes intra:: + + set fwd txonly + set txtimes 30000000,2000 + start + +3. Check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. + +Subcase 2: set txtimes intra 1000ns +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. Modify subcase 1 test step 2 to:: + + set txtimes 30000000,1000 + +2. Execute subcase 1 test steps to check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. + +Subcase 3: set txtimes intra 400ns +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. Modify subcase 1 test step 2 to:: + + set txtimes 30000000,400 + +2. Execute subcase 1 test steps to check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. From patchwork Sun Jul 16 14:00:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yaqi Tang X-Patchwork-Id: 129561 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 41ABB42E8D; Sun, 16 Jul 2023 16:01:57 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3CBD342BAC; Sun, 16 Jul 2023 16:01:57 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 241F642BAC for ; Sun, 16 Jul 2023 16:01:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689516115; x=1721052115; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nlsUr2ARcN1g9gM9KdwjxS+2Vqd3u4Iv7W4AkHD7+AE=; b=Do5ZjwDDBsHugjVhTMXEommpWcybzHkIX/QbetOwTFttIkRK2kfpZAIL oIYlPA5J7pzQbPwM/x1ZgkETwFgXi5ef0/V1wSgsqx4kfCAkjCXbBcM8y 9vWytvAjdTxFFeS0XI/9A0JVVRFkHww7fBERpeDqJBlTp+1nGRkH7Xsef 039mZHcPch2tozz+43OQ4ZPWpuowRV1/b6197SXgJe8WMz9JXNwxzviH1 4u+5t9CVZUdL/kqxT62awZ0+21nPJB/3enWhnsfS652H+v+BOOZhrgBqW /rvLOoorg4zny4kMKeUiF4XvTHjSRalpj1stXPq9+eqvaoM6R5ba/ngIF A==; X-IronPort-AV: E=McAfee;i="6600,9927,10773"; a="345351256" X-IronPort-AV: E=Sophos;i="6.01,210,1684825200"; d="scan'208";a="345351256" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jul 2023 07:01:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10773"; a="896930531" X-IronPort-AV: E=Sophos;i="6.01,210,1684825200"; d="scan'208";a="896930531" Received: from dpdk-yaqi.sh.intel.com ([10.67.118.189]) by orsmga005.jf.intel.com with ESMTP; 16 Jul 2023 07:01:52 -0700 From: Yaqi Tang To: dts@dpdk.org Cc: Yaqi Tang Subject: [PATCH V1 3/3] tests/igc_tx_timestamp: igc enable tx timestamp offloading Date: Sun, 16 Jul 2023 14:00:54 +0000 Message-Id: <20230716140054.3222247-4-yaqi.tang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230716140054.3222247-1-yaqi.tang@intel.com> References: <20230716140054.3222247-1-yaqi.tang@intel.com> MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org IGC Enable Tx timestamp offloading by leveraging I225 NIC's "Launch Time". Signed-off-by: Yaqi Tang --- tests/TestSuite_igc_tx_timestamp.py | 184 ++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 tests/TestSuite_igc_tx_timestamp.py diff --git a/tests/TestSuite_igc_tx_timestamp.py b/tests/TestSuite_igc_tx_timestamp.py new file mode 100644 index 00000000..5fa0ee32 --- /dev/null +++ b/tests/TestSuite_igc_tx_timestamp.py @@ -0,0 +1,184 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2023 Intel Corporation +# + +import re +import time + +from framework.pmd_output import PmdOutput +from framework.test_case import TestCase +from framework.utils import GREEN, RED + + +class TimestampTest(TestCase): + def set_up_all(self): + """ + Run at the start of each test suite. + Generic filter Prerequistites + """ + self.verify( + self.nic in ["IGC-I225_LM", "IGC-I226_LM"], + "%s nic not support tx timestamp" % self.nic, + ) + self.dut_ports = self.dut.get_ports(self.nic) + self.ports_socket = self.dut.get_numa_id(self.dut_ports[0]) + # Verify that enough ports are available + self.verify(len(self.dut_ports) >= 1, "Insufficient ports") + self.tester_port0 = self.tester.get_local_port(self.dut_ports[0]) + self.tester_iface0 = self.tester.get_interface(self.tester_port0) + self.pmdout = PmdOutput(self.dut) + self.pf_pci = self.dut.ports_info[self.dut_ports[0]]["pci"] + + apps_name = "test-timestamp" + self.build_test_app(apps_name) + + def set_up(self): + """ + Run before each test case. + """ + pass + + def build_test_app(self, apps_name): + # Compile test app + print(self.tester.send_expect("ls", "#", 5)) + test_rx_timestamp = "/root/pkt_rx_tx.c" + out = self.tester.send_expect( + "gcc %s -o %s -lpthread" % (test_rx_timestamp, apps_name), "#", 15 + ) + self.verify("Error" not in out, "Compilation %s error" % apps_name) + output = self.tester.send_expect("find -name %s" % apps_name, "#") + self.verify("%s" % apps_name in output, "Compilation %s error" % apps_name) + + def launch_testpmd(self, param, intra): + """ + start testpmd + """ + # Prepare testpmd EAL and parameters + self.pmdout.start_testpmd( + param=param, + eal_param=f"-a {self.pf_pci}", + socket=self.ports_socket, + ) + # Test link status + res = self.pmdout.wait_link_status_up("all", 5) + self.verify(res is True, "there have port link is down") + self.pmdout.execute_cmd("set fwd txonly") + self.pmdout.execute_cmd("set txtimes 30000000,%d" % intra) + self.pmdout.execute_cmd("start", "testpmd>", 5) + self.pmdout.execute_cmd("stop") + + def launch_test_app(self, apps_name): + print(self.tester.send_expect("ls", "#", 5)) + self.tester.send_command("./%s -i %s -t" % (apps_name, self.tester_iface0), "#") + out = self.tester.get_session_output(timeout=0.1) + self.verify("Press Enter to continue" in out, "Launch test app failed.") + + def check_time_interval_error(self, interval): + out = self.tester.get_session_output(timeout=0.1) + rx_ts_pat = ".*ts\s+(\d+)" + rx_ts = re.findall(rx_ts_pat, out, re.M) + rx_ts = list(map(int, rx_ts)) + self.error_msgs = [] + intervals = [] + if len(rx_ts) != 32: + error_msg = "Tester should recieve 32 RX timestamps." + self.logger.error(error_msg) + self.error_msgs.append(error_msg) + else: + for i in range(len(rx_ts) - 1): + rx = rx_ts[i + 1] - rx_ts[i] + intervals.append(rx) + self.logger.info("Rx time intervals: {}".format(intervals)) + error = [abs((x - interval) / interval) * 100 for x in intervals] + error = [round(x, 2) for x in error] + self.logger.info("Rx time interval error: {}".format(error)) + if all(x < 50 for x in error) == False: + error_msg = "The time interval error for Rx timestamp is too large." + self.logger.error(error_msg) + self.error_msgs.append(error_msg) + else: + self.logger.info( + "max_error={}%, min_error={}%".format(max(error), min(error)) + ) + self.verify(not self.error_msgs, "some subcases failed") + + def handle_tx_timestamp_case(self, apps_name, param, intra, interval): + self.launch_test_app(apps_name) + self.launch_testpmd(param, intra) + self.check_time_interval_error(interval) + self.pmdout.execute_cmd("quit", "#") + + def test_with_tx_timestamp_check_time_interval(self, apps_name="test-timestamp"): + # Subcase 1: set txtimes intra 2000ns, check the time interval of Rx timestamp is 2000ns and measure MAX/MIN error. + self.logger.info( + "===================Test subcase 1: set txtimes intra 2000ns ================" + ) + self.handle_tx_timestamp_case( + apps_name, param="--tx-offloads=0x200000", intra=2000, interval=2000 + ) + + # Subcase 2: set txtimes intra 1000ns, check the time interval of Rx timestamp is 1000ns and measure MAX/MIN error. + self.logger.info( + "===================Test subcase 2: set txtimes intra 1000ns ================" + ) + self.handle_tx_timestamp_case( + apps_name, param="--tx-offloads=0x200000", intra=1000, interval=1000 + ) + + # Subcase 3: set txtimes intra 400ns, check the time interval of Rx timestamp is 400ns and measure MAX/MIN error. + self.logger.info( + "===================Test subcase 3: set txtimes intra 400ns ================" + ) + self.handle_tx_timestamp_case( + apps_name, param="--tx-offloads=0x200000", intra=400, interval=400 + ) + + # Subcase 4: set txtimes intra 300ns, check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. + self.logger.info( + "===================Test subcase 4: set txtimes intra 300ns ================" + ) + self.handle_tx_timestamp_case( + apps_name, param="--tx-offloads=0x200000", intra=300, interval=300 + ) + + # Subcase 5: set txtimes intra 200ns, check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. + self.logger.info( + "===================Test subcase 5: set txtimes intra 200ns ================" + ) + self.handle_tx_timestamp_case( + apps_name, param="--tx-offloads=0x200000", intra=200, interval=300 + ) + + def test_without_tx_timestamp_check_time_interval(self, apps_name="test-timestamp"): + # Subcase 1: set txtimes intra 2000ns, check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. + self.logger.info( + "===================Test subcase 1: set txtimes intra 2000ns ================" + ) + self.handle_tx_timestamp_case(apps_name, param="", intra=2000, interval=300) + + # Subcase 2: set txtimes intra 1000ns, check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. + self.logger.info( + "===================Test subcase 2: set txtimes intra 1000ns ================" + ) + self.handle_tx_timestamp_case(apps_name, param="", intra=1000, interval=300) + + # Subcase 3: set txtimes intra 400ns, check the time interval of Rx timestamp is 300ns and measure MAX/MIN error. + self.logger.info( + "===================Test subcase 3: set txtimes intra 400ns ================" + ) + self.handle_tx_timestamp_case(apps_name, param="", intra=400, interval=300) + + def tear_down(self): + """ + Run after each test case. + """ + # Bind the interfaces to the igc driver, then bind to the vfio-pci driver. + self.pmdout.execute_cmd("quit", "#") + self.dut.bind_interfaces_linux("igc") + self.dut.bind_interfaces_linux("vfio-pci") + + def tear_down_all(self): + """ + Run after each test suite. + """ + self.dut.kill_all()