From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6F580A04B5; Wed, 4 Dec 2019 13:36:21 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5198D1BE84; Wed, 4 Dec 2019 13:36:21 +0100 (CET) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id DA1641BE83 for ; Wed, 4 Dec 2019 13:36:18 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Dec 2019 04:36:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,277,1571727600"; d="scan'208";a="205374593" Received: from dpdk-lunannan-dev1.sh.intel.com ([10.67.119.144]) by orsmga008.jf.intel.com with ESMTP; 04 Dec 2019 04:36:14 -0800 From: Nannan Lu To: dts@dpdk.org Cc: Nannan Lu Date: Wed, 4 Dec 2019 20:24:19 +0000 Message-Id: <20191204202419.37795-1-nannan.lu@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [dts] [PATCH V2] test_plans: add CVL switch filter test cases for generic_flow_api 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 CVL switch filter non-pipeline mode vxlan/nvgre/pppoed/pppoes and pipeline mode vxlan/nvgre/non-tunnel to generic_flow_api.rst. Signed-off-by: Nannan Lu --- test_plans/generic_flow_api_test_plan.rst | 6872 ++++++++++++++++++++- 1 file changed, 6796 insertions(+), 76 deletions(-) diff --git a/test_plans/generic_flow_api_test_plan.rst b/test_plans/generic_flow_api_test_plan.rst index 380d9e8..00e977c 100644 --- a/test_plans/generic_flow_api_test_plan.rst +++ b/test_plans/generic_flow_api_test_plan.rst @@ -1,4 +1,4 @@ -.. Copyright (c) <2016>, Intel Corporation +.. Copyright (c) <2019>, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without @@ -38,7 +38,7 @@ Prerequisites ============= 1. Hardware: - Fortville and Niantic + Fortville, Niantic and Columbiaville 2. software: dpdk: http://dpdk.org/git/dpdk @@ -539,111 +539,6831 @@ Test case: Fortville tunnel vxlan testpmd> flow list 0 +Test case: CVL tunnel vxlan +=========================== + +1. Launch the app ``testpmd`` with the following arguments, and + create 16384 rules to make the fdir table full. The 16384 rules + are in the testpmd_cmds file:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 -w 0000:18:00.2 \ + --log-level="ice,8" -- -i --txq=8 --rxq=8 --cmdline-file=testpmd_cmds + testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd + testpmd> rx_vxlan_port add 4789 0 + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> start + + the pf's mac address is 00:00:00:00:01:02 + +2. create switch filter rules and verify + +mac_ipv4_vxlan_ipv4_frag + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 queue index 3 / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 2 or 3 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> 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 drop / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv4_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 queue index 3 / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 rss queues 4 5 end / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 4 or 5 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> 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 drop / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv4_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 25 dst is 23 / end actions queue index 4 / end + +send a packet:: + + sendp([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=25,dport=23) \ + /Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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=25,dport=19) \ + /Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 25 dst is 23 / end actions rss queues 1 2 end / end + +send a packet:: + + sendp([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=25,dport=23) \ + /Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 or 2 + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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=25,dport=19) \ + /Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 1 and 2 + +3) drop action + +create a rule:: + + testpmd> 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 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([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=25,dport=23) \ + /Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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=25,dport=19) \ + /Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv4_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 25 dst is 23 / end actions queue index 5 / end + +send a packet:: + + sendp([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=25,dport=23)\ + /Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 5 + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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=25,dport=20)\ + /Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 5 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([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=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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=25,dport=20)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> 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 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([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=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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=25,dport=20)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv4_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 / sctp src is 25 dst is 23 / end actions queue index 4 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=19)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=19)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> 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 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=20,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/SCTP(sport=25,dport=19)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv4_icmp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 / icmp / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 / icmp / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> 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 / icmp / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/UDP()/VXLAN(vni=2)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/ICMP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_mac_ipv4_frag + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 queue index 2 / end + +send a packet with complete layers:: + + sendp([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)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 2 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 2 or 3 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> 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 drop / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_mac_ipv4_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 queue index 3 / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 rss queues 4 5 end / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 4 or 5 + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> 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 drop / end + +send a packet with complete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these two packets dropped + +send mismatched packets:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_mac_ipv4_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 25 dst is 23 / end actions queue index 1 / end + +send a packet:: + + sendp([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=25,dport=23)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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=25,dport=29)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([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=25,dport=23)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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=25,dport=29)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> 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 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([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=25,dport=23)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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=25,dport=29)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_mac_ipv4_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 queue index 1 / end + +send a packet:: + + sendp([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)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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)],iface="enp27s0f2",count=1) + +verify these packets not to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 rss queues 1 2 end / end + +send a packet:: + + sendp([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)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 or 2 + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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)],iface="enp27s0f2",count=1) + +verify these packets not to queue 1 and 2 + +3) drop action + +create a rule:: + + testpmd> 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 drop / end + +send a packet:: + + sendp([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)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([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)],iface="enp27s0f2",count=1) + + sendp([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)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_mac_ipv4_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 / sctp src is 25 dst is 23 / end actions queue index 4 / end + +send a packet:: + + sendp([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")/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 + +send mismatched packets:: + + sendp([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")/SCTP(sport=20,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([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")/SCTP(sport=25,dport=29)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([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")/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([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")/SCTP(sport=20,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([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")/SCTP(sport=25,dport=29)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> 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 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([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")/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([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")/SCTP(sport=20,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([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")/SCTP(sport=25,dport=29)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_mac_ipv4_icmp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> 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 / icmp / end actions queue index 3 / end + +send a packet:: + + sendp([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")/ICMP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send a mismatched packet:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify this packet not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> 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 / icmp / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([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")/ICMP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> 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 / icmp / end actions drop / end + +send a packet:: + + sendp([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")/ICMP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([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)],\ + iface="enp27s0f2",count=1) + +verify this packet not dropped + +3. verify rules can be listed and destroyed:: + + testpmd> flow list 0 + testpmd> flow flush 0 + testpmd> flow list 0 + + +Test case: CVL tunnel vxlan pipeline mode +========================================= + +1. Launch the app ``testpmd`` with the following arguments:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \ + -w 0000:18:00.2,pipeline-mode-support=1 --log-level="ice,8" \ + -- -i --txq=8 --rxq=8 + testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd + testpmd> rx_vxlan_port add 4789 0 + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> start + + the pf's mac address is 00:00:00:00:01:02 + +2. create switch filter rules and verify + +mac_ipv4_vxlan_ipv4_frag + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions queue index 2 / end + +send a packet with complete layers:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions drop / end + +send a packet with complete layers:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv4_pay (not support in 19.11) + +1) distribute to a single queue + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue and 3 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv4_vxlan_ipv4_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv4_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=19,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=19,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=19,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=30)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv4_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions queue index 4 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=19,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=9)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=19,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=9)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=19,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=9)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv4_icmp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x05)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x05)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x05)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv4_vxlan_ipv6_frag (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 2 / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions rss queues 2 3 end / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions drop / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv6_pay (not support in 19.11) + +1) distribute to a single queue + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 3 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 3 + +2) distribute to rss queues + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv4_vxlan_ipv6_udp_pay (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions rss queues 1 2 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 or 2 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 1 and 2 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=29)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv6_tcp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv6_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_vxlan_ipv6_icmpv6 (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x01)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x02)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x01)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x02)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x01)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/ICMP(type=0x02)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +3. verify rules can be listed and destroyed:: + + testpmd> flow list 0 + testpmd> flow flush 0 + testpmd> flow list 0 + + Test case: Fortville tunnel nvgre ================================= - Prerequisites: + Prerequisites: + + add two vfs on dpdk pf, then bind the vfs to vfio-pci:: + + echo 2 >/sys/bus/pci/devices/0000:05:00.0/max_vfs + ./usertools/dpdk-devbind.py -b vfio-pci 05:02.0 05:02.1 + +1. Launch the app ``testpmd`` with the following arguments:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -w 05:00.0 --file-prefix=pf --socket-mem=1024,1024 -- -i --rxq=16 --txq=16 --tx-offloads=0x8fff + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> set promisc all off + testpmd> start + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e0000 -n 4 -w 05:02.0 --file-prefix=vf0 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> set promisc all off + testpmd> start + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e00000 -n 4 -w 05:02.1 --file-prefix=vf1 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> set promisc all off + testpmd> start + + the pf's mac address is 00:00:00:00:01:00 + the vf0's mac address is 54:52:00:00:00:01 + the vf1's mac address is 54:52:00:00:00:02 + +2. create filter rules + + inner mac + actions pf:: + + testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 1 / end + + tni + inner mac + actions pf:: + + testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 2 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end + + inner mac + inner vlan + actions pf:: + + testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / vlan tci is 30 / end actions pf / queue index 3 / end + + tni + inner mac + inner vlan + actions pf:: + + testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112244 / eth dst is 00:11:22:33:44:55 / vlan tci is 40 / end actions pf / queue index 4 / end + + inner mac + outer mac + tni + actions pf:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112255 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 5 / end + + tni + inner mac + inner vlan + actions vf:: + + testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112266 / eth dst is 00:11:22:33:44:55 / vlan tci is 60 / end actions vf id 0 / queue index 1 / end + + inner mac + outer mac + tni + actions vf:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112277 / eth dst is 00:11:22:33:44:55 / end actions vf id 1 / queue index 3 / end + +3. send packets:: + + pkt1 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) + pkt2 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=2)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) + pkt31 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20) + pkt32 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=31)/IP()/TCP()/Raw('x' * 20) + pkt4 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112244)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=40)/IP()/TCP()/Raw('x' * 20) + pkt51 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) + pkt52 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112256)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) + pkt53 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) + pkt54 = Ether(dst="00:11:22:33:44:77")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) + pkt55 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20) + pkt56 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20) + pkt61 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20) + pkt62 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20) + pkt63 = Ether(dst="54:52:00:00:00:01")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20) + pkt64 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20) + pkt71 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) + pkt72 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) + pkt73 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20) + pkt74 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20) + + verify pkt1 received by pf queue 1, pkt2 to pf queue 2, + pkt31 to pf queue 3, pkt32 to pf queue 1, pkt4 to pf queue 4, + pkt51 to pf queue 5, pkt52 to pf queue 1, pkt53 to pf queue 1, + pkt54 to pf queue 1, pkt55 to pf queue 0, pf can't receive pkt56. + pkt61 to vf0 queue 1 and pf queue 1, pf and vf0 can't receive pkt62, + pkt63 to vf0 queue 0, pkt64 to pf queue 0, vf0 can't receive pkt64, + pkt71 to vf1 queue 3 and pf queue 1, pkt72 to pf queue 1, vf1 can't receive + pkt72, pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74. + +4. verify rules can be listed and destroyed:: + + testpmd> flow list 0 + testpmd> flow destroy 0 rule 0 + + verify pkt51 to pf queue 5, pkt53 and pkt55 to pf queue 0, + pf can't receive pkt52,pkt54 and pkt56. pkt71 to vf1 queue 3, + pkt72 and pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74. + Then:: + + testpmd> flow flush 0 + testpmd> flow list 0 + + +Test case: CVL tunnel nvgre +=========================== + +1. Launch the app ``testpmd`` with the following arguments, and create + 16384 rules to make the fdir table full. The 16384 rules are in the + testpmd_cmds file:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 -w 0000:18:00.2 \ + --log-level="ice,8" -- -i --txq=8 --rxq=8 --cmdline-file=testpmd_cmds + testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> start + + the pf's mac address is 00:00:00:00:01:02 + +2. create switch filter rules and verify + +mac_ipv4_nvgre_ipv4_frag + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x' * 80)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x' * 80)],\ + iface="enp27s0f2",count=1) + +verify these two packets dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv4_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these two packets dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv4_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions queue index 4 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\ + Raw('x'*80)], iface="enp27s0f2", count=1) + +verify this packet to queue 4 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\ + Raw('x'*80)], iface="enp27s0f2", count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19)/\ + Raw('x'*80)], iface="enp27s0f2", count=1) + +verify these packets not to queue 4 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions rss queues 1 2 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\ + Raw('x'*80)], iface="enp27s0f2", count=1) + +verify this packet to queue 1 and 2 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\ + Raw('x'*80)], iface="enp27s0f2", count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19)/\ + Raw('x'*80)], iface="enp27s0f2", count=1) + +verify these packets not to queue 1 and 2 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / udp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=23)/\ + Raw('x'*80)], iface="enp27s0f2", count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=20,dport=23)/\ + Raw('x'*80)], iface="enp27s0f2", count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3")/UDP(sport=25,dport=19)/\ + Raw('x'*80)], iface="enp27s0f2", count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv4_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions queue index 1 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=20,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=39)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions rss queues 1 2 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" )/TCP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 or 2 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=20,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=39)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 1 and 2 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3" )/TCP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=20,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP(sport=25,dport=39)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv4_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=1,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=20)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=1,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=20)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=1,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/SCTP(sport=25,dport=20)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv4_icmp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/ICMP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send a mismatched packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/ICMP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send a mismatched packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/ICMP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/Ether()/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv4_nvgre_mac_ipv4_frag + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a9")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a9")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these two packets dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a9")/\ + IP(src="192.168.1.2", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.4", dst="192.168.1.3" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.5" ,frag=5)/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_mac_ipv4_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions queue index 3 / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a9")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a9")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / end actions drop / end + +send a packet with complete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/TCP()/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.2")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=3)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a9")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.4", dst="192.168.1.3")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.5")/Raw('x'*80)],\ + iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_mac_ipv4_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / udp src is 25 dst is 23 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP(sport=25,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP(sport=2,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP(sport=25,dport=20)/Raw('x'*80)], iface="enp27s0f2", count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / udp src is 25 dst is 23 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP(sport=25,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP(sport=2,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP(sport=25,dport=20)/Raw('x'*80)], iface="enp27s0f2", count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 0x8 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / udp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP(sport=25,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP(sport=2,dport=23)/Raw('x'*80)], iface="enp27s0f2", count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=0x8)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP(sport=25,dport=20)/Raw('x'*80)], iface="enp27s0f2", count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_mac_ipv4_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / tcp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_mac_ipv4_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send a mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send a mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packets:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + SCTP(sport=25,dport=19)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_mac_ipv4_icmp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send a mismatched packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send a mismatched packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.1 / nvgre tni is 2 / eth dst is 68:05:ca:8d:ed:a8 / ipv4 src is 192.168.1.2 dst is 192.168.1.3 / icmp / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP(dst="192.168.0.1")/NVGRE(TNI=2)/\ + Ether(dst="68:05:ca:8d:ed:a8")/\ + IP(src="192.168.1.2", dst="192.168.1.3")/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +3. verify rules can be listed and destroyed:: + + testpmd> flow list 0 + testpmd> flow flush 0 + testpmd> flow list 0 + + +Test case: CVL tunnel nvgre pipeline mode +========================================= + +1. Launch the app ``testpmd`` with the following arguments:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \ + -w 0000:18:00.2,pipeline-mode-support=1 --log-level="ice,8" \ + -- -i --txq=8 --rxq=8 + testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> start + + the pf's mac address is 00:00:00:00:01:02 + +2. create switch filter rules and verify + +mac_ipv4_nvgre_ipv4_frag + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions queue index 3 / end + +send a packet with complete layers:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/TCP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/TCP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/TCP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/TCP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions drop / end + +send a packet with complete layers:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/TCP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2", dst="192.168.0.3",tos=5,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv4_pay (not support in 19.11) + +1) distribute to a single queue + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 and 3 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x11,tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",proto=0x06,tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv4_nvgre_ipv4_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=20)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=20)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=2,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/UDP(sport=25,dport=20)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv4_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=3,dport=23)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=20)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=3,dport=23)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=20)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=3,dport=23)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP(sport=25,dport=20)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv4_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions queue index 4 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=4,dport=23)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/SCTP(sport=25,dport=10)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=4,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=10)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/\ + Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=4,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/\ + Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=10)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv4_icmp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x04)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x04)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x08)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/ICMP(type=0x04)/\ + Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv4_nvgre_ipv6_frag (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 2 / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions rss queues 2 3 end / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions drop / end + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv6_PAY (not support in 19.11) + +1) distribute to a single queue + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 3 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv4_nvgre_ipv6_udp_pay (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=30)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv6_tcp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=7,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=7,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=7,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv6_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions queue index 5 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 5 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=39)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 5 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=39)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=20,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=39)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_nvgre_ipv6_icmpv6 (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / nvgre / eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP()/NVGRE()/Ether()/\ + IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +3. verify rules can be listed and destroyed:: + + testpmd> flow list 0 + testpmd> flow flush 0 + testpmd> flow list 0 + + +Test case: CVL PPPoD +==================== + +1. Launch the app ``testpmd`` with the following arguments, and create \ + 16384 rules to make the fdir table full. The 16384 rules are in the \ + testpmd_cmds file:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \ + -w 0000:18:00.2 --log-level="ice,8" -- -i --txq=8 --rxq=8 \ + --cmdline-file=testpmd_cmds + testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> start + + the pf's mac address is 00:00:00:00:01:02 + +2. create switch filter rules and verify + +mac_pppod_pay + +1) distribute to a single queue + +create rules:: + + testpmd> flow create 0 ingress pattern eth type is 0x8863 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\ + Raw('x' *80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\ + Raw('x' *80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth type is 0x8863 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\ + Raw('x' *80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\ + Raw('x' *80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth type is 0x8863 / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\ + Raw('x' *80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\ + Raw('x' *80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +3. verify rules can be listed and destroyed:: + + testpmd> flow list 0 + testpmd> flow flush 0 + testpmd> flow list 0 + + +Test case: CVL PPPoE +==================== + +1. Launch the app ``testpmd`` with the following arguments, and create \ + 16384 rules to make the fdir table full. The 16384 rules are in the \ + testpmd_cmds file:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \ + -w 0000:18:00.2 --log-level="ice,8" -- -i --txq=8 --rxq=8 \ + --cmdline-file=testpmd_cmds + testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> start + + the pf's mac address is 00:00:00:00:01:02 + +2. create switch filter rules and verify + +mac_pppoe_pay + +1) distribute to a single queue + +create rules:: + + testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send a mismatched packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth type is 0x8864 / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoE()/PPP()/IP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether(dst="00:11:22:33:44:55")/PPPoED()/PPP()/IP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_pppoe_ipv4_frag + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify the packet to queue 1 + +send mismatched packets:: + + sendp([Ether(dst="00:11:22:33:44:54",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify the packet not to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type= 0x8100)/\ + Dot1Q(vlan=1,type= 0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether(dst="00:11:22:33:44:54",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify the packet not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether(dst="00:11:22:33:44:54",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP(frag=5)/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify the packet not dropped + +mac_pppoe_ipv4_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +send a mismatched packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=2,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send a mismatched packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=2,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=2,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_pppoe_ipv4_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +mac_pppoe_ipv4_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +mac_pppoe_ipv4_sctp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +mac_pppoe_ipv4_icmp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0021)/\ + IP()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +mac_pppoe_ipv6_frag + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55", type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +mac_pppoe_ipv6_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +mac_pppoe_ipv6_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/UDP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +mac_pppoe_ipv6_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/TCP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 4 5 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/TCP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 or 4 or 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/TCP()/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +mac_pppoe_ipv6_sctp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/IPv6()/\ + SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/SCTP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +mac_pppoe_ipv6_icmpv6 + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions queue index 1 / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 1 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / vlan tci is 1 / pppoes / end actions drop / end + +send a packet:: + + sendp([Ether(dst="00:11:22:33:44:55",type=0x8100)/\ + Dot1Q(vlan=1,type=0x8864)/PPPoE()/PPP(proto=0x0057)/\ + IPv6()/ICMP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +3. verify rules can be listed and destroyed:: + + testpmd> flow list 0 + testpmd> flow flush 0 + testpmd> flow list 0 + + +Test case: CVL non-tunnel pipeline mode +======================================= + +1. Launch the app ``testpmd`` with the following arguments:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \ + -w 0000:18:00.2,pipeline-mode-support=1 --log-level="ice,8" \ + -- -i --txq=8 --rxq=8 + testpmd> port config 0 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd + testpmd> set fwd rxonly + testpmd> set verbose 1 + testpmd> start + + the pf's mac address is 00:00:00:00:01:02 + +2. create switch filter rules and verify + +mac_ipv4_frag + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions queue index 3 / end + +send a packet with complete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=7,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +create a rule with partial fields:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions queue index 3 / end + +send a packet with complete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=7,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +create a rule with partial fields:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions rss queues 2 3 end / end + +send a packet with complete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / end actions drop / end + +send a packet with complete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets dropped + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=7,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +create a rule with partial fields:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 / end actions drop / end + +send a packet with complete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +send a packet with incomplete layers:: + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.3",tos=4,frag=5)/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets dropped + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.4", dst="192.168.0.3",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2", dst="192.168.0.5",tos=4,frag=5)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_pay + +1) distribute to a single queue + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send a mismatched packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 and 3 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x06 tos is 4 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/TCP()/\ + Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 proto is 0x11 tos is 4 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv4_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=2,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=2,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / udp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=2,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + UDP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=7)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=7)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / tcp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=5,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + TCP(sport=25,dport=7)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions queue index 4 / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + SCTP(sport=25,dport=3)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv4_icmp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + ICMP(type=0x08)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + ICMP(type=0x08)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is 192.168.0.2 dst is 192.168.0.3 tos is 4 / icmp type is 0x08 / end actions drop / end + +send a packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + ICMP(type=0x08)/Raw('x' * 80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IP(src="192.168.0.2",dst="192.168.0.3",tos=4)/\ + ICMP(type=0x04)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv6_frag + +1) distribute to a single queue + +create a rule with src ipv6 + dst ipv6:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 5 / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 5 + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 5 + +create a rule with dst ipv6 + tc:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2027",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 3 + +2) distribute to rss queue + +create a rule with src ipv6 + dst ipv6:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions rss queues 2 3 end / end - add two vfs on dpdk pf, then bind the vfs to vfio-pci:: +send a packet:: - echo 2 >/sys/bus/pci/devices/0000:05:00.0/max_vfs - ./usertools/dpdk-devbind.py -b vfio-pci 05:02.0 05:02.1 + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) -1. Launch the app ``testpmd`` with the following arguments:: +verify this packet to queue 2 or 3 - ./x86_64-native-linuxapp-gcc/app/testpmd -c 1ffff -n 4 -w 05:00.0 --file-prefix=pf --socket-mem=1024,1024 -- -i --rxq=16 --txq=16 --tx-offloads=0x8fff - testpmd> set fwd rxonly - testpmd> set verbose 1 - testpmd> set promisc all off - testpmd> start +send mismatched packets:: - ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e0000 -n 4 -w 05:02.0 --file-prefix=vf0 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff - testpmd> set fwd rxonly - testpmd> set verbose 1 - testpmd> set promisc all off - testpmd> start + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) - ./x86_64-native-linuxapp-gcc/app/testpmd -c 1e00000 -n 4 -w 05:02.1 --file-prefix=vf1 --socket-mem=1024,1024 -- -i --rxq=4 --txq=4 --tx-offloads=0x8fff - testpmd> set fwd rxonly - testpmd> set verbose 1 - testpmd> set promisc all off - testpmd> start + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) - the pf's mac address is 00:00:00:00:01:00 - the vf0's mac address is 54:52:00:00:00:01 - the vf1's mac address is 54:52:00:00:00:02 +verify these packets not to queue 2 and 3 -2. create filter rules +create a rule with dst ipv6 + tc:: - inner mac + actions pf:: + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions rss queues 2 3 end / end - testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 1 / end +send a packet:: - tni + inner mac + actions pf:: + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) - testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 2 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 2 / end +verify this packet to queue 2 or 3 - inner mac + inner vlan + actions pf:: +send mismatched packets:: - testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre / eth dst is 00:11:22:33:44:55 / vlan tci is 30 / end actions pf / queue index 3 / end + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2027",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) - tni + inner mac + inner vlan + actions pf:: + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) - testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112244 / eth dst is 00:11:22:33:44:55 / vlan tci is 40 / end actions pf / queue index 4 / end +verify these packets not to queue 2 and 3 - inner mac + outer mac + tni + actions pf:: +3) drop action - testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112255 / eth dst is 00:11:22:33:44:55 / end actions pf / queue index 5 / end +create a rule with src ipv6 + dst ipv6:: - tni + inner mac + inner vlan + actions vf:: + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is CDCD:910A:2222:5498:8475:1111:3900:1515 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions drop / end - testpmd> flow create 0 ingress pattern eth / ipv4 / nvgre tni is 0x112266 / eth dst is 00:11:22:33:44:55 / vlan tci is 60 / end actions vf id 0 / queue index 1 / end +send a packet:: - inner mac + outer mac + tni + actions vf:: + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) - testpmd> flow create 0 ingress pattern eth dst is 00:11:22:33:44:66 / ipv4 / nvgre tni is 0x112277 / eth dst is 00:11:22:33:44:55 / end actions vf id 1 / queue index 3 / end +verify this packet dropped -3. send packets:: +send mismatched packets:: - pkt1 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) - pkt2 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=2)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) - pkt31 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=30)/IP()/TCP()/Raw('x' * 20) - pkt32 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE()/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=31)/IP()/TCP()/Raw('x' * 20) - pkt4 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112244)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=40)/IP()/TCP()/Raw('x' * 20) - pkt51 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) - pkt52 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112256)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) - pkt53 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) - pkt54 = Ether(dst="00:11:22:33:44:77")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) - pkt55 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20) - pkt56 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112255)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20) - pkt61 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:55")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20) - pkt62 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20) - pkt63 = Ether(dst="54:52:00:00:00:01")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20) - pkt64 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112266)/Ether(dst="00:11:22:33:44:77")/Dot1Q(vlan=60)/IP()/TCP()/Raw('x' * 20) - pkt71 = Ether(dst="00:11:22:33:44:66")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) - pkt72 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:55")/IP()/TCP()/Raw('x' * 20) - pkt73 = Ether(dst="54:52:00:00:00:02")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20) - pkt74 = Ether(dst="00:00:00:00:01:00")/IP()/NVGRE(TNI=0x112277)/Ether(dst="00:11:22:33:44:77")/IP()/TCP()/Raw('x' * 20) + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1514",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) - verify pkt1 received by pf queue 1, pkt2 to pf queue 2, - pkt31 to pf queue 3, pkt32 to pf queue 1, pkt4 to pf queue 4, - pkt51 to pf queue 5, pkt52 to pf queue 1, pkt53 to pf queue 1, - pkt54 to pf queue 1, pkt55 to pf queue 0, pf can't receive pkt56. - pkt61 to vf0 queue 1 and pf queue 1, pf and vf0 can't receive pkt62, - pkt63 to vf0 queue 0, pkt64 to pf queue 0, vf0 can't receive pkt64, - pkt71 to vf1 queue 3 and pf queue 1, pkt72 to pf queue 1, vf1 can't receive - pkt72, pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74. + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2023",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) -4. verify rules can be listed and destroyed:: +verify these packets not dropped - testpmd> flow list 0 - testpmd> flow destroy 0 rule 0 +create a rule with dst ipv6 + tc:: - verify pkt51 to pf queue 5, pkt53 and pkt55 to pf queue 0, - pf can't receive pkt52,pkt54 and pkt56. pkt71 to vf1 queue 3, - pkt72 and pkt73 to vf1 queue 0, pkt74 to pf queue 0, vf1 can't receive pkt74. - Then:: - + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / end actions drop / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2027",tc=3)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=4)/\ + IPv6ExtHdrFragment()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv6_pay (not support in 19.11) + +1) distribute to a single queue + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions queue index 3 / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 3 + +send a mismatched packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 3 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule for tcp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x06 tc is 3 / end actions drop / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +create a rule for udp:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 0x11 tc is 3 / end actions drop / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x11,tc=3)/\ + UDP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",nh=0x06,tc=3)/\ + TCP()/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +mac_ipv6_udp_pay + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions queue index 5 / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 5 + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=3,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=4)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 5 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=3,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=4)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / udp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=3,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + UDP(sport=25,dport=4)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these packets not dropped + +mac_ipv6_tcp + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions queue index 4 / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets not to queue 4 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + TCP(sport=25,dport=20)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets not dropped + +mac_ipv6_sctp (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions queue index 4 / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=9)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets not to queue 4 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions rss queues 2 3 end / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 or 3 + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=9)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets not to queue 2 and 3 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / sctp src is 25 dst is 23 / end actions drop / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send mismatched packets:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=1,dport=23)/Raw('x'*80)],iface="enp27s0f2",count=1) + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + SCTP(sport=25,dport=9)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify these two packets not dropped + +mac_ipv6_icmpv6 (not support in 19.11) + +1) distribute to a single queue + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions queue index 2 / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 2 + +send a mismatched packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x03)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 2 + +2) distribute to rss queues + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions rss queues 4 5 end / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet to queue 4 or 5 + +send a mismatched packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x03)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not to queue 4 and 5 + +3) drop action + +create a rule:: + + testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / icmp type is 0x01 / end actions drop / end + +send a packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x01)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet dropped + +send a mismatched packet:: + + sendp([Ether()/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1515",\ + dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/\ + ICMP(type=0x03)/Raw('x'*80)],iface="enp27s0f2",count=1) + +verify this packet not dropped + +3. verify rules can be listed and destroyed:: + + testpmd> flow list 0 testpmd> flow flush 0 testpmd> flow list 0 -- 2.17.1