Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/96653/?format=api
http://patchwork.dpdk.org/api/patches/96653/?format=api", "web_url": "http://patchwork.dpdk.org/project/dts/patch/1628088115-756-6-git-send-email-lijuan.tu@intel.com/", "project": { "id": 3, "url": "http://patchwork.dpdk.org/api/projects/3/?format=api", "name": "DTS", "link_name": "dts", "list_id": "dts.dpdk.org", "list_email": "dts@dpdk.org", "web_url": "", "scm_url": "git://dpdk.org/tools/dts", "webscm_url": "http://git.dpdk.org/tools/dts/", "list_archive_url": "https://inbox.dpdk.org/dts", "list_archive_url_format": "https://inbox.dpdk.org/dts/{}", "commit_url_format": "" }, "msgid": "<1628088115-756-6-git-send-email-lijuan.tu@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/1628088115-756-6-git-send-email-lijuan.tu@intel.com", "date": "2021-08-04T14:41:55", "name": "[v2,5/5] remove cloud_filter as it is no longer maintained", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "d96f559c878af3442066ad144df0cde30bf04b00", "submitter": { "id": 1098, "url": "http://patchwork.dpdk.org/api/people/1098/?format=api", "name": "Tu, Lijuan", "email": "lijuan.tu@intel.com" }, "delegate": null, "mbox": "http://patchwork.dpdk.org/project/dts/patch/1628088115-756-6-git-send-email-lijuan.tu@intel.com/mbox/", "series": [ { "id": 18180, "url": "http://patchwork.dpdk.org/api/series/18180/?format=api", "web_url": "http://patchwork.dpdk.org/project/dts/list/?series=18180", "date": "2021-08-04T14:41:50", "name": "remove some run-down cases", "version": 2, "mbox": "http://patchwork.dpdk.org/series/18180/mbox/" } ], "comments": "http://patchwork.dpdk.org/api/patches/96653/comments/", "check": "success", "checks": "http://patchwork.dpdk.org/api/patches/96653/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dts-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id BB628A0C51;\n\tWed, 4 Aug 2021 08:52:17 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id ABAC04121E;\n\tWed, 4 Aug 2021 08:52:17 +0200 (CEST)", "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n by mails.dpdk.org (Postfix) with ESMTP id 8023D4014F\n for <dts@dpdk.org>; Wed, 4 Aug 2021 08:52:14 +0200 (CEST)", "from fmsmga008.fm.intel.com ([10.253.24.58])\n by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 03 Aug 2021 23:52:10 -0700", "from unknown (HELO dpdk-lijuan.sh.intel.com) ([10.67.119.192])\n by fmsmga008.fm.intel.com with ESMTP; 03 Aug 2021 23:52:09 -0700" ], "X-IronPort-AV": [ "E=McAfee;i=\"6200,9189,10065\"; a=\"299451062\"", "E=Sophos;i=\"5.84,293,1620716400\"; d=\"scan'208\";a=\"299451062\"", "E=Sophos;i=\"5.84,293,1620716400\"; d=\"scan'208\";a=\"479985081\"" ], "X-ExtLoop1": "1", "From": "Lijuan Tu <lijuan.tu@intel.com>", "To": "dts@dpdk.org", "Cc": "Lijuan Tu <lijuan.tu@intel.com>", "Date": "Wed, 4 Aug 2021 22:41:55 +0800", "Message-Id": "<1628088115-756-6-git-send-email-lijuan.tu@intel.com>", "X-Mailer": "git-send-email 1.8.3.1", "In-Reply-To": "<1628088115-756-1-git-send-email-lijuan.tu@intel.com>", "References": "<1628088115-756-1-git-send-email-lijuan.tu@intel.com>", "Subject": "[dts] [v2, 5/5] remove cloud_filter as it is no longer maintained", "X-BeenThere": "dts@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "test suite reviews and discussions <dts.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dts/>", "List-Post": "<mailto:dts@dpdk.org>", "List-Help": "<mailto:dts-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>", "Errors-To": "dts-bounces@dpdk.org", "Sender": "\"dts\" <dts-bounces@dpdk.org>" }, "content": "Signed-off-by: Lijuan Tu <lijuan.tu@intel.com>\n---\n test_plans/cloud_filter_test_plan.rst | 326 ------------------------\n test_plans/index.rst | 1 -\n tests/TestSuite_cloud_filter.py | 463 ----------------------------------\n 3 files changed, 790 deletions(-)\n delete mode 100644 test_plans/cloud_filter_test_plan.rst\n delete mode 100644 tests/TestSuite_cloud_filter.py", "diff": "diff --git a/test_plans/cloud_filter_test_plan.rst b/test_plans/cloud_filter_test_plan.rst\ndeleted file mode 100644\nindex 500e131..0000000\n--- a/test_plans/cloud_filter_test_plan.rst\n+++ /dev/null\n@@ -1,326 +0,0 @@\n-.. Copyright (c) <2016-2017> Intel Corporation\n- All rights reserved.\n-\n- Redistribution and use in source and binary forms, with or without\n- modification, are permitted provided that the following conditions\n- are met:\n-\n- - Redistributions of source code must retain the above copyright\n- notice, this list of conditions and the following disclaimer.\n-\n- - Redistributions in binary form must reproduce the above copyright\n- notice, this list of conditions and the following disclaimer in\n- the documentation and/or other materials provided with the\n- distribution.\n-\n- - Neither the name of Intel Corporation nor the names of its\n- contributors may be used to endorse or promote products derived\n- from this software without specific prior written permission.\n-\n- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n- \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n- FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n- COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n- OF THE POSSIBILITY OF SUCH DAMAGE.\n-\n-==========================================\n-Cloud filter Support through Ethtool Tests\n-==========================================\n-\n-This feature based on X710 to classify VxLan/Geneve packets and put those into\n-a specified queue in VF for further processing from virtual switch.\n-\n-Prerequisites\n-=============\n-Cloud filter feature based on latest i40e out of tree driver. Should also\n-update ethtool and XL710 firmware:\n-\n-* Ethtool version: 3.18\n-* i40e driver: i40e-1.5.13_rc1\n-* Kernel version: 4.2.2\n-* Xl710 DA2 firmware: 5.02 0x80002282\n-\n-BIOS setting:\n-\n-* Enable VT-d and VT-x\n-\n-Kernel command line:\n-\n-* Enable Intel IOMMU with below arguments\n-* intel_iommu=on iommu=pt\n-\n-Create two VFs from kernel driver::\n-\n- echo 2 > /sys/bus/pci/devices/0000\\:82\\:00.0/sriov_numvfs\n- ifconfig $PF_INTF up\n-\n-Add vxlan network interface based on PF device::\n-\n- ip li add vxlan0 type vxlan id 1 group 239.1.1.1 local 127.0.0.1 dev $PF_INTF\n- ifconfig vxlan0 up\n-\n-Allocate hugepage for dpdk::\n-\n- echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages\n-\n-Bind vf device to igb_uio driver and start testpmd with multiple queues::\n-\n- cd dpdk\n- modprobe uio\n- insmod ./x86_64-native-linuxapp-gcc/kmod/igb_uio.ko\n- ./tools/dpdk_nic_bind.py --bind=igb_uio 82:02.0 82:02.1\n- ./x86_64-native-linuxapp-gcc/app/testpmd -c ffff -n 4 -- -i --rxq=4 --txq=4 --disable-rss\n- testpmd> set nbcore 8\n- testpmd> set fwd rxonly\n- testpmd> set verbose 1\n- testpmd> start\n-\n-\n-Test case: cloud filter rule(inner ip)\n---------------------------------------\n-\n-1. Add cloud filter with inner ip address rule. Flow type ip4 mean this rule\n- only match inner destination ip address. User define field higher 32bit is\n- all 0xf mean vni id is not in the rule. Lower 32bit is 1 mean packet will\n- be forwarded to VF1. Action 3 mean packet will be redirected to queue 3::\n-\n- ethtool -N $PF_INTF flow-type ip4 dst-ip 192.168.1.1 user-def 0xffffffff00000001 action 3 loc 1\n-\n-2. Send vxlan packet with inner ip matched rule::\n-\n- Ether()/IP()/UDP()/Vxlan()/Ether()/IP(dst=\"192.168.1.1\")/TCP()/Raw('x' * 20)\n-\n-3. verify packet received by queue3 of VF1, verify packet type is correct::\n-\n- testpmd> port 1/queue 3: received 1 packets\n- src=00:00:00:00:00:00 - dst=00:00:00:00:09:00 - type=0x0800 - length=106 - nb_segs=1\n-\n- - (outer) L2 type: ETHER - (outer) L3 type: IPV4_EXT_UNKNOWN - (outer) L4 type: Unknown\n- - Tunnel type: GRENAT - Inner L2 type: ETHER - Inner L3 type: IPV4_EXT_UNKNOWN - Inner L4 type: UDP\n- - VXLAN packet: packet type =24721, Destination UDP port =8472, VNI = 1 - Receive queue=0x3\n-\n-Test case: cloud filter rule(inner mac)\n----------------------------------------\n-1. Add cloud filter with Inner mac rule. Dst mac mask ff:ff:ff:ff:ff:ff mean\n- outer mac address is not in the rule. Src mac mask 00:00:00:00:00:00 mean\n- inner mac address is in the rule. User define field higher 32bit is all\n- 0xf mean vni id is not in the rule. Lower 32bit is 1 mean packet will be\n- forwarded to VF1. Action 3 mean packet will be redirected to queue 3::\n-\n- ethtool -N $PF_INTF flow-type ether dst 00:00:00:00:00:00 m \\\n- ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \\\n- user-def 0xffffffff00000001 action 3 loc 1\n-\n-2. Send vxlan packet with inner mac matched rule::\n-\n- Ether()/IP()/UDP()/Vxlan()/Ether(dst=\"00:00:00:00:09:00\")/IP()/TCP()/Raw('x' * 20)\n-\n-3. verify packet received by queue3 of VF1, verify packet type is correct::\n-\n- testpmd> port 1/queue 3: received 1 packets\n- src=00:00:00:00:00:00 - dst=00:00:00:00:09:00 - type=0x0800 - length=120 - nb_segs=1\n-\n- - (outer) L2 type: ETHER - (outer) L3 type: IPV4_EXT_UNKNOWN - (outer) L4 type: Unknown\n- - Tunnel type: GRENAT - Inner L2 type: ETHER - Inner L3 type:\n- IPV4_EXT_UNKNOWN - Inner L4 type: TCP\n- - VXLAN packet: packet type =24721, Destination UDP port =8472, VNI = 0 - Receive queue=0x3\n-\n-Test case: cloud filter rule(inner mac + outer mac + vni)\n----------------------------------------------------------\n-\n-1. Add cloud filter with Inner mac + outer mac + vni rule. Dst mac mask\n- 00:00:00:00:00:00 mean outer mac address is in the rule. Src mac mask\n- 00:00:00:00:00:00 mean inner mac address is in the rule. User define field\n- higher 32bit is 0x1 mean vni match 1 is in the rule. Lower 32bit is 1 mean\n- packet will be forwarded to VF1. Action 3 mean packet will be redirected\n- to queue 3::\n-\n- ethtool -N $PF_INTF flow-type ether dst 00:00:00:00:10:00 m \\\n- 00:00:00:00:00:00 src 00:00:00:00:09:00 m 00:00:00:00:00:00 \\\n- user-def 0x100000001 action 3 loc 1\n-\n-2. Send vxlan packet with inner mac match rule::\n-\n- Ether(dst=\"00:00:00:00:10:00\")/IP()/UDP()/Vxlan(vni=1)/Ether(dst=\"00:00:00:00:09:00\")/IP()/TCP()/Raw('x' * 20)\n-\n-3. verify packet received by queue3 of VF1, verify packet type is correct::\n-\n- testpmd> port 1/queue 3: received 1 packets\n- src=00:00:00:00:00:00 - dst=00:00:00:00:09:00 - type=0x0800 - length=120 - nb_segs=1\n-\n- - (outer) L2 type: ETHER - (outer) L3 type: IPV4_EXT_UNKNOWN - (outer) L4 type: Unknown\n- - Tunnel type: GRENAT - Inner L2 type: ETHER - Inner L3 type: IPV4_EXT_UNKNOWN - Inner L4 type: TCP\n- - VXLAN packet: packet type =24721, Destination UDP port =8472, VNI = 0 - Receive queue=0x3\n-\n-Test case: cloud filter rule(inner mac + inner vlan + vni)\n-----------------------------------------------------------\n-\n-1. Add cloud filter with Inner mac + inner vlan + vni rule. Dst mac mask\n- ff:ff:ff:ff:ff:ff mean outer mac address is not in the rule. Src mac mask\n- 00:00:00:00:00:00 mean inner mac address is in the rule. Vlan 1 mean vlan\n- match is in the rule. User define field higher 32bit is 0x1 mean vni match\n- 1 is in the rule. Lower 32bit is 1 mean packet will be forwarded to VF1.\n- Action 3 mean packet will be redirected to queue 3::\n-\n- ethtool -N $PF_INTF flow-type ether dst 00:00:00:00:00:00 m \\\n- ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \\\n- vlan 1 user-def 0x100000001 action 3 loc 1\n-\n-2. Send vxlan packet with inner mac match rule::\n-\n- Ether()/IP()/UDP()/Vxlan(vni=1)/Ether(dst=\"00:00:00:00:09:00\")/Dot1Q(vlan=1)/IP()/TCP()/Raw('x' * 20)\n-\n-3. verify packet received by queue3 of VF1, verify packet type is correct::\n-\n- testpmd> port 1/queue 3: received 1 packets\n- src=00:00:00:00:00:00 - dst=00:00:00:00:09:00 - type=0x0800 - length=124 - nb_segs=1\n-\n- - (outer) L2 type: ETHER - (outer) L3 type: IPV4_EXT_UNKNOWN - (outer) L4 type: Unknown\n- - Tunnel type: GRENAT - Inner L2 type: ETHER_VLAN - Inner L3 type: IPV4_EXT_UNKNOWN - Inner L4 type: TCP\n- - VXLAN packet: packet type =24721, Destination UDP port =8472, VNI = 1 - Receive queue=0x3\n-\n-Test case: cloud filter rule(inner mac + inner vlan)\n-----------------------------------------------------\n-\n-1. Add cloud filter with Inner mac + inner vlan rule. Dst mac mask\n- ff:ff:ff:ff:ff:ff mean outer mac address is not in the rule. Src mac mask\n- 00:00:00:00:00:00 mean inner mac address is in the rule. Vlan 1 mean vlan\n- match is in the rule. User define field higher 32bit is all 0xf mean vni\n- id is not in the rule. Lower 32bit is 1 mean packet will be forwarded to\n- VF1. Action 3 mean packet will be redirected to queue 3::\n-\n- ethtool -N $PF_INTF flow-type ether dst 00:00:00:00:00:00 m \\\n- ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \\\n- vlan 1 user-def 0xffffffff00000001 action 3 loc 1\n-\n-2. Send vxlan packet with inner mac match rule::\n-\n- Ether()/IP()/UDP()/Vxlan(vni=1)/Ether(dst=\"00:00:00:00:09:00\")/Dot1Q(vlan=1)/IP()/TCP()/Raw('x' * 20)\n-\n-3. verify packet received by queue3 of VF1, verify packet type is correct::\n-\n- testpmd> port 1/queue 3: received 1 packets\n- src=00:00:00:00:00:00 - dst=00:00:00:00:09:00 - type=0x0800 - length=124 - nb_segs=1\n-\n- - (outer) L2 type: ETHER - (outer) L3 type: IPV4_EXT_UNKNOWN - (outer) L4 type: Unknown\n- - Tunnel type: GRENAT - Inner L2 type: ETHER_VLAN - Inner L3 type: IPV4_EXT_UNKNOWN - Inner L4 type: TCP\n- - VXLAN packet: packet type =24721, Destination UDP port =8472, VNI = 1 - Receive queue=0x3\n-\n-Test case: Remove cloud filter rule\n------------------------------------\n-\n-Remove cloud filter rule in location 1::\n-\n- ethtool -N $PF_INTF delete 1\n-\n-Dump rule and check there's no rule listed::\n-\n- ethtool -n $PF_INTF\n- Total 0 rules\n-\n-Send packet match last rule::\n-\n- Ether(dst not match PF&VF)/IP()/UDP()/Vxlan(vni=1)/Ether(dst=\"00:00:00:00:09:00\")/Dot1Q(vlan=1)/IP()/TCP()/Raw('x' * 20)\n-\n-Check packet only received on PF device.\n-\n-Test case: Multiple cloud filter rules\n---------------------------------------\n-\n-1. Add cloud filter with Inner mac + inner vlan rule. Dst mac mask\n- ff:ff:ff:ff:ff:ff mean outer mac address is not in the rule. Src mac mask\n- 00:00:00:00:00:00 mean inner mac address is in the rule. Vlan 1 mean vlan\n- match is in the rule. User define field higher 32bit is all 0xf mean vni\n- id is not in the rule. Lower 32bit is 1 mean packet will be forwarded to\n- VF1. Action 3 mean packet will be redirected to queue 3::\n-\n- ethtool -N $PF_INTF flow-type ether dst 00:00:00:00:00:00 m \\\n- ff:ff:ff:ff:ff:ff src 00:00:00:00:09:00 m 00:00:00:00:00:00 \\\n- vlan 1 user-def 0xffffffff00000001 action 3 loc 1\n-\n-2. Add another cloud filter with Inner mac + inner vlan rule. Dst mac mask\n- ff:ff:ff:ff:ff:ff mean outer mac address is not in the rule. Src mac mask\n- 00:00:00:00:00:00 mean inner mac address is in the rule. Vlan 2 mean vlan\n- match is in the rule. User define field higher 32bit is all 0xf mean vni\n- id is not in the rule. Lower 32bit is 0 mean packet will be forwarded to\n- VF0. Action 3 mean packet will be redirected to queue 3. Locate 2 mean\n- this rule will be added to index 2::\n-\n- ethtool -N $PF_INTF flow-type ether dst 00:00:00:00:00:00 m \\\n- ff:ff:ff:ff:ff:ff src 00:00:00:00:10:00 m 00:00:00:00:00:00 \\\n- vlan 2 user-def 0xffffffff00000000 action 3 loc 2\n-\n-3. Dump cloud filter rules::\n-\n- ethtool -n $PF_INTF\n- 64 RX rings available\n- Total 2 rules\n-\n-4. Send packet match rule 1::\n-\n- Ether()/IP()/UDP()/Vxlan(vni=1)/Ether(dst=\"00:00:00:00:09:00\")/Dot1Q(vlan=1)/IP()/TCP()/Raw('x' * 20)\n-\n-5. verify packet received by queue3 of VF1, verify packet type is correct::\n-\n- testpmd> port 1/queue 3: received 1 packets\n- src=00:00:00:00:00:00 - dst=00:00:00:00:09:00 - type=0x0800 - length=124 - nb_segs=1\n-\n- - (outer) L2 type: ETHER - (outer) L3 type: IPV4_EXT_UNKNOWN - (outer) L4 type: Unknown\n- - Tunnel type: GRENAT - Inner L2 type: ETHER_VLAN - Inner L3 type: IPV4_EXT_UNKNOWN - Inner L4 type: TCP\n- - VXLAN packet: packet type =24721, Destination UDP port =8472, VNI = 1 - Receive queue=0x3\n-\n-6. Send packet match rule 2::\n-\n- Ether()/IP()/UDP()/Vxlan(vni=1)/Ether(dst=\"00:00:00:00:10:00\")/Dot1Q(vlan=2)/IP()/TCP()/Raw('x' * 20)\n-\n-7. verify packet received by queue3 of VF0, verify packet type is correct::\n-\n- testpmd> port 0/queue 3: received 1 packets\n- src=00:00:00:00:00:00 - dst=00:00:00:00:09:00 - type=0x0800 - length=124 - nb_segs=1\n-\n- - (outer) L2 type: ETHER - (outer) L3 type: IPV4_EXT_UNKNOWN - (outer) L4 type: Unknown - Tunnel type: GRENAT\n- - Inner L2 type: ETHER_VLAN - Inner L3 type: IPV4_EXT_UNKNOWN - Inner L4 type: TCP\n- - VXLAN packet: packet type =24721, Destination UDP port =8472, VNI = 1 - Receive queue=0x3\n-\n-Test case: Bifurcated between kernel VF and dpdk VF\n----------------------------------------------------\n-\n-1. Add cloud filter with inner ip address rule. Flow type ip4 mean this rule\n- only match inner destination ip address. User define field higher 32bit is\n- all 0xf mean vni id is not in the rule. Lower 32bit is 1 mean packet will\n- be forwarded to VF1. Action 3 mean packet will be redirected to queue 3::\n-\n- ethtool -N $PF_INTF flow-type ip4 dst-ip 192.168.1.1 user-def 0xffffffff00000001 action 3 loc 1\n-\n-2. Add cloud filter with inner ip address rule. Flow type ip4 mean this rule\n- only match inner destination ip address. User define field higher 32bit is\n- all 0xf mean vni id is not in the rule. Lower 32bit is 0 mean packet will\n- be forwarded to VF0. Action 0 mean packet will be redirected to queue 0::\n-\n- ethtool -N $PF_INTF flow-type ip4 dst-ip 192.168.2.1 user-def 0xffffffff00000000 action 0 loc 2\n-\n-3. Send vxlan packet which matched first rule::\n-\n- Ether()/IP()/UDP()/Vxlan()/Ether()/IP(dst=\"192.168.1.1\")/UDP()/Raw('x' * 20)\n-\n-4. verify packet received by queue3 of VF1, verify packet type is correct::\n-\n- testpmd> port 1/queue 3: received 1 packets\n- src=00:00:00:00:00:00 - dst=00:00:00:00:09:00 - type=0x0800 - length=106 - nb_segs=1\n-\n- - (outer) L2 type: ETHER - (outer) L3 type: IPV4_EXT_UNKNOWN - (outer) L4 type: Unknown\n- - Tunnel type: GRENAT - Inner L2 type: ETHER - Inner L3 type: IPV4_EXT_UNKNOWN - Inner L4 type: UDP\n- - VXLAN packet: packet type =24721, Destination UDP port =8472, VNI = 1 - Receive queue=0x3\n-\n-5. Send vxlan packet which matched second rule::\n-\n- Ether()/IP()/UDP()/Vxlan()/Ether()/IP(dst=\"192.168.2.1\")/UDP()/Raw('x' * 20)\n-\n-6. verify packet received by VF0, verify packet content is correct\ndiff --git a/test_plans/index.rst b/test_plans/index.rst\nindex 55d3297..0208a22 100644\n--- a/test_plans/index.rst\n+++ b/test_plans/index.rst\n@@ -40,7 +40,6 @@ The following are the test plans for the DPDK DTS automated test system.\n ABI_stable_test_plan\n blocklist_test_plan\n checksum_offload_test_plan\n- cloud_filter_test_plan\n coremask_test_plan\n cvl_advanced_rss_test_plan\n cvl_advanced_rss_gtpu_test_plan\ndiff --git a/tests/TestSuite_cloud_filter.py b/tests/TestSuite_cloud_filter.py\ndeleted file mode 100644\nindex abc474f..0000000\n--- a/tests/TestSuite_cloud_filter.py\n+++ /dev/null\n@@ -1,463 +0,0 @@\n-# BSD LICENSE\n-#\n-# Copyright(c) 2020 Intel Corporation. All rights reserved.\n-# All rights reserved.\n-#\n-# Redistribution and use in source and binary forms, with or without\n-# modification, are permitted provided that the following conditions\n-# are met:\n-#\n-# * Redistributions of source code must retain the above copyright\n-# notice, this list of conditions and the following disclaimer.\n-# * Redistributions in binary form must reproduce the above copyright\n-# notice, this list of conditions and the following disclaimer in\n-# the documentation and/or other materials provided with the\n-# distribution.\n-# * Neither the name of Intel Corporation nor the names of its\n-# contributors may be used to endorse or promote products derived\n-# from this software without specific prior written permission.\n-#\n-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n-# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n-\n-\"\"\"\n-DPDK Test suite.\n-\n-Test Cloud Filters features in DPDK.\n-\n-\"\"\"\n-\n-import string\n-import re\n-import time\n-import os\n-from test_case import TestCase\n-from pmd_output import PmdOutput\n-from settings import HEADER_SIZE\n-from packet import Packet\n-\n-from scapy.layers.inet import UDP, IP\n-from scapy.layers.vxlan import VXLAN\n-from scapy.packet import split_layers, bind_layers\n-\n-VXLAN_PORT = 4789\n-CLOUD_PORT = 8472\n-split_layers(UDP, VXLAN, dport=VXLAN_PORT)\n-bind_layers(UDP, VXLAN, dport=CLOUD_PORT)\n-\n-#\n-#\n-# Test class.\n-#\n-\n-\n-class CloudFilterConfig(object):\n-\n- \"\"\"\n- Module for config/verify cloud filter rule\n- \"\"\"\n-\n- RULE_TYPE = [\n- 'iip', 'imac', 'omac+imac+vni', 'imac+ivlan+vni', 'imac+ivlan']\n-\n- def __init__(self, test_case, pf_intf=\"\"):\n- self.case = test_case\n- # make sure pf existed\n- out = self.case.dut.send_expect(\n- 'ifconfig %s' % pf_intf, \"#\", alt_session=True)\n- self.case.verify(\"Device not found\" not in out,\n- \"Cloud filter need PF interface!!!\")\n- self.pf_intf = pf_intf\n- self.pkt = Packet()\n-\n- def config_rule(self, **kwargs):\n- \"\"\"\n- Configure cloud filter rule settings, must check rule format\n- \"\"\"\n- self.rule_idx = 1\n- self.case.verify(\n- 'type' in kwargs, \"Cloud filter rule must configure filter type\")\n- rule_type = kwargs['type']\n- self.case.verify(\n- rule_type in self.RULE_TYPE, \"Cloud filter rule type not correct\")\n- self.case.verify(\n- 'vf' in kwargs, \"Cloud filter rule must configure device!!!\")\n- self.case.verify(\n- 'queue' in kwargs, \"Cloud filter rule must configure queue index\")\n- if 'loc' in kwargs:\n- self.rule_idx = kwargs['loc']\n-\n- self.cf_rule = {}\n- self.cf_rule['type'] = rule_type\n- self.cf_rule['vf'] = kwargs['vf']\n- self.cf_rule['queue'] = kwargs['queue']\n-\n- required_args = rule_type.split('+')\n- for required_arg in required_args:\n- self.case.verify(required_arg in kwargs,\n- \"Argument for [%s] missing!!!\" % required_arg)\n- self.cf_rule[required_arg] = kwargs[required_arg]\n-\n- if 'ivlan' in self.cf_rule:\n- self.pkt.assign_layers(['ether', 'ipv4', 'udp',\n- 'vxlan', 'inner_mac', 'inner_vlan',\n- 'inner_ipv4', 'inner_tcp', 'raw'])\n- else:\n- self.pkt.assign_layers(['ether', 'ipv4', 'udp',\n- 'vxlan', 'inner_mac',\n- 'inner_ipv4', 'inner_tcp', 'raw'])\n-\n- def ethtool_add(self):\n- \"\"\"\n- Add cloud filter rule by ethtool and return rule index\n- \"\"\"\n- ip_fmt = \"ethtool -N %(PF)s flow-type ip4 dst-ip %(IP)s user-def \" + \\\n- \"%(VNI_VF)s action %(QUEUE)d loc %(ID)d\"\n- ether_fmt = \"ethtool -N %(PF)s flow-type ether dst %(OMAC)s m \" + \\\n- \"%(OMASK)s src %(IMAC)s m %(IMASK)s user-def %(VNI_VF)s \" + \\\n- \"action %(QUEUE)d loc %(ID)d\"\n- ether_vlan_fmt = \"ethtool -N %(PF)s flow-type ether dst %(OMAC)s m \" + \\\n- \"%(OMASK)s src %(IMAC)s m %(IMASK)s vlan %(VLAN)d \" + \\\n- \"user-def %(VNI_VF)s action %(QUEUE)d loc %(ID)d\"\n-\n-\n- # generate user define field\n- vni_vf = '0x'\n- if 'vni' in self.cf_rule:\n- vni_str = hex(self.cf_rule['vni'])[2:]\n- else:\n- vni_str = 'ffffffff' # without vni\n- vni_vf += vni_str\n- vf_str = \"%08x\" % self.cf_rule['vf']\n- vni_vf += vf_str\n-\n- if 'omac' in self.cf_rule:\n- omac_str = self.cf_rule['omac']\n- omac_mask = '00:00:00:00:00:00'\n- else:\n- omac_str = '00:00:00:00:00:00'\n- omac_mask = 'ff:ff:ff:ff:ff:ff'\n-\n- if 'imac' in self.cf_rule:\n- imac_str = self.cf_rule['imac']\n- imac_mask = '00:00:00:00:00:00'\n- else:\n- imac_str = '00:00:00:00:00:00'\n- imac_mask = 'ff:ff:ff:ff:ff:ff'\n-\n- if 'iip' in self.cf_rule:\n- ip_str = self.cf_rule['iip']\n-\n- if self.cf_rule['type'] == 'iip':\n- ethtool_cmd = ip_fmt % {'PF': self.pf_intf,\n- 'IP': ip_str,\n- 'VNI_VF': vni_vf,\n- 'QUEUE': self.cf_rule['queue'],\n- 'ID': self.rule_idx}\n- elif 'ivlan' in self.cf_rule:\n- ethtool_cmd = ether_vlan_fmt % {'PF': self.pf_intf,\n- 'OMAC': omac_str,\n- 'OMASK': omac_mask,\n- 'IMAC': imac_str,\n- 'IMASK': imac_mask,\n- 'VLAN': self.cf_rule['ivlan'],\n- 'VNI_VF': vni_vf,\n- 'QUEUE': self.cf_rule['queue'],\n- 'ID': self.rule_idx}\n- else:\n- ethtool_cmd = ether_fmt % {'PF': self.pf_intf,\n- 'OMAC': omac_str,\n- 'OMASK': omac_mask,\n- 'IMAC': imac_str,\n- 'IMASK': imac_mask,\n- 'VNI_VF': vni_vf,\n- 'QUEUE': self.cf_rule['queue'],\n- 'ID': self.rule_idx}\n-\n- print(ethtool_cmd)\n- out = self.case.dut.send_expect(ethtool_cmd, \"# \", alt_session=True)\n- self.case.verify(\"ethtool\" not in out, \"Add cloud filter failed!!!\")\n-\n- return self.rule_idx\n-\n- def ethtool_delete(self):\n- \"\"\"\n- Delete cloud filter rule by index and return whether success\n- \"\"\"\n- self.case.dut.send_expect(\"ethtool -N %s delete %d\" % (self.pf_intf,\n- self.rule_idx),\n- \"# \", alt_session=True)\n-\n- def ethtool_dumprule(self):\n- \"\"\"\n- Dump cloud filter rule according to index value\n- \"\"\"\n- pass\n-\n- def transmit_packet(self, match=True):\n- \"\"\"\n- Send packet match or not matched cloud filter rules\n- \"\"\"\n- ether_cfg = {'src': self.case.tester_mac}\n- if match:\n- if 'iip' in list(self.cf_rule.keys()):\n- self.pkt.config_layer(\n- 'inner_ipv4', {'dst': self.cf_rule['iip']})\n- if 'imac' in list(self.cf_rule.keys()):\n- self.pkt.config_layer(\n- 'inner_mac', {'dst': self.cf_rule['imac']})\n- if 'omac' in list(self.cf_rule.keys()):\n- ether_cfg['dst'] = self.cf_rule['omac']\n- if 'ivlan' in list(self.cf_rule.keys()):\n- self.pkt.config_layer(\n- 'inner_vlan', {'vlan': self.cf_rule['ivlan']})\n- if 'vni' in list(self.cf_rule.keys()):\n- self.pkt.config_layer('vxlan', {'vni': self.cf_rule['vni']})\n-\n- self.pkt.config_layer('ether', ether_cfg)\n- self.pkt.config_layer('raw', {'payload': ['01'] * 18})\n- self.pkt.send_pkt(crb=self.case.tester, tx_port=self.case.tester_intf)\n-\n-\n-class TestCloudFilter(TestCase):\n-\n- def set_up_all(self):\n- \"\"\"\n- vxlan Prerequisites\n- \"\"\"\n- # this feature only enable in FVL now\n- self.verify(self.nic in [\"fortville_eagle\", \"fortville_spirit\",\n- \"fortville_spirit_single\"],\n- \"Cloud filter only supported by Fortville\")\n- # Based on h/w type, choose how many ports to use\n- self.dut_ports = self.dut.get_ports()\n-\n- # Verify that enough ports are available\n- self.verify(len(self.dut_ports) >= 1, \"Insufficient ports for testing\")\n-\n- # required setting test environment\n- self.env_done = False\n- self.vf_queues = 4\n-\n- def setup_vf_env(self):\n- \"\"\"\n- Create testing environment with 2VFs generated from PF\n- \"\"\"\n- if self.env_done:\n- return\n-\n- # get PF interface name and opposite tester interface name\n- self.pf_port = self.dut_ports[0]\n- self.bind_nics_driver([self.pf_port], driver=\"i40e\")\n- self.pf_intf = self.dut.ports_info[self.pf_port]['intf']\n- tester_port = self.tester.get_local_port(self.pf_port)\n- self.tester_intf = self.tester.get_interface(tester_port)\n- self.tester_mac = self.tester.get_mac(tester_port)\n- pf_numa = self.dut.get_numa_id(self.pf_port)\n-\n- self.dut.generate_sriov_vfs_by_port(self.pf_port, 2, driver=\"default\")\n-\n- # enable vxlan on PF\n- self.dut.send_expect(\"ip li add vxlan0 type vxlan id 1 group \" +\n- \"239.1.1.1 local 127.0.0.1 dev %s\" % self.pf_intf,\n- \"# \")\n- self.dut.send_expect(\"ifconfig vxlan0 up\", \"# \")\n-\n- self.vf_port0 = self.dut.ports_info[self.pf_port]['vfs_port'][0]\n- self.vf_port1 = self.dut.ports_info[self.pf_port]['vfs_port'][1]\n-\n- # bind one vf device to dpdk\n- self.vf_port0.bind_driver(driver='igb_uio')\n- self.vf_port1.bind_driver(driver='i40evf')\n- self.vf_intf = self.vf_port1.intf_name\n-\n- # bind vf0 to igb_uio and start testpmd\n- core_num = self.vf_queues + 1\n- cores = \"1S/%dC/1T\" % core_num\n-\n- self.pmdout = PmdOutput(self.dut)\n- self.pmdout.start_testpmd(\n- cores, \"--rxq=%d --txq=%d --portmask=0x1 --enable-rx-cksum\" %\n- (self.vf_queues, self.vf_queues), socket=pf_numa)\n-\n- # rxonly and verbose enabled\n- self.pmdout.execute_cmd(\"set nbcore %d\" % self.vf_queues)\n- self.pmdout.execute_cmd(\"set fwd rxonly\")\n- self.pmdout.execute_cmd(\"set verbose 1\")\n- self.pmdout.execute_cmd(\"start\")\n-\n- self.env_done = True\n-\n- def destroy_vf_env(self):\n-\n- if getattr(self, 'pmd_output', None):\n- self.dut.kill_all()\n-\n- if getattr(self, 'pf_port', None):\n- self.dut.destroy_sriov_vfs_by_port(self.pf_port)\n- self.bind_nics_driver([self.pf_port], driver=\"igb_uio\")\n-\n- self.env_done = False\n-\n- def bind_nics_driver(self, ports, driver=\"\"):\n- # modprobe vfio driver\n- if driver == \"vfio-pci\":\n- for port in ports:\n- netdev = self.dut.ports_info[port]['port']\n- driver = netdev.get_nic_driver()\n- if driver != 'vfio-pci':\n- netdev.bind_driver(driver='vfio-pci')\n-\n- elif driver == \"igb_uio\":\n- # igb_uio should insmod as default, no need to check\n- for port in ports:\n- netdev = self.dut.ports_info[port]['port']\n- driver = netdev.get_nic_driver()\n- if driver != 'igb_uio':\n- netdev.bind_driver(driver='igb_uio')\n- else:\n- for port in ports:\n- netdev = self.dut.ports_info[port]['port']\n- driver_now = netdev.get_nic_driver()\n- if driver == \"\":\n- driver = netdev.default_driver\n- if driver != driver_now:\n- netdev.bind_driver(driver=driver)\n-\n- def send_and_verify(self, cloud_cfg=None, dpdk=True):\n- \"\"\"\n- Send packet match cloud filter rule and verify packet received\n- \"\"\"\n- self.logger.info(\"Verifying vxlan %s filter\" % cloud_cfg.cf_rule['type'])\n- if dpdk:\n- cloud_cfg.transmit_packet()\n- out = self.pmdout.get_output()\n- queue = cloud_cfg.cf_rule['queue']\n- self.verify(\"queue %d\" %\n- queue in out, \"Vxlan not received in queue %d\" % queue)\n- self.verify(\"VXLAN packet\" in out, \"Vxlan packet not detected\")\n- self.verify(\"Inner L4 type: TCP\" in out,\n- \"Vxlan inner L4 type not detected\")\n- if 'vni' in list(cloud_cfg.cf_rule.keys()):\n- vni = cloud_cfg.cf_rule['vni']\n- self.verify(\"VNI = %d\" %\n- vni in out, \"Vxlan vni value not correct\")\n- if 'ivlan' in list(cloud_cfg.cf_rule.keys()):\n- self.verify(\"Inner L2 type: ETHER_VLAN\" in out,\n- \"Vxlan inner vlan not detected\")\n- else:\n- # packet received on dut VF device\n- tmp_file = '/tmp/cloud_filter_%s.pcap' % self.vf_intf\n- sniff_cmd = ('tcpdump -w ' + tmp_file +\n- ' -i {0} 2>tcpdump_{0}.out &').format(self.vf_intf)\n- rm_cmd = 'rm -f ' + tmp_file\n- self.dut.send_expect(rm_cmd, '#', alt_session=True)\n- self.dut.send_expect(sniff_cmd, '#', alt_session=True)\n- # wait for interface promisc enable\n- time.sleep(2)\n- cloud_cfg.transmit_packet()\n- self.dut.send_expect('killall tcpdump', '#', alt_session=True)\n- # wait for pcap file saved\n- time.sleep(2)\n- # copy pcap to tester and then analyze\n- self.dut.session.copy_file_from(tmp_file)\n- pkt = Packet()\n- pkt.read_pcapfile(filename=\"cloud_filter_%s.pcap\" % self.vf_intf)\n- self.verify(\n- len(pkt) == 1, \"%d packet recevied on kernel VF\" % len(pkt))\n- cap_pkt = pkt[0]\n- try:\n- dport = cap_pkt[UDP].dport\n- self.verify(dport == CLOUD_PORT,\n- \"Captured packet is not vxlan packet\")\n- inner_ip = cap_pkt['VXLAN'][IP].dst\n- self.verify(inner_ip == cloud_cfg.cf_rule['iip'],\n- \"Inner ip not matched\")\n- except:\n- print(\"Kernel VF captured packet not match rule\")\n- raise\n-\n- self.logger.info(\"Verified vxlan %s filter pass\" % cloud_cfg.cf_rule['type'])\n-\n- def test_cloud_filter(self):\n- \"\"\"\n- Verify dpdk work with linux driver added cloud filter rule\n- \"\"\"\n- # setting for cloud filter rule\n- queue = self.vf_queues - 1\n- vni = 1\n- vlan = 1\n- # add cloud filter rule\n- rules = [\n- {'type': 'iip', 'iip': '192.168.1.1',\n- 'vf': 0, 'queue': queue, 'loc': 1},\n- {'type': 'imac', 'imac': '00:00:00:00:09:00',\n- 'vf': 0, 'queue': queue, 'loc': 1},\n- {'type': 'omac+imac+vni', 'omac': '00:00:00:00:10:00',\n- 'imac': '00:00:00:00:09:00', 'vni': vni, 'vf': 0, 'queue': queue,\n- 'loc': 1},\n- {'type': 'imac+ivlan+vni', 'imac': '00:00:00:00:09:00',\n- 'ivlan': vlan, 'vni': vni, 'vf': 0, 'queue': queue, 'loc': 1},\n- {'type': 'imac+ivlan', 'imac': '00:00:00:00:09:00',\n- 'ivlan': vlan, 'vf': 0, 'queue': queue, 'loc': 1},\n- ]\n- cf_cfg = CloudFilterConfig(self, self.pf_intf)\n- for rule in rules:\n- cf_cfg.config_rule(**rule)\n- cf_cfg.ethtool_add()\n-\n- self.send_and_verify(cf_cfg)\n-\n- cf_cfg.ethtool_delete()\n-\n- def test_bifurcated_driver(self):\n- \"\"\"\n- Verify bifurcated driver work with dpdk VF and kernel VF\n- \"\"\"\n- rules = [\n- {'type': 'iip', 'iip': '192.168.1.1', 'vf': 0,\n- 'queue': self.vf_queues - 1, 'loc': 1},\n- {'type': 'iip', 'iip': '192.168.2.1', 'vf': 1, 'queue': 0,\n- 'loc': 2}]\n-\n- dpdk_cfg = CloudFilterConfig(self, self.pf_intf)\n- # fdir rule for dpdk VF\n- dpdk_cfg.config_rule(**rules[0])\n- dpdk_cfg.ethtool_add()\n- self.send_and_verify(dpdk_cfg)\n- # fdir rule for kernel VF\n- kernel_cfg = CloudFilterConfig(self, self.pf_intf)\n- kernel_cfg.config_rule(**rules[1])\n- kernel_cfg.ethtool_add()\n- self.send_and_verify(kernel_cfg, dpdk=False)\n-\n- pass\n-\n- def set_up(self):\n- \"\"\"\n- Run before each test case.\n- \"\"\"\n- self.setup_vf_env()\n- pass\n-\n- def tear_down(self):\n- \"\"\"\n- Run after each test case.\n- \"\"\"\n- pass\n-\n- def tear_down_all(self):\n- \"\"\"\n- Run after each test suite.\n- \"\"\"\n- self.destroy_vf_env()\n- pass\n", "prefixes": [ "v2", "5/5" ] }{ "id": 96653, "url": "