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 CD7EBA0524; Tue, 25 Feb 2020 06:36:14 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B5C441BFAC; Tue, 25 Feb 2020 06:36:14 +0100 (CET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 31F351BFAC for ; Tue, 25 Feb 2020 06:36:13 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Feb 2020 21:36:12 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,482,1574150400"; d="scan'208";a="237562498" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga003.jf.intel.com with ESMTP; 24 Feb 2020 21:36:11 -0800 Received: from fmsmsx162.amr.corp.intel.com (10.18.125.71) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 24 Feb 2020 21:36:11 -0800 Received: from shsmsx108.ccr.corp.intel.com (10.239.4.97) by fmsmsx162.amr.corp.intel.com (10.18.125.71) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 24 Feb 2020 21:36:10 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.222]) by SHSMSX108.ccr.corp.intel.com ([169.254.8.98]) with mapi id 14.03.0439.000; Tue, 25 Feb 2020 13:36:08 +0800 From: "Tu, Lijuan" To: "S, Varalakshmi" , "dts@dpdk.org" CC: "S, Varalakshmi" Thread-Topic: [dts] [PATCH] Adding the l2tpv3 test script with proper name and header included Thread-Index: AQHV65QU05weSQKg/E2gHpY0gm08YqgrY8RQ Date: Tue, 25 Feb 2020 05:36:07 +0000 Message-ID: <8CE3E05A3F976642AAB0F4675D0AD20E0BBCDDC9@SHSMSX101.ccr.corp.intel.com> References: <20200225042812.40702-1-varalakshmi.s@intel.com> In-Reply-To: <20200225042812.40702-1-varalakshmi.s@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dts] [PATCH] Adding the l2tpv3 test script with proper name and header included 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" Applied, thanks > -----Original Message----- > From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Varalakshmi > Sent: Tuesday, February 25, 2020 12:28 PM > To: dts@dpdk.org > Cc: S, Varalakshmi > Subject: [dts] [PATCH] Adding the l2tpv3 test script with proper name and > header included >=20 > Adding the l2tpv3 test script >=20 > The copyright header is included and file is named as per the convention. >=20 > Signed-off-by: Varalakshmi > --- > tests/TestSuite_ddp_l2tpv3.py | 519 > ++++++++++++++++++++++++++++++++++ > 1 file changed, 519 insertions(+) > create mode 100644 tests/TestSuite_ddp_l2tpv3.py >=20 > diff --git a/tests/TestSuite_ddp_l2tpv3.py b/tests/TestSuite_ddp_l2tpv3.p= y > new file mode 100644 index 0000000..710a069 > --- /dev/null > +++ b/tests/TestSuite_ddp_l2tpv3.py > @@ -0,0 +1,519 @@ > +# BSD LICENSE > +# > +# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. > +# All rights reserved. > +# > +# Redistribution and use in source and binary forms, with or without # > +modification, are permitted provided that the following conditions # > +are met: > +# > +# * Redistributions of source code must retain the above copyright > +# notice, this list of conditions and the following disclaimer. > +# * Redistributions in binary form must reproduce the above copyright > +# notice, this list of conditions and the following disclaimer in > +# the documentation and/or other materials provided with the > +# distribution. > +# * Neither the name of Intel Corporation nor the names of its > +# contributors may be used to endorse or promote products derived > +# from this software without specific prior written permission. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS # > +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > # > +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS > FOR # > +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE > COPYRIGHT # > +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, > INCIDENTAL, # > +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > NOT # > +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > USE, # > +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY # > +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > # > +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF > THE USE # > +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH > DAMAGE. > + > +""" > +DPDK Test suite. > +l2tpv3 test script. > +""" > +import time > +import re > +import sys > +import utils > +from test_case import TestCase > +from pmd_output import PmdOutput > +from settings import get_nic_name > +from scapy.all import * > +import random > +class TestDdpL2tpv3(TestCase): > + > + def set_up_all(self): > + self.dut_ports =3D self.dut.get_ports(self.nic) > + profile_file =3D 'dep/l2tpv3oip-l4.pkg' > + profile_dst =3D "/tmp/" > + self.dut.session.copy_file_to(profile_file, profile_dst) > + out =3D self.dut.send_expect("cat config/common_base", "]# ", 10= ) > + self.PF_Q_strip =3D 'CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF' > + pattern =3D "(%s=3D)(\d*)" % self.PF_Q_strip > + self.PF_QUEUE =3D self.element_strip(out, pattern) > + self.used_dut_port =3D self.dut_ports[0] > + tester_port =3D self.tester.get_local_port(self.used_dut_port) > + self.tester_intf =3D self.tester.get_interface(tester_port) > + self.dut_testpmd =3D PmdOutput(self.dut) > + > + def set_up(self): > + self.load_profile() > + > + def element_strip(self, out, pattern): > + """ > + Strip and get queue number. > + """ > + > + s =3D re.compile(pattern) > + res =3D s.search(out) > + if res is None: > + print 'Queue number not in output.' > + return None > + else: > + result =3D res.group(2) > + return int(result) > + > + > + def load_profile(self): > + """ > + Load profile to update FVL configuration tables, profile will be > + stored in binary file. > + """ > + self.dut_testpmd.start_testpmd( > + "Default", "--pkt-filter-mode=3Dperfect --port-topology=3Dch= ained \ > + --txq=3D%s --rxq=3D%s --disable-rss" > + % (self.PF_QUEUE, self.PF_QUEUE)) > + self.dut_testpmd.execute_cmd('port stop 0') > + time.sleep(1) > + self.dut_testpmd.execute_cmd( > + 'ddp add 0 /tmp/l2tpv3oip-l4.pkg,/tmp/l2tpv3oip-l4.bak') > + out =3D self.dut_testpmd.execute_cmd('ddp get list 0') > + self.verify("Profile number is: 1" in out, > + "Failed to load ddp profile!!!") > + self.dut_testpmd.execute_cmd('port start 0') > + > + def l2tpv3pkts(self, keyword): > + """ > + Generate L2TPv3oIPv4, L2TPv3oIPv6 and UDP packets. > + """ > + pkt =3D [] > + if keyword is not 'def': > + if keyword is "l2tpv3oipv4": > + > pkt.append("Ether()/IP(proto=3D115)/Raw('\\x00\\x00\\x03\\xe9')") > + pkt.append("Ether()/IP(proto=3D115)/Raw('\\x00\\x00\\x03= \\fe9')") > + if keyword is "l2tpv3oipv4_dst": > + > pkt.append("Ether()/IP(dst=3D\"8.8.8.8\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > e9')") > + > pkt.append("Ether()/IP(dst=3D\"8.8.8.8\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > b9')") > + > pkt.append("Ether()/IP(dst=3D\"88.8.8.8\",proto=3D115)/Raw('\\x00\\x00\\x= 03\\ > xe9')") > + if keyword is "l2tpv3oipv4_src": > + > pkt.append("Ether()/IP(src=3D\"1.1.1.1\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > e9')") > + > pkt.append("Ether()/IP(src=3D\"1.1.1.1\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > a9')") > + > pkt.append("Ether()/IP(src=3D\"11.1.1.1\",proto=3D115)/Raw('\\x00\\x00\\x= 03\\ > xe9')") > + if keyword is "l2tpv3oipv4_src_dst": > + > pkt.append("Ether()/IP(src=3D\"5.5.5.5\",dst=3D\"2.2.2.2\",proto=3D115)/R= aw('\\x0 > 0\\x00\\x03\\xe9')") > + > pkt.append("Ether()/IP(src=3D\"5.5.5.5\",dst=3D\"2.2.2.2\",proto=3D115)/R= aw('\\x0 > 0\\x00\\x03\\xf9')") > + > pkt.append("Ether()/IP(src=3D\"55.5.5.5\",dst=3D\"2.2.2.2\",proto=3D115)/= Raw('\\x > 00\\x00\\x03\\xe9')") > + > pkt.append("Ether()/IP(src=3D\"5.5.5.5\",dst=3D\"22.2.2.2\",proto=3D115)/= Raw('\\x > 00\\x00\\x03\\xe9')") > + if keyword is "l2tpv3oipv6": > + pkt.append("Ether()/IPv6(nh=3D115)/Raw('\\x00\\x00\\x03\= \xe9')") > + pkt.append("Ether()/IPv6(nh=3D115)/Raw('\\x00\\x00\\x03\= \xc9')") > + if keyword is "l2tpv3oipv6_dst": > + > pkt.append("Ether()/IPv6(dst=3D\"8:7:6:5:4:3:2:1\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xe9')") > + > pkt.append("Ether()/IPv6(dst=3D\"8:7:6:5:4:3:2:1\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xd9')") > + > pkt.append("Ether()/IPv6(dst=3D\"8888:7:6:5:4:3:2:1\",nh=3D115)/Raw('\\x0= 0\\x > 00\\x03\\xe9')") > + if keyword is "l2tpv3oipv6_src": > + > pkt.append("Ether()/IPv6(src=3D\"1:2:3:4:5:6:7:8\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xe9')") > + > pkt.append("Ether()/IPv6(src=3D\"1:2:3:4:5:6:7:8\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xf9')") > + > pkt.append("Ether()/IPv6(src=3D\"1111:2:3:4:5:6:7:8\",nh=3D115)/Raw('\\x0= 0\\x0 > 0\\x03\\xe9')") > + if keyword is "l2tpv3oipv6_src_dst": > + > pkt.append("Ether()/IPv6(src=3D\"2:3:4:5:6:7:8:9\",dst=3D\"6:5:4:3:2:1:8:= 9\",nh=3D1 > 15)/Raw('\\x00\\x00\\x03\\xe9')") > + > pkt.append("Ether()/IPv6(src=3D\"2:3:4:5:6:7:8:9\",dst=3D\"6:5:4:3:2:1:8:= 9\",nh=3D1 > 15)/Raw('\\x00\\x00\\x03\\xf9')") > + > pkt.append("Ether()/IPv6(src=3D\"2222:3:4:5:6:7:8:9\",dst=3D\"6:5:4:3:2:1= :8:9\",n > h=3D115)/Raw('\\x00\\x00\\x03\\xe9')") > + > pkt.append("Ether()/IPv6(src=3D\"2:3:4:5:6:7:8:9\",dst=3D\"6666:5:4:3:2:1= :8:9\",n > h=3D115)/Raw('\\x00\\x00\\x03\\xe9')") > + if keyword is "l2tpv3_ipv4_ipv6": > + pkt.append("Ether()/IP(proto=3D115)/Raw('\\x00\\x00\\x03= \\xe9')") > + pkt.append("Ether()/IP(proto=3D115)/Raw('\\x00\\x00\\x03= \\xf9')") > + pkt.append("Ether()/IPv6(nh=3D115)/Raw('\\x00\\x00\\x03\= \xe9')") > + pkt.append("Ether()/IPv6(nh=3D115)/Raw('\\x00\\x00\\x03\= \xf9')") > + if keyword is "l2tpv3oip_v4src_v6src" : > + > pkt.append("Ether()/IP(src=3D\"1.3.5.7\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > e9')") > + > pkt.append("Ether()/IP(src=3D\"1.3.5.7\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > a9')") > + > pkt.append("Ether()/IP(src=3D\"11.3.5.7\",proto=3D115)/Raw('\\x00\\x00\\x= 03\\ > xe9')") > + > pkt.append("Ether()/IPv6(src=3D\"1:3:5:7:9:2:4:6\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xe9')") > + > pkt.append("Ether()/IPv6(src=3D\"1:3:5:7:9:2:4:6\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xf9')") > + > pkt.append("Ether()/IPv6(src=3D\"1111:3:5:7:9:2:4:6\",nh=3D115)/Raw('\\x0= 0\\x0 > 0\\x03\\xe9')") > + if keyword is "l2tpv3oip_v4dst_v6dst": > + > pkt.append("Ether()/IP(dst=3D\"9.7.5.3\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > e9')") > + > pkt.append("Ether()/IP(dst=3D\"9.7.5.3\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > b9')") > + > pkt.append("Ether()/IP(dst=3D\"99.7.5.3\",proto=3D115)/Raw('\\x00\\x00\\x= 03\\ > xe9')") > + > pkt.append("Ether()/IPv6(dst=3D\"2:4:6:8:1:3:5:7\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xe9')") > + > pkt.append("Ether()/IPv6(dst=3D\"2:4:6:8:1:3:5:7\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xd9')") > + > pkt.append("Ether()/IPv6(dst=3D\"2222:4:6:8:1:3:5:7\",nh=3D115)/Raw('\\x0= 0\\x > 00\\x03\\xe9')") > + if keyword is "l2tpv3oip_v4srcdst_v6srcdst": > + > pkt.append("Ether()/IP(src=3D\"9.8.7.6\",dst=3D\"4.5.6.7\",proto=3D115)/R= aw('\\x0 > 0\\x00\\x03\\xe9')") > + > pkt.append("Ether()/IP(src=3D\"9.8.7.6\",dst=3D\"4.5.6.7\",proto=3D115)/R= aw('\\x0 > 0\\x00\\x03\\xf9')") > + > pkt.append("Ether()/IP(src=3D\"99.8.7.6\",dst=3D\"4.5.6.7\",proto=3D115)/= Raw('\\x > 00\\x00\\x03\\xe9')") > + > pkt.append("Ether()/IP(src=3D\"9.8.7.6\",dst=3D\"44.5.6.7\",proto=3D115)/= Raw('\\x > 00\\x00\\x03\\xe9')") > + > pkt.append("Ether()/IPv6(src=3D\"1:2:3:4:5:6:7:8\",dst=3D\"9:8:7:6:5:4:3:= 2\",nh=3D1 > 15)/Raw('\\x00\\x00\\x03\\xe9')") > + > pkt.append("Ether()/IPv6(src=3D\"1:2:3:4:5:6:7:8\",dst=3D\"9:8:7:6:5:4:3:= 2\",nh=3D1 > 15)/Raw('\\x00\\x00\\x03\\xf9')") > + > pkt.append("Ether()/IPv6(src=3D\"1111:2:3:4:5:6:7:8\",dst=3D\"9:8:7:6:5:4= :3:2\",n > h=3D115)/Raw('\\x00\\x00\\x03\\xe9')") > + > pkt.append("Ether()/IPv6(src=3D\"1:2:3:4:5:6:7:8\",dst=3D\"9999:8:7:6:5:4= :3:2\",n > h=3D115)/Raw('\\x00\\x00\\x03\\xe9')") > + if keyword is "l2tpv3oip_v4_v6_udp": > + > pkt.append("Ether()/IP(dst=3D\"9.7.5.3\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > e9')") > + > pkt.append("Ether()/IP(dst=3D\"9.7.5.3\",proto=3D115)/Raw('\\x00\\x00\\x0= 3\\x > b9')") > + > pkt.append("Ether()/IPv6(dst=3D\"2:4:6:8:1:3:5:7\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xe9')") > + > pkt.append("Ether()/IPv6(dst=3D\"2:4:6:8:1:3:5:7\",nh=3D115)/Raw('\\x00\\= x00\\ > x03\\xd9')") > + pkt.append("Ether()/IP()/UDP()") > + return pkt > + > + def send_and_verify(self,keyword=3D'def'): > + """ > + Send packets and verify result. > + """ > + pkt =3D self.l2tpv3pkts(keyword) > + qnum=3D[] > + for i in range(len(pkt)): > + self.tester.scapy_append('sendp([%s], iface=3D"%s")'%(pkt[i], > self.tester_intf)) > + self.tester.scapy_execute() > + out =3D self.dut.get_session_output(timeout=3D2) > + pattern =3D "port (\d)/queue (\d{1,2}): received (\d) packets" > + qnum.append(self.element_strip(out, pattern)) > + return qnum > + > + def run_fd_test(self, keyword,crlwords_ipv4,crlwords_ipv6): > + """ > + Configure Flow director rules. > + > + keywords: keywords have IPv4/IPv6 SIP DIP and UDP > + """ > + self.dut_testpmd.execute_cmd('port stop 0') > + self.dut_testpmd.execute_cmd('port config 0 pctype 28 fdir_inset= clear > all') > + self.dut_testpmd.execute_cmd('port config 0 pctype 38 fdir_inset= clear > all') > + if crlwords_ipv4 is not None: > + for field in crlwords_ipv4: > + self.dut_testpmd.execute_cmd('port config 0 pctype 28 fd= ir_inset > set field {}'.format(field)) > + if crlwords_ipv6 is not None: > + for field in crlwords_ipv6: > + self.dut_testpmd.execute_cmd('port config 0 pctype 38 fd= ir_inset > set field {}'.format(field)) > + self.dut_testpmd.execute_cmd('port start 0') > + self.dut_testpmd.execute_cmd('start') > + self.dut_testpmd.execute_cmd('set verbose 1') > + qdef=3D[] > + qnum =3D self.send_and_verify(keyword) > + for i in range(len(qnum)): > + self.verify(qnum[i] =3D=3D 0, "Receive packet from wrong > +queue!!!") > + > + queue =3D random.randint(1, self.PF_QUEUE - 1) > + > + if 'l2tpv3oipv4' is keyword: > + > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / > end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non > +matching sessionID > + > + if 'l2tpv3oipv4_dst' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 dst is 8.8.8.8 / l2tpv3oip session_id is 1001 / end actions queue = index {} > / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non matching sessionID > + qdef.append(0) #Default Queue number to check for in case of > non > +matching DIP > + > + > + if 'l2tpv3oipv4_src' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 src is 1.1.1.1 / l2tpv3oip session_id is 1001 / end actions queue in= dex {} / > end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non matching sessionID > + qdef.append(0) #Default Queue number to check for in case of > non > +matching SIP > + > + if 'l2tpv3oipv4_src_dst' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 src is 5.5.5.5 dst is 2.2.2.2 / l2tpv3oip session_id is 1001 / end a= ctions > queue index {} / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non matching sessionID > + qdef.append(0) #Default Queue number to check for in case of > non matching SIP > + qdef.append(0) #Default Queue number to check for in case of > non > +matching DIP > + > + if 'l2tpv3oipv6' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / > end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non > +matching sessionID > + > + if 'l2tpv3oipv6_dst' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv6 dst is 8:7:6:5:4:3:2:1 / l2tpv3oip session_id is 1001 / end actions = queue > index {} / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non matching sessionID > + qdef.append(0) #Default Queue number to check for in case of > non > +matching DIP > + > + if 'l2tpv3oipv6_src' is keyword: > + self.dut_testpmd.execute_cmd('flow create 0 ingress pattern = eth / > ipv6 src is 1:2:3:4:5:6:7:8 / l2tpv3oip session_id is 1001 / end actions = queue > index {} / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non matching sessionID > + qdef.append(0) #Default Queue number to check for in case of > non > +matching SIP > + > + if 'l2tpv3oipv6_src_dst' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv6 src is 2:3:4:5:6:7:8:9 dst is 6:5:4:3:2:1:8:9 / l2tpv3oip session_id= is 1001 / > end actions queue index {} / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non matching sessionID > + qdef.append(0) #Default Queue number to check for in case of > non matching SIP > + qdef.append(0) #Default Queue number to check for in case of > non > +matching DIP > + > + if 'l2tpv3_ipv4_ipv6' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / > end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non matching sessionID > + queue =3D random.randint(1, self.PF_QUEUE - 1) > + out=3Dself.dut_testpmd.execute_cmd( 'flow create 0 ingress p= attern > eth / ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / > end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of > non > +matching sessionID > + > + if 'l2tpv3oip_v4src_v6src' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 src is 1.3.5.7 / l2tpv3oip session_id is 1001 / end actions queue in= dex {} / > end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of= non > matching sessionID > + qdef.append(0) #Default Queue number to check for in case of= non > matching IPv4 SIP > + queue =3D random.randint(1, self.PF_QUEUE - 1) > + out=3Dself.dut_testpmd.execute_cmd( 'flow create 0 ingress p= attern > eth / ipv6 src is 1:3:5:7:9:2:4:6 / l2tpv3oip session_id is 1001 / end ac= tions > queue index {} / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of= non > matching sessionID > + qdef.append(0) #Default Queue number to check for in case > + of non matching IPv6 SIP > + > + if 'l2tpv3oip_v4dst_v6dst' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 dst is 9.7.5.3 / l2tpv3oip session_id is 1001 / end actions queue in= dex {} / > end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case o= f non > matching sessionID > + qdef.append(0) #Default Queue number to check for in case o= f non > matching IPv4 DIP > + queue =3D random.randint(1, self.PF_QUEUE - 1) > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv6 dst is 2:4:6:8:1:3:5:7 / l2tpv3oip session_id is 1001 / end actions = queue > index {} / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of= non > matching sessionID > + qdef.append(0) #Default Queue number to check for in case > + of non matching IPv6 DIP > + > + if 'l2tpv3oip_v4srcdst_v6srcdst' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 src is 9.8.7.6 dst is 4.5.6.7 / l2tpv3oip session_id is 1001 / end a= ctions > queue index {} / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case o= f non > matching sessionID > + qdef.append(0) #Default Queue number to check for in case o= f non > matching IPv4 SIP > + qdef.append(0) #Default Queue number to check for in case o= f non > matching IPv4 DIP > + queue =3D random.randint(1, self.PF_QUEUE - 1) > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv6 src is 1:2:3:4:5:6:7:8 dst is 9:8:7:6:5:4:3:2 / l2tpv3oip session_id= is 1001 / > end actions queue index {} / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case o= f non > matching sessionID > + qdef.append(0) #Default Queue number to check for in case o= f non > matching IPv6 SIP > + qdef.append(0) #Default Queue number to check for in case > + of non matching IPv6 DIP > + > + if 'l2tpv3oip_v4_v6_udp' is keyword: > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 / l2tpv3oip session_id is 1001 / end actions queue index {} / > end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of= non > matching sessionID > + queue =3D random.randint(1, self.PF_QUEUE - 1) > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv6 / l2tpv3oip session_id is 1001 / end actions queue index {} / > end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule f= or > matched sessionID > + qdef.append(0) #Default Queue number to check for in case of= non > matching sessionID > + queue =3D random.randint(1, self.PF_QUEUE - 1) > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern= eth / > ipv4 / udp / end actions queue index {} / end'.format(queue)) > + qdef.append(queue) #Queue Number as configured in the rule > + > + qnum=3Dself.send_and_verify(keyword) > + for i in range(len(qdef)): > + self.verify(qdef[i] =3D=3D qnum[i], "Receive packet from wrong > queue!!!") > + self.dut_testpmd.execute_cmd("flow flush 0") # Delete all the > +flow director rules > + > + def test_l2tpv3oipv4(self): > + """ > + L2TPv3 PAY is supported by NVM with profile updated. > + Default flow director input set is sessionID > + flow director works to send matched packets to configured queue, > + otherwise to queue 0. > + """ > + keyword =3D 'l2tpv3oipv4' > + crlwords_ipv4=3Drange(44,46) > + crlwords_ipv6=3DNone > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oipv4_src(self): > + """ > + Flow director input set is sessionID + SIP for pctype 28 > + """ > + > + crlwords_ipv4=3Dlist(range(15,17))+list(range(44,46)) > + crlwords_ipv6=3DNone > + keyword =3D 'l2tpv3oipv4_src' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oipv4_dst(self): > + """ > + Flow director input set is sessionID + DIP for pctype 28 > + """ > + crlwords_ipv4=3Dlist(range(27,29))+list(range(44,46)) > + crlwords_ipv6=3DNone > + keyword =3D 'l2tpv3oipv4_dst' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oipv4_src_dst(self): > + """ > + Flow director input set is sessionID + SIP + DIP for pctype 28 > + """ > + crlwords_ipv4=3Dlist(range(15,17))+list(range(27,29))+list(range= (44,46)) > + crlwords_ipv6=3DNone > + keyword =3D 'l2tpv3oipv4_src_dst' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oipv6(self): > + > + """ > + Flow director input set is sessionID for pctyp 38 > + """ > + crlwords_ipv6=3Drange(44,46) > + crlwords_ipv4=3DNone > + keyword =3D 'l2tpv3oipv6' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oipv6_dst(self): > + """ > + Flow director input set is sessionID + DIP for pctype 38 > + """ > + crlwords_ipv4=3DNone > + crlwords_ipv6=3Dlist(range(21,29))+list(range(44,46)) > + keyword =3D 'l2tpv3oipv6_dst' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oipv6_src(self): > + """ > + Flow director input set is sessionID + SIP for pctype 38 > + """ > + crlwords_ipv4=3DNone > + crlwords_ipv6=3Dlist(range(13,21))+list(range(44,46)) > + keyword =3D 'l2tpv3oipv6_src' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oipv6_src_dst(self): > + """ > + Flow director input set is sessionID + SIP + DIP for pctype 38 > + """ > + crlwords_ipv4=3DNone > + crlwords_ipv6=3Dlist(range(13,29))+list(range(44,46)) > + keyword =3D 'l2tpv3oipv6_src_dst' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3_ipv4_ipv6(self): > + """ > + Flow director input set is sessionID for pctype 28 and 38 > + """ > + crlwords_ipv4=3Drange(44,46) > + crlwords_ipv6=3Drange(44,46) > + keyword =3D 'l2tpv3_ipv4_ipv6' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oip_v4src_v6src(self): > + """ > + Flow director input set is sessionID + SIP for pctype 28 and 38 > + """ > + crlwords_ipv4=3Dlist(range(15,17))+list(range(44,46)) > + crlwords_ipv6=3Dlist(range(13,21))+list(range(44,46)) > + keyword =3D 'l2tpv3oip_v4src_v6src' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oip_v4dst_v6dst(self): > + """ > + Flow director input set is sessionID + DIP for pctype 28 and 38 > + """ > + crlwords_ipv4=3Dlist(range(27,29))+list(range(44,46)) > + crlwords_ipv6=3Dlist(range(21,29))+list(range(44,46)) > + keyword =3D 'l2tpv3oip_v4dst_v6dst' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oip_v4srcdst_v6srcdst(self): > + """ > + Flow director input set is sessionID + SIP + DIP for pctype 28 a= nd 38 > + """ > + crlwords_ipv4=3Dlist(range(15,17))+list(range(27,29))+list(range= (44,46)) > + crlwords_ipv6=3Dlist(range(13,29))+list(range(44,46)) > + keyword =3D 'l2tpv3oip_v4srcdst_v6srcdst' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oip_v4_v6_udp(self): > + """ > + Flow director input set is sessionID for pctype 28 and 38 > + """ > + crlwords_ipv4=3Drange(44,46) > + crlwords_ipv6=3Drange(44,46) > + keyword =3D 'l2tpv3oip_v4_v6_udp' > + self.run_fd_test(keyword,crlwords_ipv4,crlwords_ipv6) > + > + def test_l2tpv3oip_load_profile(self): > + """ > + Test to load the profile. > + Step1: Check if it is already loaded, if loaded delete the same > + Step2: Load the profile > + """ > + self.dut_testpmd.execute_cmd('port stop 0') > + > + out=3Dself.dut_testpmd.execute_cmd('ddp get list 0') > + if "L2TPv3oIP with L4 payload" in out: > + print "Profile is already loaded!!" > + out=3Dself.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip= -l4.bak') > + out=3Dself.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip- > l4.pkg,/tmp/l2tpv3oip-l4.bak') > + out=3Dself.dut_testpmd.execute_cmd('ddp get list 0') > + self.verify("L2TPv3oIP with L4 payload" in out,"Failed to Load > + DDP profile ") > + > + def test_l2tpv3oip_delete_profile(self): > + """ > + Test to delete the profile. > + Step1: Check if profile is loaded, if loaded, delete the same > + Step2: Add the profile again > + """ > + self.dut_testpmd.execute_cmd('port stop 0') > + out=3Dself.dut_testpmd.execute_cmd('ddp get list 0') > + > + if "L2TPv3oIP with L4 payload" not in out: > + out=3Dself.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip= - > l4.pkg,/tmp/l2tpv3oip-l4.bak') > + out=3Dself.dut_testpmd.execute_cmd('ddp get list 0') > + self.verify("L2TPv3oIP with L4 payload" in out,"Error in loa= ding the > Profile") > + out=3Dself.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip- > l4.bak') > + print out > + out=3Dself.dut_testpmd.execute_cmd('ddp get list 0') > + print out > + self.verify("Profile number is: 0" in out,"Error in @@deleting t= he > Profile !!") > + out=3Dself.dut_testpmd.execute_cmd('ddp add 0 /tmp/l2tpv3oip- > l4.pkg,/tmp/l2tpv3oip-l4.bak') > + out=3Dself.dut_testpmd.execute_cmd('ddp get list 0') > + self.verify("L2TPv3oIP with L4 payload" in out,"Error in > +loading the Profile") > + > + def test_l2tpv3oip_delete_rules(self): > + """ > + Test to Add, delete and flush flow director rules > + Step1: Add 3 rules, > + Step2: Delete 1 rule, > + Step3: Flush all rules > + """ > + queue =3D random.randint(1, self.PF_QUEUE - 1) > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth= / ipv4 > / l2tpv3oip session_id is 1001 / end actions queue index {} / > end'.format(queue)) > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth= / ipv4 > / l2tpv3oip session_id is 1002 / end actions queue index {} / > end'.format(queue)) > + self.dut_testpmd.execute_cmd( 'flow create 0 ingress pattern eth= / ipv4 > / l2tpv3oip session_id is 1003 / end actions queue index {} / > end'.format(queue)) > + out=3Dself.dut_testpmd.execute_cmd('flow list 0') > + verify=3Dout.splitlines() > + self.verify(len(verify)=3D=3D 6,"Flow rules not added") > + self.dut_testpmd.execute_cmd( 'flow destroy 0 rule 0') > + out=3Dself.dut_testpmd.execute_cmd('flow list 0') > + verify=3Dout.splitlines() > + self.verify(len(verify)=3D=3D 5,"Flow rules not destroyed") > + self.dut_testpmd.execute_cmd( 'flow flush 0') > + out=3Dself.dut_testpmd.execute_cmd('flow list 0') > + verify=3Dout.splitlines() > + self.verify(len(verify)=3D=3D 1,"Flow rules not destroyed") > + > + def tear_down(self): > + self.dut_testpmd.execute_cmd('stop') > + out =3D self.dut_testpmd.execute_cmd('ddp get list 0') > + if "Profile number is: 0" not in out: > + self.dut_testpmd.execute_cmd('port stop all') > + time.sleep(1) > + self.dut_testpmd.execute_cmd('ddp del 0 /tmp/l2tpv3oip-l4.ba= k') > + out =3D self.dut_testpmd.execute_cmd('ddp get list 0') > + self.verify("Profile number is: 0" in out, > + "Failed to delete ddp profile!!!") > + self.dut_testpmd.execute_cmd('port start all') > + self.dut_testpmd.quit() > + > + def tear_down_all(self): > + pass > + > -- > 2.17.1