From patchwork Wed Sep 21 09:11:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, HongboX" X-Patchwork-Id: 116534 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 E02F0A0540; Wed, 21 Sep 2022 11:16:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AB86740697; Wed, 21 Sep 2022 11:16:14 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id BE0574014F for ; Wed, 21 Sep 2022 11:16:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663751772; x=1695287772; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=wG5bi5VLv5YEAkVWqUiyB1h8wILeA81ttHW3eLtocpM=; b=W7cbXn3X0/JWIaDyj26QFSJd6eExdnZf/y8gCphDDnLkuo8L58+x6hiK 8uEm4HN1M02cREYI1Rf7ULRe22ByC2JS9c7MYKYMJW8632pZt2CYe34Y6 de8m7Vd9okE/ncdaCZacRxJsujdjT0PWG5vVe5Ugmz3XIDovVWxdlQFjy yHPmoppQdmYYV67w0f0Mcxt3eRQZ7ouBiM1r2//6YDNJDuEDo7ZIRD1Xr JY1QFrrN7ZwaR/mjaAmpqSaCA5cTbFL/54M6mXFXUXEF/AzKpfmyhMwXA 8x+oEI8sTek5hgyC4PKGSL/MIo174ce4fbg6msmxsC7UR8mfq8SuWFYTt Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10476"; a="282996655" X-IronPort-AV: E=Sophos;i="5.93,332,1654585200"; d="scan'208";a="282996655" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2022 02:16:11 -0700 X-IronPort-AV: E=Sophos;i="5.93,332,1654585200"; d="scan'208";a="652456094" Received: from unknown (HELO localhost.localdomain) ([10.239.252.212]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2022 02:16:09 -0700 From: Hongbo Li To: dts@dpdk.org Cc: Hongbo Li Subject: [dts][PATCH V1] tests/ice_dcf_switch_filter:implement VXLAN related cases Date: Wed, 21 Sep 2022 05:11:37 -0400 Message-Id: <20220921091137.54010-1-hongbox.li@intel.com> X-Mailer: git-send-email 2.25.1 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 There are vxlan related cases not implemented in the test plan. This patch implements 8 vxlan cases. Signed-off-by: Hongbo Li --- .../ice_dcf_switch_filter_test_plan.rst | 4 + tests/TestSuite_ice_dcf_switch_filter.py | 266 +++++++++++++++++- 2 files changed, 266 insertions(+), 4 deletions(-) diff --git a/test_plans/ice_dcf_switch_filter_test_plan.rst b/test_plans/ice_dcf_switch_filter_test_plan.rst index 0d38c218..f1804473 100644 --- a/test_plans/ice_dcf_switch_filter_test_plan.rst +++ b/test_plans/ice_dcf_switch_filter_test_plan.rst @@ -213,6 +213,10 @@ Prerequisites check the VF0 driver is net_ice_dcf. + If set VXLAN flow rule:: + + testpmd> rx_vxlan_port add 4789 0 + 10. on tester side, copy the layer python file to /root:: cp pfcp.py to /root diff --git a/tests/TestSuite_ice_dcf_switch_filter.py b/tests/TestSuite_ice_dcf_switch_filter.py index 3c647be6..39bd8255 100644 --- a/tests/TestSuite_ice_dcf_switch_filter.py +++ b/tests/TestSuite_ice_dcf_switch_filter.py @@ -1644,6 +1644,230 @@ sv_mac_test_drop_action = [ tv_mac_blend_pkg_drop, ] +tv_mac_ipv4_vxlan_ipv4_frag = { + "name": "tv_mac_ipv4_vxlan_ipv4_frag", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions vf id 1 / end", + "matched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 2}, + }, + "mismatched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3",frag=5)/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.4", dst="192.168.0.3",frag=5)/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.5",frag=5)/Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +tv_mac_ipv4_vxlan_ipv4_pay = { + "name": "tv_mac_ipv4_vxlan_ipv4_pay", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions vf id 1 / end", + "matched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 2}, + }, + "mismatched": { + "scapy_str": [ + 'Ether(dst="68:05:ca:8d:ed:a3")/IP(src="192.168.0.1",dst="192.168.0.2",tos=4,ttl=2,frag=5)/("X"*480)', + 'Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.4", dst="192.168.0.3")/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.5")/TCP()/Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +tv_mac_ipv4_vxlan_ipv4_udp_pay = { + "name": "tv_mac_ipv4_vxlan_ipv4_udp_pay", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 50 dst is 23 / end actions vf id 1 / end", + "matched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=50,dport=23) /Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 1}, + }, + "mismatched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23) /Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=50,dport=19) /Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +tv_mac_ipv4_vxlan_ipv4_tcp = { + "name": "tv_mac_ipv4_vxlan_ipv4_tcp", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 50 dst is 23 / end actions vf id 1 / end", + "matched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=50,dport=23)/Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 1}, + }, + "mismatched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=29,dport=23)/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=50,dport=100)/Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +tv_mac_ipv4_vxlan_mac_ipv4_frag = { + "name": "tv_mac_ipv4_vxlan_mac_ipv4_frag", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions vf id 1 / end", + "matched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 2}, + }, + "mismatched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=29,dport=23)/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=50,dport=100)/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a9")/IP(src="192.168.0.2", dst="192.168.0.3" ,frag=5)/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.4", dst="192.168.0.3" ,frag=5)/TCP()/Raw("x"*80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.5" ,frag=5)/TCP()/Raw("x"*80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +tv_mac_ipv4_vxlan_mac_ipv4_pay = { + "name": "tv_mac_ipv4_vxlan_mac_ipv4_pay", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions vf id 1 / end", + "matched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw("x" * 80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3")/Raw("x" * 80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 2}, + }, + "mismatched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.2")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw("x" * 80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=3)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw("x" * 80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a9")/IP(src="192.168.0.2", dst="192.168.0.3") /TCP()/Raw("x" * 80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.4", dst="192.168.0.3") /TCP()/Raw("x" * 80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.5") /TCP()/Raw("x" * 80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +tv_mac_ipv4_vxlan_mac_ipv4_udp_pay = { + "name": "tv_mac_ipv4_vxlan_mac_ipv4_udp_pay", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 50 dst is 23 / end actions vf id 1 / end", + "matched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=50,dport=23)/Raw("x" * 80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 1}, + }, + "mismatched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/Raw("x" * 80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=50,dport=29)/Raw("x" * 80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} + +tv_mac_ipv4_vxlan_mac_ipv4_tcp = { + "name": "tv_mac_ipv4_vxlan_mac_ipv4_tcp", + "rte_flow_pattern": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / udp / vxlan vni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / tcp src is 25 dst is 23 / end actions vf id 1 / end", + "matched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=23)/Raw("x" * 80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 1}, + }, + "mismatched": { + "scapy_str": [ + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=20,dport=23)/Raw("x" * 80)', + 'Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether(dst="68:05:ca:8d:ed:a8")/IP(src="192.168.0.2", dst="192.168.0.3")/TCP(sport=25,dport=19)/Raw("x" * 80)', + ], + "check_func": { + "func": rfc.check_vf_rx_packets_number, + "param": {"expect_port": 1, "expect_queues": "null"}, + }, + "expect_results": {"expect_pkts": 0}, + }, +} class ICEDCFSwitchFilterTest(TestCase): supported_nic = ["ICE_100G-E810C_QSFP", "ICE_25G-E810C_SFP", "ICE_25G-E810_XXV_SFP"] @@ -1743,7 +1967,7 @@ class ICEDCFSwitchFilterTest(TestCase): command = self.path + all_eal_param + " -- -i" return command - def launch_testpmd(self): + def launch_testpmd(self,is_vxlan=False): """ launch testpmd with the command """ @@ -1753,7 +1977,9 @@ class ICEDCFSwitchFilterTest(TestCase): self.dut.send_expect("set portlist 1", "testpmd> ", 15) self.dut.send_expect("set fwd rxonly", "testpmd> ", 15) self.dut.send_expect("set verbose 1", "testpmd> ", 15) - + if is_vxlan: + self.dut.send_expect("rx_vxlan_port add 4789 0", "testpmd> ", 15) + def send_packets(self, dic, session_name="", tx_iface=""): """ send packets. @@ -1967,10 +2193,10 @@ class ICEDCFSwitchFilterTest(TestCase): return out_vfs def _rte_flow_validate_pattern(self, test_vector, launch_testpmd=True): - + vxlan = True if "vxlan" in test_vector['name'] else False if launch_testpmd: # launch testpmd - self.launch_testpmd() + self.launch_testpmd(is_vxlan=vxlan) # validate a rule self.validate_switch_filter_rule(test_vector["rte_flow_pattern"]) # create a rule @@ -2666,6 +2892,38 @@ class ICEDCFSwitchFilterTest(TestCase): self.dut.send_expect("flow flush 0", "testpmd> ", 15) self.dut.send_expect("clear port stats all", "testpmd> ", 15) + def test_mac_ipv4_vxlan_ipv4_frag(self): + self.setup_1pf_vfs_env() + self._rte_flow_validate_pattern(tv_mac_ipv4_vxlan_ipv4_frag,) + + def test_mac_ipv4_vxlan_ipv4_pay(self): + self.setup_1pf_vfs_env() + self._rte_flow_validate_pattern(tv_mac_ipv4_vxlan_ipv4_pay) + + def test_mac_ipv4_vxlan_ipv4_udp_pay(self): + self.setup_1pf_vfs_env() + self._rte_flow_validate_pattern(tv_mac_ipv4_vxlan_ipv4_udp_pay) + + def test_mac_ipv4_vxlan_ipv4_tcp(self): + self.setup_1pf_vfs_env() + self._rte_flow_validate_pattern(tv_mac_ipv4_vxlan_ipv4_tcp) + + def test_mac_ipv4_vxlan_mac_ipv4_frag(self): + self.setup_1pf_vfs_env() + self._rte_flow_validate_pattern(tv_mac_ipv4_vxlan_mac_ipv4_frag) + + def test_mac_ipv4_vxlan_mac_ipv4_pay(self): + self.setup_1pf_vfs_env() + self._rte_flow_validate_pattern(tv_mac_ipv4_vxlan_mac_ipv4_pay) + + def test_mac_ipv4_vxlan_mac_ipv4_udp_pay(self): + self.setup_1pf_vfs_env() + self._rte_flow_validate_pattern(tv_mac_ipv4_vxlan_mac_ipv4_udp_pay) + + def test_mac_ipv4_vxlan_mac_ipv4_tcp(self): + self.setup_1pf_vfs_env() + self._rte_flow_validate_pattern(tv_mac_ipv4_vxlan_mac_ipv4_tcp) + def tear_down(self): """ Run after each test case.