From patchwork Thu Sep 17 15:21:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng, Yuan" X-Patchwork-Id: 78014 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9A14DA04B6; Thu, 17 Sep 2020 10:16:57 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 839B61D582; Thu, 17 Sep 2020 10:16:57 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 7A2791D581 for ; Thu, 17 Sep 2020 10:16:55 +0200 (CEST) IronPort-SDR: NjkxqQj/q1cxT706u6bzsHD0zTGW2aYzPDWIz6hnKQ7neq3jUdkLCdtVMw2jyNl9eQF05O53+V MszYt2nuvDHQ== X-IronPort-AV: E=McAfee;i="6000,8403,9746"; a="157034948" X-IronPort-AV: E=Sophos;i="5.76,436,1592895600"; d="scan'208";a="157034948" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Sep 2020 01:16:54 -0700 IronPort-SDR: mRsLa+JWOwZqkH9bBysiIuv6Kd9C5rQI1lxip0YRqUb73xxmQEnt0i9gBYyzlmC0b6lRLcFzSP JIiH5E1YJZuA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,436,1592895600"; d="scan'208";a="287485208" Received: from npg_dpdk_nic_yuanpeng_tester62.sh.intel.com ([10.67.119.61]) by fmsmga007.fm.intel.com with ESMTP; 17 Sep 2020 01:16:53 -0700 From: Peng Yuan To: dts@dpdk.org Cc: Peng Yuan Date: Thu, 17 Sep 2020 15:21:49 +0000 Message-Id: <1600356109-92875-1-git-send-email-yuan.peng@intel.com> X-Mailer: git-send-email 2.7.4 Subject: [dts] [PATCH] add validate step before creating rule X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 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 Sender: "dts" Add validate step before creating rule Add recreating rule after deleting it for bug DPDK-23826 Signed-off-by: Peng Yuan diff --git a/test_plans/generic_flow_api_test_plan.rst b/test_plans/generic_flow_api_test_plan.rst index 8bd82b33..33f5ec1c 100644 --- a/test_plans/generic_flow_api_test_plan.rst +++ b/test_plans/generic_flow_api_test_plan.rst @@ -48,6 +48,9 @@ Prerequisites ./usertools/dpdk-devbind.py -b igb_uio 05:00.0 +Note: validate the rules first before create it in each case. +All the rules that can be validated correctly should be created successfully. +The rules can't be validated correctly shouldn't be created successfully. Test case: Fortville ethertype ============================== @@ -101,8 +104,10 @@ Test case: Fortville fdir for L2 payload testpmd> set verbose 1 testpmd> start -2. create filter rules:: +2. validate and create filter rules:: + testpmd> flow validate 0 ingress pattern eth / vlan tci is 1 / end actions queue index 1 / end + testpmd> flow validate 0 ingress pattern eth type is 0x0807 / end actions queue index 2 / end testpmd> flow create 0 ingress pattern eth / vlan tci is 1 / end actions queue index 1 / end testpmd> flow create 0 ingress pattern eth type is 0x0807 / end actions queue index 2 / end @@ -133,7 +138,7 @@ Test case: Fortville fdir for flexbytes testpmd> set verbose 1 testpmd> start -2. create filter rules +2. validate and create filter rules l2-payload:: @@ -191,6 +196,14 @@ Test case: Fortville fdir for flexbytes testpmd> flow flush 0 testpmd> flow list 0 +5. verify rules can be recreated successfully after deleted:: + + testpmd> flow create 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is ab / end actions queue index 1 / end + testpmd> flow create 0 ingress pattern eth / vlan tci is 4095 / ipv4 proto is 255 ttl is 40 / raw relative is 1 offset is 2 pattern is ab / raw relative is 1 offset is 10 pattern is abcdefghij / raw relative is 1 offset is 0 pattern is abcd / end actions queue index 2 / end + testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / udp src is 22 dst is 23 / raw relative is 1 offset is 2 pattern is fhds / end actions queue index 3 / end + testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 tos is 4 ttl is 3 / tcp src is 32 dst is 33 / raw relative is 1 offset is 2 pattern is hijk / end actions queue index 4 / end + testpmd> flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / sctp src is 42 / raw relative is 1 offset is 2 pattern is abcdefghijklmnop / end actions queue index 5 / end + testpmd> flow create 0 ingress pattern eth / vlan tci is 1 / ipv6 src is 2001::1 dst is 2001::2 tc is 3 hop is 30 / tcp src is 32 dst is 33 / raw relative is 1 offset is 0 pattern is hijk / raw relative is 1 offset is 8 pattern is abcdefgh / end actions queue index 6 / end Test case: Fortville fdir for ipv4 ================================== @@ -219,7 +232,7 @@ Test case: Fortville fdir for ipv4 testpmd> set verbose 1 testpmd> start -2. create filter rules +2. validate and create the filter rules. ipv4-other:: @@ -324,7 +337,7 @@ Test case: Fortville fdir for ipv6 testpmd> set verbose 1 testpmd> start -2. create filter rules +2. validated and create filter rules ipv6-other:: diff --git a/tests/TestSuite_generic_flow_api.py b/tests/TestSuite_generic_flow_api.py index 5852f4ac..da061fed 100644 --- a/tests/TestSuite_generic_flow_api.py +++ b/tests/TestSuite_generic_flow_api.py @@ -674,7 +674,11 @@ class TestGeneric_flow_api(TestCase): self.dut.send_expect("start", "testpmd> ", 120) time.sleep(2) - # create the flow rules + # validate and create the flow rules + self.dut.send_expect( + "flow validate 0 ingress pattern eth / ipv4 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index 3 / end", + "validated") + self.dut.send_expect( "flow create 0 ingress pattern eth / ipv4 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index 3 / end", "created") @@ -688,8 +692,12 @@ class TestGeneric_flow_api(TestCase): # the ipv6 rule is conflicted with ipv4 rule. self.dut.send_expect("flow destroy 0 rule 0", "testpmd> ", 120) - # create the flow rules + # validate and create the flow rules q_idx = '2' if self.nic == 'foxville' else '4' + self.dut.send_expect( + "flow validate 0 ingress pattern eth / ipv6 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index %s / end" %(q_idx), + "validated") + self.dut.send_expect( "flow create 0 ingress pattern eth / ipv6 / tcp flags spec 0x02 flags mask 0x02 / end actions queue index %s / end" %(q_idx), "created") @@ -716,6 +724,13 @@ class TestGeneric_flow_api(TestCase): time.sleep(2) # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'proto', 'udp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'proto', 'tcp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'proto', 'sctp', 'sport', 'dport'], + 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'sip', 'dip'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'sip', 'dip', 'proto', 'udp', 'sport', 'dport'], 'actions': ['queue']}, @@ -756,11 +771,15 @@ class TestGeneric_flow_api(TestCase): # create the flow rules if self.nic in ["fortville_eagle", "fortville_25g", "fortville_spirit"]: basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'udp', 'dport'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'tcp', 'dport'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'udp', 'dport'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'tcp', 'dport'], 'actions': ['queue']}, ] else: basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'proto', 'udp', 'dport'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'proto', 'tcp', 'dport'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'proto', 'udp', 'dport'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'proto', 'tcp', 'dport'], 'actions': ['queue']}, ] @@ -861,6 +880,9 @@ class TestGeneric_flow_api(TestCase): # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['etag'], 'actions': ['vf0']}, + {'create': 'validate', 'flows': ['etag'], 'actions': ['vf1']}, + {'create': 'validate', 'flows': ['etag'], 'actions': ['pf']}, {'create': 'create', 'flows': ['etag'], 'actions': ['vf0']}, {'create': 'create', 'flows': ['etag'], 'actions': ['vf1']}, {'create': 'create', 'flows': ['etag'], 'actions': ['pf']}, @@ -879,13 +901,15 @@ class TestGeneric_flow_api(TestCase): self.verify(self.nic in ["fortville_eagle", "fortville_25g", "fortville_spirit", "carlsville", "fortville_spirit_single", "fortpark_TLV","fortpark_BASE-T", "foxville"], "%s nic not support fdir L2 payload filter" % self.nic) - self.pmdout.start_testpmd("%s" % self.pf_cores, "--pkt-filter-mode=perfect --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=test1" % self.pf_pci) + self.pmdout.start_testpmd("%s" % self.pf_cores, "--rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=test1" % self.pf_pci) self.dut.send_expect("set fwd rxonly", "testpmd> ", 120) self.dut.send_expect("set verbose 1", "testpmd> ", 120) self.dut.send_expect("start", "testpmd> ", 120) time.sleep(2) basic_flow_actions = [ + {'create': 'validate', 'flows': ['vlan'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ether', 'ppp'], 'actions': ['queue']}, {'create': 'create', 'flows': ['vlan'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ether', 'ppp'], 'actions': ['queue']}, ] @@ -1286,16 +1310,25 @@ class TestGeneric_flow_api(TestCase): time.sleep(2) # ip in command + self.dut.send_expect( + "flow validate 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 dst is 1.1.1.1 / end actions mark id 2 / rss / end", + "error") self.dut.send_expect( "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 dst is 1.1.1.1 / end actions mark id 2 / rss / end", "error") # udp in command + self.dut.send_expect( + "flow validate 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / udp dst is 111 / end actions mark id 2 / rss / end", + "error") self.dut.send_expect( "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / udp dst is 111 / end actions mark id 2 / rss / end", "error") # tcp in command + self.dut.send_expect( + "flow validate 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / tcp dst is 111 / end actions mark id 2 / rss / end", + "error") self.dut.send_expect( "flow create 0 ingress pattern eth dst is 11:11:11:11:11:11 / ipv4 / tcp dst is 111 / end actions mark id 2 / rss / end", "error") @@ -1333,7 +1366,7 @@ class TestGeneric_flow_api(TestCase): "fortville_spirit_single", "fortpark_TLV","fortpark_BASE-T", "foxville"], "%s nic not support fdir vlan filter" % self.nic) self.setup_env() # start testpmd on pf - self.pmdout.start_testpmd("%s" % self.pf_cores, "--pkt-filter-mode=perfect --disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem" % self.pf_pci) + self.pmdout.start_testpmd("%s" % self.pf_cores, "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem" % self.pf_pci) self.dut.send_expect("set fwd rxonly", "testpmd> ", 120) self.dut.send_expect("set verbose 1", "testpmd> ", 120) self.dut.send_expect("start", "testpmd> ", 120) @@ -1352,6 +1385,22 @@ class TestGeneric_flow_api(TestCase): time.sleep(2) # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['vlan', 'ipv4'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv4', 'udp'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv4', 'tcp'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv4', 'sctp'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv4', 'vf0'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv4', 'sctp', 'vf1'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv4', 'sctp'], 'actions': ['drop']}, + {'create': 'validate', 'flows': ['vlan', 'ipv4', 'udp', 'vf1'], 'actions': ['drop']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'udp'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'tcp'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'sctp'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'vf0'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'tcp', 'vf1'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'sctp'], 'actions': ['drop']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'tcp', 'vf1'], 'actions': ['drop']}, {'create': 'create', 'flows': ['vlan', 'ipv4'], 'actions': ['queue']}, {'create': 'create', 'flows': ['vlan', 'ipv4', 'udp'], 'actions': ['queue']}, {'create': 'create', 'flows': ['vlan', 'ipv4', 'tcp'], 'actions': ['queue']}, @@ -1429,26 +1478,50 @@ class TestGeneric_flow_api(TestCase): "fortville_spirit_single", "fortpark_TLV","fortpark_BASE-T", "foxville", "carlsville"]): self.setup_env() # start testpmd on pf - self.pmdout.start_testpmd("%s" % self.pf_cores, "--pkt-filter-mode=perfect --disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem" % self.pf_pci) + self.pmdout.start_testpmd("%s" % self.pf_cores, "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem" % self.pf_pci) self.dut.send_expect("set fwd rxonly", "testpmd> ", 120) self.dut.send_expect("set verbose 1", "testpmd> ", 120) self.dut.send_expect("start", "testpmd> ", 120) time.sleep(2) # start testpmd on vf0 - self.session_secondary.send_expect("%s -c 0x1e0000 -n 4 --socket-mem 1024,1024 --legacy-mem -w %s --file-prefix=vf1 -- -i --rxq=4 --txq=4 --disable-rss --pkt-filter-mode=perfect" % (self.app_path, self.sriov_vfs_port[0].pci), "testpmd>", 120) + self.session_secondary.send_expect("%s -c 0x1e0000 -n 4 --socket-mem 1024,1024 --legacy-mem -w %s --file-prefix=vf1 -- -i --rxq=4 --txq=4 --disable-rss" % (self.app_path, self.sriov_vfs_port[0].pci), "testpmd>", 120) self.session_secondary.send_expect("set fwd rxonly", "testpmd>") self.session_secondary.send_expect("set verbose 1", "testpmd>") self.session_secondary.send_expect("start", "testpmd>") time.sleep(2) # start testpmd on vf1 - self.session_third.send_expect("%s -c 0x1e000000 -n 4 --socket-mem 1024,1024 --legacy-mem -w %s --file-prefix=vf2 -- -i --rxq=4 --txq=4 --disable-rss --pkt-filter-mode=perfect" % (self.app_path, self.sriov_vfs_port[1].pci), "testpmd>", 120) + self.session_third.send_expect("%s -c 0x1e000000 -n 4 --socket-mem 1024,1024 --legacy-mem -w %s --file-prefix=vf2 -- -i --rxq=4 --txq=4 --disable-rss" % (self.app_path, self.sriov_vfs_port[1].pci), "testpmd>", 120) self.session_third.send_expect("set fwd rxonly", "testpmd>") self.session_third.send_expect("set verbose 1", "testpmd>") self.session_third.send_expect("start", "testpmd>") time.sleep(2) - # create the flow rules + # validate and create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'proto'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'ttl', 'udp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'tos', 'tcp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', + 'flows': ['vlan', 'ipv4', 'sip', 'dip', 'tos', 'ttl', 'sctp', 'sport', 'dport', 'tag'], + 'actions': ['queue']}, + {'create': 'validate', + 'flows': ['vlan', 'ipv4', 'sip', 'dip', 'tos', 'ttl', 'sctp', 'sport', 'dport', 'tag'], + 'actions': ['drop']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'proto', 'vf0'], 'actions': ['invalid']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'proto', 'vf0'], 'actions': ['queue']}, + {'create': 'validate', + 'flows': ['vlan', 'ipv4', 'sip', 'dip', 'tos', 'ttl', 'sctp', 'sport', 'dport', 'tag', 'vf1'], + 'actions': ['queue']}, + {'create': 'validate', + 'flows': ['vlan', 'ipv4', 'sip', 'dip', 'tos', 'ttl', 'sctp', 'sport', 'dport', 'tag'], + 'actions': ['passthru', 'flag']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'ttl', 'udp', 'sport', 'dport'], + 'actions': ['queue', 'flag']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'tos', 'tcp', 'sport', 'dport'], + 'actions': ['queue', 'mark']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'proto'], 'actions': ['passthru', 'mark']}, {'create': 'create', 'flows': ['ipv4', 'sip', 'dip', 'proto'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'sip', 'dip', 'ttl', 'udp', 'sport', 'dport'], 'actions': ['queue']}, @@ -1492,6 +1565,14 @@ class TestGeneric_flow_api(TestCase): if (self.nic in ["sagepond", "sageville"]): # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'udp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'tcp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'sctp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'sctp', 'sport', 'dport'], + 'actions': ['drop']}, {'create': 'create', 'flows': ['ipv4', 'sip', 'dip', 'udp', 'sport', 'dport'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'sip', 'dip', 'tcp', 'sport', 'dport'], @@ -1511,6 +1592,12 @@ class TestGeneric_flow_api(TestCase): self.verify_rulenum(rule_num) else: basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'udp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'tcp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'sctp'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'sip', 'dip', 'sctp'], 'actions': ['drop']}, {'create': 'create', 'flows': ['ipv4', 'sip', 'dip', 'udp', 'sport', 'dport'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'sip', 'dip', 'tcp', 'sport', 'dport'], @@ -1537,17 +1624,17 @@ class TestGeneric_flow_api(TestCase): if (self.nic in ["fortville_eagle", "fortville_25g", "fortville_spirit","columbiaville_25g","columbiaville_100g", "fortville_spirit_single", "fortpark_TLV","fortpark_BASE-T", "carlsville"]): self.setup_env() - self.pmdout.start_testpmd("%s" % self.pf_cores, "--pkt-filter-mode=perfect --disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem" % self.pf_pci) + self.pmdout.start_testpmd("%s" % self.pf_cores, "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf --socket-mem 1024,1024 --legacy-mem" % self.pf_pci) self.dut.send_expect("set fwd rxonly", "testpmd> ", 120) self.dut.send_expect("set verbose 1", "testpmd> ", 120) self.dut.send_expect("start", "testpmd> ", 120) time.sleep(2) - self.session_secondary.send_expect("%s -c 0x1e0000 -n 4 --socket-mem 1024,1024 --legacy-mem -w %s --file-prefix=vf1 -- -i --rxq=4 --txq=4 --disable-rss --pkt-filter-mode=perfect" % (self.app_path, self.sriov_vfs_port[0].pci), "testpmd>", 120) + self.session_secondary.send_expect("%s -c 0x1e0000 -n 4 --socket-mem 1024,1024 --legacy-mem -w %s --file-prefix=vf1 -- -i --rxq=4 --txq=4 --disable-rss" % (self.app_path, self.sriov_vfs_port[0].pci), "testpmd>", 120) self.session_secondary.send_expect("set fwd rxonly", "testpmd>") self.session_secondary.send_expect("set verbose 1", "testpmd>") self.session_secondary.send_expect("start", "testpmd>") time.sleep(2) - self.session_third.send_expect("%s -c 0x1e000000 -n 4 --socket-mem 1024,1024 --legacy-mem -w %s --file-prefix=vf2 -- -i --rxq=4 --txq=4 --disable-rss --pkt-filter-mode=perfect" % (self.app_path, self.sriov_vfs_port[1].pci), "testpmd>", 120) + self.session_third.send_expect("%s -c 0x1e000000 -n 4 --socket-mem 1024,1024 --legacy-mem -w %s --file-prefix=vf2 -- -i --rxq=4 --txq=4 --disable-rss" % (self.app_path, self.sriov_vfs_port[1].pci), "testpmd>", 120) self.session_third.send_expect("set fwd rxonly", "testpmd>") self.session_third.send_expect("set verbose 1", "testpmd>") self.session_third.send_expect("start", "testpmd>") @@ -1555,6 +1642,26 @@ class TestGeneric_flow_api(TestCase): # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'proto', 'tc', 'hop'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'tc', 'hop', 'udp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'tc', 'hop', 'tcp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', + 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'tc', 'hop', 'sctp', 'sport', 'dport', 'tag'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'proto', 'tc', 'hop', 'vf0'], + 'actions': ['queue']}, + {'create': 'validate', + 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'tc', 'hop', 'tcp', 'sport', 'dport', 'vf1'], + 'actions': ['queue']}, + {'create': 'validate', + 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'tc', 'hop', 'sctp', 'sport', 'dport', 'tag'], + 'actions': ['drop']}, + {'create': 'validate', + 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'tc', 'hop', 'tcp', 'sport', 'dport', 'vf1'], + 'actions': ['drop']}, {'create': 'create', 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'proto', 'tc', 'hop'], 'actions': ['queue']}, {'create': 'create', 'flows': ['vlan', 'ipv6', 'sip', 'dip', 'tc', 'hop', 'udp', 'sport', 'dport'], @@ -1593,6 +1700,16 @@ class TestGeneric_flow_api(TestCase): if (self.nic in ["niantic", "twinville"]): # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['fuzzy', 'ipv6', 'sip', 'dip'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip', 'udp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv6', 'sip', 'dip', 'tcp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip', 'tcp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv6', 'sip', 'dip', 'sctp'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip', 'sctp'], 'actions': ['queue']}, {'create': 'create', 'flows': ['fuzzy', 'ipv6', 'sip', 'dip'], 'actions': ['queue']}, {'create': 'create', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip'], 'actions': ['queue']}, {'create': 'create', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip', 'udp', 'sport', 'dport'], @@ -1605,6 +1722,9 @@ class TestGeneric_flow_api(TestCase): {'create': 'create', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip', 'sctp'], 'actions': ['queue']}, ] extrapkt_rulenum = self.all_flows_process(basic_flow_actions) + self.dut.send_expect( + "flow validate 0 ingress pattern fuzzy thresh spec 2 thresh last 5 thresh mask 0xffffffff / ipv6 src is 2001::1 dst is 2001::2 / udp src is 22 dst is 23 / end actions queue index 1 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern fuzzy thresh spec 2 thresh last 5 thresh mask 0xffffffff / ipv6 src is 2001::1 dst is 2001::2 / udp src is 22 dst is 23 / end actions queue index 1 / end", "created") @@ -1620,6 +1740,16 @@ class TestGeneric_flow_api(TestCase): elif (self.nic in ["sagepond", "sageville"]): # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip', 'udp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv6', 'sip', 'dip', 'tcp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip', 'tcp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv6', 'sip', 'dip', 'sctp', 'sport', 'dport'], + 'actions': ['queue']}, + {'create': 'validate', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip', 'sctp', 'sport', 'dport'], + 'actions': ['queue']}, {'create': 'create', 'flows': ['fuzzy', 'ipv4', 'sip', 'dip', 'udp', 'sport', 'dport'], 'actions': ['queue']}, {'create': 'create', 'flows': ['fuzzy', 'ipv6', 'sip', 'dip', 'tcp', 'sport', 'dport'], @@ -1632,6 +1762,9 @@ class TestGeneric_flow_api(TestCase): 'actions': ['queue']}, ] extrapkt_rulenum = self.all_flows_process(basic_flow_actions) + self.dut.send_expect( + "flow validate 0 ingress pattern fuzzy thresh spec 2 thresh last 5 thresh mask 0xffffffff / ipv6 src is 2001::1 dst is 2001::2 / udp src is 22 dst is 23 / end actions queue index 1 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern fuzzy thresh spec 2 thresh last 5 thresh mask 0xffffffff / ipv6 src is 2001::1 dst is 2001::2 / udp src is 22 dst is 23 / end actions queue index 1 / end", "created") @@ -1656,7 +1789,7 @@ class TestGeneric_flow_api(TestCase): # i40e if (self.nic in ["fortville_eagle", "fortville_25g", "fortville_spirit", "carlsville", "fortville_spirit_single", "fortpark_TLV","fortpark_BASE-T"]): - self.pmdout.start_testpmd("%s" % self.pf_cores, "--pkt-filter-mode=perfect --disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf" % self.pf_pci) + self.pmdout.start_testpmd("%s" % self.pf_cores, "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf" % self.pf_pci) self.dut.send_expect("set fwd rxonly", "testpmd> ", 120) self.dut.send_expect("set verbose 1", "testpmd> ", 120) self.dut.send_expect("start", "testpmd> ", 120) @@ -1664,10 +1797,57 @@ class TestGeneric_flow_api(TestCase): # creat the flow rules # l2-payload exceeds the max length of raw match is 16bytes + self.dut.send_expect( + "flow validate 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnopq / end actions queue index 1 / end", + "error") self.dut.send_expect( "flow create 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnopq / end actions queue index 1 / end", "Exceeds maxmial payload limit") # l2-payload equal the max length of raw match is 16bytes + self.dut.send_expect( + "flow validate 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnop / end actions queue index 1 / end", + "validated") + + self.dut.send_expect( + "flow create 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnop / end actions queue index 1 / end", + "created") + # ipv4-other the most 3 fields can be matched, and the max sum bytes of the three fields is 16 bytes. + self.dut.send_expect( + "flow validate 0 ingress pattern eth / vlan tci is 4095 / ipv4 proto is 255 ttl is 40 / raw relative is 1 offset is 2 pattern is ab / raw relative is 1 offset is 10 pattern is abcdefghij / raw relative is 1 offset is 0 pattern is abcd / end actions queue index 2 / end", + "validated") + + self.dut.send_expect( + "flow create 0 ingress pattern eth / vlan tci is 4095 / ipv4 proto is 255 ttl is 40 / raw relative is 1 offset is 2 pattern is ab / raw relative is 1 offset is 10 pattern is abcdefghij / raw relative is 1 offset is 0 pattern is abcd / end actions queue index 2 / end", + "created") + # ipv4-udp + self.dut.send_expect( + "flow validate 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / udp src is 22 dst is 23 / raw relative is 1 offset is 2 pattern is fhds / end actions queue index 3 / end", + "validated") + + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / udp src is 22 dst is 23 / raw relative is 1 offset is 2 pattern is fhds / end actions queue index 3 / end", + "created") + # ipv4-tcp + self.dut.send_expect( + "flow validate 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 tos is 4 ttl is 3 / tcp src is 32 dst is 33 / raw relative is 1 offset is 2 pattern is hijk / end actions queue index 4 / end", + "validated") + + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 tos is 4 ttl is 3 / tcp src is 32 dst is 33 / raw relative is 1 offset is 2 pattern is hijk / end actions queue index 4 / end", + "created") + # ipv4-sctp + self.dut.send_expect( + "flow validate 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / sctp src is 42 / raw relative is 1 offset is 2 pattern is abcd / end actions queue index 5 / end", + "validated") + + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 src is 2.2.2.4 dst is 2.2.2.5 / sctp src is 42 / raw relative is 1 offset is 2 pattern is abcd / end actions queue index 5 / end", + "created") + + # flush all the rules, then re-create the rules, fix DPDK-23826 + self.dut.send_expect( + "flow flush 0", "testpmd> ") + # l2-payload equal the max length of raw match is 16bytes self.dut.send_expect( "flow create 0 ingress pattern eth type is 0x0807 / raw relative is 1 pattern is abcdefghijklmnop / end actions queue index 1 / end", "created") @@ -1713,13 +1893,17 @@ class TestGeneric_flow_api(TestCase): self.dut.send_expect("quit", "# ") time.sleep(2) - self.pmdout.start_testpmd("%s" % self.pf_cores, "--pkt-filter-mode=perfect --disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf --socket-mem 1024,1024" % self.pf_pci) + self.pmdout.start_testpmd("%s" % self.pf_cores, "--disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1), "-w %s --file-prefix=pf --socket-mem 1024,1024" % self.pf_pci) self.dut.send_expect("set fwd rxonly", "testpmd> ", 120) self.dut.send_expect("set verbose 1", "testpmd> ", 120) self.dut.send_expect("start", "testpmd> ", 120) time.sleep(2) # ipv6-tcp + self.dut.send_expect( + "flow validate 0 ingress pattern eth / vlan tci is 1 / ipv6 src is 2001::1 dst is 2001::2 tc is 3 hop is 30 / tcp src is 32 dst is 33 / raw relative is 1 offset is 0 pattern is hijk / raw relative is 1 offset is 8 pattern is abcdefgh / end actions queue index 6 / end", + "validated") + self.dut.send_expect( "flow create 0 ingress pattern eth / vlan tci is 1 / ipv6 src is 2001::1 dst is 2001::2 tc is 3 hop is 30 / tcp src is 32 dst is 33 / raw relative is 1 offset is 0 pattern is hijk / raw relative is 1 offset is 8 pattern is abcdefgh / end actions queue index 6 / end", "created") @@ -1729,6 +1913,16 @@ class TestGeneric_flow_api(TestCase): 'Ether(dst="%s")/Dot1Q(vlan=1)/IPv6(src="2001::1", dst="2001::2", tc=3, hlim=30)/TCP(sport=32,dport=33)/Raw(load="hijkabcdefghabcdefghijklmn")' % self.outer_mac) self.verify_result("pf", expect_rxpkts="1", expect_queue="6", verify_mac=self.outer_mac) + # destroy the rule, then re-create the rule, fix DPDK-23826 + self.dut.send_expect( + "flow destroy 0 rule 0", "testpmd> ") + self.dut.send_expect( + "flow create 0 ingress pattern eth / vlan tci is 1 / ipv6 src is 2001::1 dst is 2001::2 tc is 3 hop is 30 / tcp src is 32 dst is 33 / raw relative is 1 offset is 0 pattern is hijk / raw relative is 1 offset is 8 pattern is abcdefgh / end actions queue index 6 / end", + "created") + self.sendpkt( + 'Ether(dst="%s")/Dot1Q(vlan=1)/IPv6(src="2001::1", dst="2001::2", tc=3, hlim=30)/TCP(sport=32,dport=33)/Raw(load="hijkabcdefghabcdefghijklmn")' % self.outer_mac) + self.verify_result("pf", expect_rxpkts="1", expect_queue="6", verify_mac=self.outer_mac) + # ixgbe else: self.pmdout.start_testpmd("%s" % self.cores, "--pkt-filter-mode=perfect --disable-rss --rxq=%d --txq=%d" % (MAX_QUEUE+1, MAX_QUEUE+1)) @@ -1738,6 +1932,9 @@ class TestGeneric_flow_api(TestCase): time.sleep(2) # ipv4-udp-flexbytes + self.dut.send_expect( + "flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / udp src is 24 dst is 25 / raw relative is 0 search is 0 offset is 44 limit is 0 pattern is 86 / end actions queue index 1 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / udp src is 24 dst is 25 / raw relative is 0 search is 0 offset is 44 limit is 0 pattern is 86 / end actions queue index 1 / end", "created") @@ -1758,6 +1955,15 @@ class TestGeneric_flow_api(TestCase): time.sleep(2) # ipv4-tcp-flexbytes spec-mask + self.dut.send_expect( + "flow validate 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst is 192.168.0.4 / tcp src is 22 dst is 23 / raw relative spec 0 relative mask 1 search spec 0 search mask 1 offset spec 54 offset mask 0xffffffff limit spec 0 limit mask 0xffff pattern is ab pattern is cd / end actions queue index 2 / end", + "validated") + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst is 192.168.0.4 / tcp src is 22 dst is 23 / raw relative spec 0 relative mask 1 search spec 0 search mask 1 offset spec 54 offset mask 0xffffffff limit spec 0 limit mask 0xffff pattern is ab pattern is cd / end actions queue index 2 / end", + "created") + # destroy the rule, then re-create the rule, fix DPDK-23826 + self.dut.send_expect( + "flow destroy 0 rule 0", "testpmd> ") self.dut.send_expect( "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst is 192.168.0.4 / tcp src is 22 dst is 23 / raw relative spec 0 relative mask 1 search spec 0 search mask 1 offset spec 54 offset mask 0xffffffff limit spec 0 limit mask 0xffff pattern is ab pattern is cd / end actions queue index 2 / end", "created") @@ -1782,10 +1988,16 @@ class TestGeneric_flow_api(TestCase): # ipv4-sctp-flexbytes if (self.nic in ["sagepond", "sageville"]): + self.dut.send_expect( + "flow validate 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / sctp src is 24 dst is 25 / raw relative is 0 search is 0 offset is 48 limit is 0 pattern is ab / end actions queue index 3 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / sctp src is 24 dst is 25 / raw relative is 0 search is 0 offset is 48 limit is 0 pattern is ab / end actions queue index 3 / end", "created") else: + self.dut.send_expect( + "flow validate 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / sctp / raw relative is 0 search is 0 offset is 48 limit is 0 pattern is ab / end actions queue index 3 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern fuzzy thresh is 6 / eth / ipv4 src is 192.168.0.1 dst is 192.168.0.2 / sctp / raw relative is 0 search is 0 offset is 48 limit is 0 pattern is ab / end actions queue index 3 / end", "created") @@ -1809,6 +2021,9 @@ class TestGeneric_flow_api(TestCase): self.dut.send_expect("start", "testpmd> ", 120) time.sleep(2) + self.dut.send_expect( + "flow validate 0 ingress pattern fuzzy thresh is 6 / ipv6 src is 2001::1 dst is 2001::2 / raw relative is 0 search is 0 offset is 56 limit is 0 pattern is 86 / end actions queue index 4 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern fuzzy thresh is 6 / ipv6 src is 2001::1 dst is 2001::2 / raw relative is 0 search is 0 offset is 56 limit is 0 pattern is 86 / end actions queue index 4 / end", "created") @@ -1833,26 +2048,44 @@ class TestGeneric_flow_api(TestCase): # create the flow rules # l2_payload + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 14 pattern is fhds / end actions queue index 1 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 14 pattern is fhds / end actions queue index 1 / end", "created") # ipv4 packet + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 34 pattern is ab / end actions queue index 2 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 34 pattern is ab / end actions queue index 2 / end", "created") # ipv6 packet + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 58 pattern is efgh / end actions queue index 3 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 58 pattern is efgh / end actions queue index 3 / end", "created") # 3 fields relative is 0 + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 38 pattern is ab / raw relative is 0 offset is 34 pattern is cd / raw relative is 0 offset is 42 pattern is efgh / end actions queue index 4 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 38 pattern is ab / raw relative is 0 offset is 34 pattern is cd / raw relative is 0 offset is 42 pattern is efgh / end actions queue index 4 / end", "created") # 4 fields relative is 0 and 1 + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 48 pattern is ab / raw relative is 1 offset is 0 pattern is cd / raw relative is 0 offset is 44 pattern is efgh / raw relative is 1 offset is 10 pattern is hijklmnopq / end actions queue index 5 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 48 pattern is ab / raw relative is 1 offset is 0 pattern is cd / raw relative is 0 offset is 44 pattern is efgh / raw relative is 1 offset is 10 pattern is hijklmnopq / end actions queue index 5 / end", "created") # 3 fields offset confilict + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 64 pattern is ab / raw relative is 1 offset is 4 pattern is cdefgh / raw relative is 0 offset is 68 pattern is klmn / end actions queue index 6 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 64 pattern is ab / raw relative is 1 offset is 4 pattern is cdefgh / raw relative is 0 offset is 68 pattern is klmn / end actions queue index 6 / end", "created") @@ -1880,19 +2113,34 @@ class TestGeneric_flow_api(TestCase): self.dut.send_expect("flow flush 0", "testpmd> ", 120) # 1 field 128bytes + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 128 pattern is ab / end actions queue index 1 / end", + "error") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 128 pattern is ab / end actions queue index 1 / end", "Failed to create flow") + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 126 pattern is abcd / end actions queue index 1 / end", + "error") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 126 pattern is abcd / end actions queue index 1 / end", "Failed to create flow") + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 126 pattern is ab / end actions queue index 1 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 126 pattern is ab / end actions queue index 1 / end", "created") # 2 field 128bytes + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 68 pattern is ab / raw relative is 1 offset is 58 pattern is cd / end actions queue index 2 / end", + "error") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 68 pattern is ab / raw relative is 1 offset is 58 pattern is cd / end actions queue index 2 / end", "Failed to create flow") + self.dut.send_expect( + "flow validate 0 ingress pattern raw relative is 0 offset is 68 pattern is ab / raw relative is 1 offset is 56 pattern is cd / end actions queue index 2 / end", + "validated") self.dut.send_expect( "flow create 0 ingress pattern raw relative is 0 offset is 68 pattern is ab / raw relative is 1 offset is 56 pattern is cd / end actions queue index 2 / end", "created") @@ -1926,11 +2174,15 @@ class TestGeneric_flow_api(TestCase): # create the flow rules if self.nic in ["fortville_eagle", "fortville_25g", "fortville_spirit"]: basic_flow_actions = [ + {'create': 'validate', 'flows': ['vlan'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['vlan'], 'actions': ['queue']}, {'create': 'create', 'flows': ['vlan'], 'actions': ['queue']}, {'create': 'create', 'flows': ['vlan'], 'actions': ['queue']} ] else: basic_flow_actions = [ + {'create': 'validate', 'flows': ['dst_mac', 'vlan'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['dst_mac', 'vlan'], 'actions': ['queue']}, {'create': 'create', 'flows': ['dst_mac', 'vlan'], 'actions': ['queue']}, {'create': 'create', 'flows': ['dst_mac', 'vlan'], 'actions': ['queue']}, ] @@ -1952,6 +2204,8 @@ class TestGeneric_flow_api(TestCase): # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'udp', 'vxlan', 'vni', 'ineth', 'invlan'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'udp', 'vxlan', 'vni', 'ineth', 'invlan'], 'actions': ['drop']}, {'create': 'create', 'flows': ['ipv4', 'udp', 'vxlan', 'vni', 'ineth', 'invlan'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'udp', 'vxlan', 'vni', 'ineth', 'invlan'], 'actions': ['drop']}, ] @@ -1973,6 +2227,8 @@ class TestGeneric_flow_api(TestCase): # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'nvgre', 'tni', 'ineth', 'invlan'], 'actions': ['queue']}, + {'create': 'validate', 'flows': ['ipv4', 'nvgre', 'tni', 'ineth', 'invlan'], 'actions': ['drop']}, {'create': 'create', 'flows': ['ipv4', 'nvgre', 'tni', 'ineth', 'invlan'], 'actions': ['queue']}, {'create': 'create', 'flows': ['ipv4', 'nvgre', 'tni', 'ineth', 'invlan'], 'actions': ['drop']}, ] @@ -2008,6 +2264,17 @@ class TestGeneric_flow_api(TestCase): # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'udp', 'vxlan', 'ineth'], 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['ipv4', 'udp', 'vxlan', 'vni', 'ineth'], 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['ipv4', 'udp', 'vxlan', 'ineth', 'invlan'], 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['ipv4', 'udp', 'vxlan', 'vni', 'ineth', 'invlan'], + 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['dst_mac', 'ipv4', 'udp', 'vxlan', 'vni', 'ineth'], + 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['ipv4', 'udp', 'vxlan', 'vni', 'ineth', 'invlan'], + 'actions': ['vf0', 'queue']}, + {'create': 'validate', 'flows': ['dst_mac', 'ipv4', 'udp', 'vxlan', 'vni', 'ineth'], + 'actions': ['vf1', 'queue']}, {'create': 'create', 'flows': ['ipv4', 'udp', 'vxlan', 'ineth'], 'actions': ['pf', 'queue']}, {'create': 'create', 'flows': ['ipv4', 'udp', 'vxlan', 'vni', 'ineth'], 'actions': ['pf', 'queue']}, {'create': 'create', 'flows': ['ipv4', 'udp', 'vxlan', 'ineth', 'invlan'], 'actions': ['pf', 'queue']}, @@ -2071,6 +2338,13 @@ class TestGeneric_flow_api(TestCase): # create the flow rules basic_flow_actions = [ + {'create': 'validate', 'flows': ['ipv4', 'nvgre', 'ineth'], 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['ipv4', 'nvgre', 'tni', 'ineth'], 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['ipv4', 'nvgre', 'ineth', 'invlan'], 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['ipv4', 'nvgre', 'tni', 'ineth', 'invlan'], 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['dst_mac', 'ipv4', 'nvgre', 'tni', 'ineth'], 'actions': ['pf', 'queue']}, + {'create': 'validate', 'flows': ['ipv4', 'nvgre', 'tni', 'ineth', 'invlan'], 'actions': ['vf0', 'queue']}, + {'create': 'validate', 'flows': ['dst_mac', 'ipv4', 'nvgre', 'tni', 'ineth'], 'actions': ['vf1', 'queue']}, {'create': 'create', 'flows': ['ipv4', 'nvgre', 'ineth'], 'actions': ['pf', 'queue']}, {'create': 'create', 'flows': ['ipv4', 'nvgre', 'tni', 'ineth'], 'actions': ['pf', 'queue']}, {'create': 'create', 'flows': ['ipv4', 'nvgre', 'ineth', 'invlan'], 'actions': ['pf', 'queue']},