From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id D3DF9532C for ; Wed, 24 Aug 2016 10:52:48 +0200 (CEST) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP; 24 Aug 2016 01:52:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,570,1464678000"; d="scan'208";a="870337527" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga003.jf.intel.com with ESMTP; 24 Aug 2016 01:52:46 -0700 Received: from fmsmsx112.amr.corp.intel.com (10.18.116.6) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 24 Aug 2016 01:52:46 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by FMSMSX112.amr.corp.intel.com (10.18.116.6) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 24 Aug 2016 01:52:46 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.181]) by shsmsx102.ccr.corp.intel.com ([169.254.2.147]) with mapi id 14.03.0248.002; Wed, 24 Aug 2016 16:52:43 +0800 From: "Liu, Yong" To: "Xu, HuilongX" , "dts@dpdk.org" CC: "Xu, HuilongX" Thread-Topic: [dts] [PATCH V1] fix nvgre packet type detection case Thread-Index: AQHR/dVBh3TEFzM7x0aPhITsYURi/aBXzZiw Date: Wed, 24 Aug 2016 08:52:43 +0000 Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E22274530@SHSMSX103.ccr.corp.intel.com> References: <1472021751-27725-1-git-send-email-huilongx.xu@intel.com> In-Reply-To: <1472021751-27725-1-git-send-email-huilongx.xu@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMzRlNTJiNjctZjc1OS00MzFjLWI1NTktODYzYjQ5ZWViMmY5IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IkcrK3RUV3Z0SE1lRmhkcmFPU1wvTWJ1dVJxb3E1N2d4aXNpbDV0akZ0V0d3PSJ9 x-ctpclassification: CTP_IC 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 V1] fix nvgre packet type detection case 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: , X-List-Received-Date: Wed, 24 Aug 2016 08:52:50 -0000 Huilong, I'm confused, your patch included some codes which have been merge= d. If your patch is for nvgre, please send out patch only with nvgre modifi= cation. > -----Original Message----- > From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of xu,huilong > Sent: Wednesday, August 24, 2016 2:56 PM > To: dts@dpdk.org > Cc: Xu, HuilongX > Subject: [dts] [PATCH V1] fix nvgre packet type detection case >=20 > nvgre packet type detection must use without VEC PMD >=20 > Signed-off-by: xu,huilong > --- > framework/packet.py | 20 ++ > nics/br.py | 30 +++ > nics/rrc.py | 2 +- > test_plans/ipgre_test_plan.rst | 181 +++++++++++++++++ > tests/TestSuite_ipgre.py | 448 > +++++++++++++++++++++++++++++++++++++++++ > tests/TestSuite_nvgre.py | 26 ++- > tests/TestSuite_vxlan.py | 44 +++- > 7 files changed, 743 insertions(+), 8 deletions(-) > create mode 100644 test_plans/ipgre_test_plan.rst > create mode 100644 tests/TestSuite_ipgre.py >=20 > diff --git a/framework/packet.py b/framework/packet.py > index 6c892e5..93d6879 100755 > --- a/framework/packet.py > +++ b/framework/packet.py > @@ -276,12 +276,24 @@ class scapy(object): > if chksum is not None: > pkt_layer.chksum =3D chksum >=20 > + def sctp(self, pkt_layer, src=3D53, dst=3D53, len=3DNone, chksum=3DN= one): > + pkt_layer.sport =3D src > + pkt_layer.dport =3D dst > + if len is not None: > + pkt_layer.len =3D len > + if chksum is not None: > + pkt_layer.chksum =3D chksum > + > def raw(self, pkt_layer, payload=3DNone): > if payload is not None: > pkt_layer.load =3D '' > for hex1, hex2 in payload: > pkt_layer.load +=3D struct.pack("=3DB", int('%s%s' %(hex= 1, > hex2), 16)) >=20 > + def gre(self, pkt_layer, proto=3DNone): > + if proto is not None: > + pkt_layer.proto =3D proto > + > def vxlan(self, pkt_layer, vni=3D0): > pkt_layer.vni =3D vni >=20 > @@ -472,9 +484,11 @@ class Packet(object): > 'VLAN': 'vlan', > 'ETAG': 'etag', > 'IP': 'ipv4', > + 'IPv4-TUNNEL':'inner_ipv4', > 'IPihl': 'ipv4ihl', > 'IPFRAG': 'ipv4_ext', > 'IPv6': 'ipv6', > + 'IPv6-TUNNEL':'inner_ipv6', > 'IPv6FRAG': 'ipv6_frag', > 'IPv6EXT': 'ipv6_ext', > 'IPv6EXT2': 'ipv6_ext2', > @@ -593,6 +607,12 @@ class Packet(object): > def _config_layer_tcp(self, pkt_layer, config): > return self.pktgen.tcp(pkt_layer, **config) >=20 > + def _config_layer_sctp(self, pkt_layer, config): > + return self.pktgen.sctp(pkt_layer, **config) > + > + def _config_layer_gre(self, pkt_layer, config): > + return self.pktgen.gre(pkt_layer, **config) > + > def _config_layer_raw(self, pkt_layer, config): > return self.pktgen.raw(pkt_layer, **config) >=20 > diff --git a/nics/br.py b/nics/br.py > index 5b6e778..79c8a7b 100644 > --- a/nics/br.py > +++ b/nics/br.py > @@ -29,6 +29,7 @@ > # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >=20 > +import re > from crb import Crb > from config import PortConf, PORTCONF > from exception import PortConfigParseException > @@ -243,3 +244,32 @@ class BoulderRapid(NetDevice): > self.ctrl_crb.send_expect("set port config 1 > max_frame_size %d" % framesize, "<0>%") > else: > self.ctrl_crb.send_expect("set port config 5 > max_frame_size %d" % framesize, "<0>%") > + > + def get_glortid_bymac(self, dmac): > + out =3D self.ctrl_crb.send_expect("show mac table all", "<0>%") > + pattern =3D r"([0-9a-f]{2}:){5}([0-9a-f]{2})" > + s =3D re.compile(pattern) > + res =3D s.search(dmac) > + if res is None: > + print RED("search none mac filter") > + return None > + else: > + mac_filter =3D res.group(2) > + pattern =3D r"(?<=3D%s)+([\sA-Za-z0-9/])+([0-9]{4})" %mac_filter > + s =3D re.compile(pattern) > + res =3D s.search(out) > + if res is None: > + print RED("search none port value") > + return None > + else: > + port_value =3D res.group(2) > + out =3D self.ctrl_crb.send_expect("show stacking logical-port al= l", > "<0>%") > + pattern =3D r"([0-9a-z]{6})+(\s)+(%s)+" %port_value > + s =3D re.compile(pattern) > + res =3D s.search(out) > + if res is None: > + print RED("search none port glort id") > + return None > + else: > + port_glortid =3D res.group(1) > + return port_glortid > diff --git a/nics/rrc.py b/nics/rrc.py > index 62dc8d2..a6ac175 100644 > --- a/nics/rrc.py > +++ b/nics/rrc.py > @@ -259,7 +259,7 @@ class RedRockCanyou(NetDevice): > return None > else: > port_value =3D res.group(2) > - out =3D self.ctrl_crb.send_expect("show stacking logical-port al= l", > "<0>%",10000) > + out =3D self.ctrl_crb.send_expect("show stacking logical-port al= l", > "<0>%") > pattern =3D r"([0-9a-z]{6})+(\s)+(%s)+" %port_value > s =3D re.compile(pattern) > res =3D s.search(out) > diff --git a/test_plans/ipgre_test_plan.rst > b/test_plans/ipgre_test_plan.rst > new file mode 100644 > index 0000000..444efdf > --- /dev/null > +++ b/test_plans/ipgre_test_plan.rst > @@ -0,0 +1,181 @@ > +.. Copyright(c) 2010-2016 Intel Corporation > + 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. > + > + > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +Generic Routing Encapsulation (GRE) > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +Generic Routing Encapsulation (GRE) is a tunneling protocol developed by > Cisco Systems that can encapsulate a wide variety of network layer > protocols inside virtual point-to-point links over an Internet Protocol > network. > +Fortville support GRE packet detecting, checksum computing and filtering= . > + > +Prerequisites > +------------- > + > +Fortville nic should be on the DUT. > + > +Test cases > +---------- > + > +Test Case 1: GRE ipv4 packet detect > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > +Start testpmd and enable rxonly forwarding mode:: > + testpmd -c ffff -n 4 -- -i --txqflags=3D0x0 > + testpmd> set fwd rxonly > + testpmd> set verbose 1 > + testpmd> start > + > +Send packet as table listed and packet type match each layer. > + > ++------------+----------+-----------+----------+-----------+ > +| Outer Vlan | Outer IP | Tunel | Inner L3 | Inner L4 | > ++------------+----------+-----------+----------+-----------+ > +| No | Ipv4 | GRE | Ipv4 | Udp | > ++------------+----------+-----------+----------+-----------+ > +| No | Ipv4 | GRE | Ipv4 | Tcp | > ++------------+----------+-----------+----------+-----------+ > +| No | Ipv4 | GRE | Ipv4 | Sctp | > ++------------+----------+-----------+----------+-----------+ > +| Yes | Ipv4 | GRE | Ipv4 | Udp | > ++------------+----------+-----------+----------+-----------+ > +| Yes | Ipv4 | GRE | Ipv4 | Tcp | > ++------------+----------+-----------+----------+-----------+ > +| Yes | Ipv4 | GRE | Ipv4 | Sctp | > ++------------+----------+-----------+----------+-----------+ > + > + > +Test Case 2: GRE ipv6 packet detect > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > +Start testpmd and enable rxonly forwarding mode:: > + testpmd -c ffff -n 4 -- -i --txqflags=3D0x0 > + testpmd> set fwd rxonly > + testpmd> set verbose 1 > + testpmd> start > + > +Send packet as table listed and packet type match each layer. > +Ether()/IPv6(nh=3D47)/GRE()/IP()/UDP()/Raw('x'*40) > +Ether()/IPv6(nh=3D47)/GRE(proto=3D0x86dd)/IPv6()/UDP()/Raw('x'*40) > ++------------+----------+-----------+----------+-----------+ > +| Outer Vlan | Outer IP | Tunel | Inner L3 | Inner L4 | > ++------------+----------+-----------+----------+-----------+ > +| No | Ipv6 | GRE | Ipv4 | Udp | > ++------------+----------+-----------+----------+-----------+ > +| No | Ipv6 | GRE | Ipv4 | Tcp | > ++------------+----------+-----------+----------+-----------+ > +| No | Ipv6 | GRE | Ipv4 | Sctp | > ++------------+----------+-----------+----------+-----------+ > +| Yes | Ipv6 | GRE | Ipv4 | Udp | > ++------------+----------+-----------+----------+-----------+ > +| Yes | Ipv6 | GRE | Ipv4 | Tcp | > ++------------+----------+-----------+----------+-----------+ > +| Yes | Ipv6 | GRE | Ipv4 | Sctp | > ++------------+----------+-----------+----------+-----------+ > + > ++------------+----------+-----------+----------+-----------+ > +| Outer Vlan | Outer IP | Tunel | Inner L3 | Inner L4 | > ++------------+----------+-----------+----------+-----------+ > +| No | Ipv6 | GRE | Ipv6 | Udp | > ++------------+----------+-----------+----------+-----------+ > +| No | Ipv6 | GRE | Ipv6 | Tcp | > ++------------+----------+-----------+----------+-----------+ > +| No | Ipv6 | GRE | Ipv6 | Sctp | > ++------------+----------+-----------+----------+-----------+ > +| Yes | Ipv6 | GRE | Ipv6 | Udp | > ++------------+----------+-----------+----------+-----------+ > +| Yes | Ipv6 | GRE | Ipv6 | Tcp | > ++------------+----------+-----------+----------+-----------+ > +| Yes | Ipv6 | GRE | Ipv6 | Sctp | > ++------------+----------+-----------+----------+-----------+ > + > +Test Case 3: GRE packet filter > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > +Start testpmd with multi queues:: > + testpmd -c ff -n 3 -- -i --rxq=3D4 --txq=3D4 --txqflags=3D0x0 > + testpmd> set fwd rxonly > + testpmd> set nbcore 4 > + testpmd> set verbose 1 > + testpmd> start > + > +Add GRE filter that forward inner ip address 0.0.0.0 to queue 3 > + testpmd> tunnel_filter add 0 XX:XX:XX:XX:XX:XX YY:YY:YY:YY:YY:YY \ > + 0.0.0.0 1 ipingre iip 0 3 > + > +Send packet inner ip address matched and check packet recevied by queue = 3. > + p =3D Ether()/IP()/GRE()/IP(dst=3D"0.0.0.0")/UDP() > + > +Remove tunnel filter and check same packet recevied by queue 0 > + testpmd> tunnel_filter rm 0 XX:XX:XX:XX:XX:XX YY:YY:YY:YY:YY:YY \ > + 0.0.0.0 1 ipingre iip 0 3 > + > +Add GRE filter that forward outer ip address 0.0.0.0 to queue 3 > + testpmd> tunnel_filter add 0 XX:XX:XX:XX:XX:XX YY:YY:YY:YY:YY:YY \ > + 0.0.0.0 1 ipingre oip 0 3 > + > +Send packet outer ip address matched and check packet recevied by queue = 3. > + > +Remove tunnel filter and check same packet recevied by queue 0. > + testpmd> tunnel_filter rm 0 XX:XX:XX:XX:XX:XX YY:YY:YY:YY:YY:YY \ > + 0.0.0.0 1 ipingre iip 0 3 > + > +Test Case 4: GRE packet chksum offload > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +Start testpmd with hardware checksum offload enabled:: > + testpmd -c ff -n 3 -- -i --txqflags=3D0x0 --enable-rx-cksum --port- > topology=3Dloop > + testpmd> set verbose 1 > + testpmd> set fwd csum > + testpmd> csum set ip hw 0 > + testpmd> csum set udp hw 0 > + testpmd> csum set sctp hw 0 > + testpmd> csum set outer-ip hw 0 > + testpmd> csum set tcp hw 0 > + testpmd> csum parse_tunnel on 0 > + testpmd> start > + > +Send packet with wrong outer IP checksum and check forwarded packet IP > +checksum is correct. > + Ether()/IP(chksum=3D0x0)/GRE()/IP()/TCP() > + > +Send packet with wrong inner IP checksum and check forwarded packet IP > +checksum is correct. > + Ether()/IP()/GRE()/IP(chksum=3D0x0)/TCP() > + > +Send packet with wrong inner TCP checksum and check forwarded packet TCP > +checksum is correct. > + Ether()/IP()/GRE()/IP()/TCP(chksum=3D0x0) > + > +Send packet with wrong inner UDP checksum and check forwarded packet UDP > +checksum is correct. > + Ether()/IP()/GRE()/IP()/UDP(chksum=3D0xffff) > + > +Send packet with wrong inner SCTP checksum and check forwarded packet > SCTP > +checksum is correct. > + Ether()/IP()/GRE()/IP()/SCTP(chksum=3D0x0) > diff --git a/tests/TestSuite_ipgre.py b/tests/TestSuite_ipgre.py > new file mode 100644 > index 0000000..a403ded > --- /dev/null > +++ b/tests/TestSuite_ipgre.py > @@ -0,0 +1,448 @@ > +# 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. > + > +Generic Routing Encapsulation (GRE) is a tunneling protocol developed by > +Cisco Systems that can encapsulate a wide variety of network layer > protocols > +inside virtual point-to-point links over an Internet Protocol network. > + > +Fortville support GRE packet detecting, checksum computing and filtering= . > +""" > + > +import dts > +import re > +import time > +import os > + > +from packet import Packet, sniff_packets, load_sniff_packets, NVGRE, > IPPROTO_NVGRE > + > +from scapy.utils import wrpcap, rdpcap > +from packet import IncreaseIP > +from scapy.packet import split_layers,bind_layers > +from scapy.layers.inet import Ether, IP, TCP, UDP > +from scapy.layers.sctp import SCTP > +from scapy.layers.l2 import GRE > + > +from test_case import TestCase > +from exception import VerifyFailure > + > +class TestIpgre(TestCase): > + > + def set_up_all(self): > + """ > + Run at the start of each test suite. > + """ > + self.printFlag =3D dts.debug_mode > + ports =3D self.dut.get_ports() > + self.verify(self.nic.startswith("fortville"), > + "GRE tunnel packet type only support by Fortville") > + self.verify(len(ports) >=3D 1, "Insufficient ports for testing") > + valports =3D [_ for _ in ports if self.tester.get_local_port(_) = !=3D > -1] > + # start testpmd > + self.dut_port =3D valports[0] > + tester_port =3D self.tester.get_local_port(self.dut_port) > + self.tester_iface =3D self.tester.get_interface(tester_port) > + self.tester_iface_mac =3D self.tester.get_mac(tester_port) > + self.initialize_port_config() > + self.re_bind_nvgre_to_gre() > + > + def initialize_port_config(self): > + self.outer_mac_src =3D "11:22:33:44:55:66" > + self.outer_mac_src =3D '00:00:10:00:00:00' > + self.outer_mac_dst =3D '11:22:33:44:55:66' > + self.outer_ip_src =3D '192.168.1.1' > + self.outer_ip_dst =3D '192.168.1.2' > + self.inner_ip_src =3D '192.168.2.1' > + self.inner_ip_dst =3D '192.168.2.2' > + > + def set_up(self): > + """ > + Run before each test case. > + Nothing to do. > + """ > + pass > + > + def check_packet_transmission(self, pkt_types, layer_configs=3DNone)= : > + time.sleep(1) > + for pkt_type in pkt_types.keys(): > + pkt_names =3D pkt_types[pkt_type] > + pkt =3D Packet(pkt_type=3Dpkt_type) > + if layer_configs: > + for layer in layer_configs.keys(): > + pkt.config_layer(layer, layer_configs[layer]) > + inst =3D sniff_packets(self.tester_iface, count=3D1, timeout= =3D8) > + pkt.send_pkt(tx_port=3Dself.tester_iface) > + out =3D self.dut.get_session_output(timeout=3D2) > + time.sleep(1) > + load_sniff_packets(inst) > + if self.printFlag: # debug output > + print out > + for pkt_layer_name in pkt_names: > + if self.printFlag:# debug output > + print pkt_layer_name > + if pkt_layer_name not in out: > + print dts.RED("Fail to detect %s" % pkt_layer_name) > + if not self.printFlag: > + raise VerifyFailure("Failed to detect %s" % > pkt_layer_name) > + else: > + print dts.GREEN("Detected %s successfully" % pkt_type) > + time.sleep(1) > + > + def save_ref_packet(self, pkt_types, layer_configs=3DNone): > + for pkt_type in pkt_types.keys(): > + pkt_names =3D pkt_types[pkt_type] > + pkt =3D Packet(pkt_type=3Dpkt_type) > + if layer_configs: > + for layer in layer_configs.keys(): > + pkt.config_layer(layer, layer_configs[layer]) > + wrpcap("/tmp/ref_pkt.pcap", pkt.pktgen.pkt) > + time.sleep(1) > + > + def re_bind_nvgre_to_gre(self): > + split_layers(IP, NVGRE, frag=3D0, proto=3DIPPROTO_NVGRE) > + bind_layers(IP, GRE, frag=3D0, proto=3DIPPROTO_NVGRE) > + > + def get_chksums(self, pcap=3DNone): > + """ > + get chksum values of Outer and Inner packet L3&L4 > + Skip outer udp for it will be calculated by software > + """ > + chk_sums =3D {} > + pkts =3D rdpcap(pcap) > + for number in range(len(pkts)): > + if pkts[number].guess_payload_class(pkts[number]).name =3D= =3D > "gre": > + payload =3D pkts[number][GRE] > + else: > + payload =3D pkts[number] > + > + if payload.guess_payload_class(payload).name =3D=3D "IP": > + chk_sums['outer_ip'] =3D hex(payload[IP].chksum) > + > + if pkts[number].haslayer(GRE) =3D=3D 1: > + inner =3D pkts[number][GRE] > + if inner.haslayer(IP) =3D=3D 1: > + chk_sums['inner_ip'] =3D hex(inner[IP].chksum) > + if inner[IP].proto =3D=3D 6: > + chk_sums['inner_tcp'] =3D hex(inner[TCP].chksum) > + if inner[IP].proto =3D=3D 17: > + chk_sums['inner_udp'] =3D hex(inner[UDP].chksum) > + if inner[IP].proto =3D=3D 132: > + chk_sums['inner_sctp'] =3D hex(inner[SCTP].chksu= m) > + break > + > + return chk_sums > + > + def compare_checksum(self): > + chksums_ref =3D self.get_chksums('/tmp/ref_pkt.pcap') > + chksums =3D > self.get_chksums('/tmp/sniff_{0}.pcap'.format(self.tester_iface)) > + self.logger.info("chksums_ref :: %s"%chksums_ref) > + self.logger.info("chksums :: %s"%chksums) > + # verify saved pcap checksum same to expected checksum > + for key in chksums_ref: > + self.verify(int(chksums[key], 16) =3D=3D int(chksums_ref[key= ], > 16), "%s not matched to %s" % (key, chksums_ref[key])) > + print dts.GREEN("Checksum is ok") > + > + def test_GRE_ipv4_packet_detect(self): > + """ > + Start testpmd and enable rxonly forwarding mode > + Send packet as table listed and packet type match each layer > + """ > + pkt_types =3D { > + "MAC_IP_GRE_IPv4-TUNNEL_UDP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: UDP"], > + "MAC_IP_GRE_IPv4-TUNNEL_TCP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: TCP"], > + "MAC_IP_GRE_IPv4-TUNNEL_SCTP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: SCTP"], > + "MAC_VLAN_IP_GRE_IPv4-TUNNEL_UDP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: UDP"], > + "MAC_VLAN_IP_GRE_IPv4-TUNNEL_TCP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: TCP"], > + "MAC_VLAN_IP_GRE_IPv4-TUNNEL_SCTP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: SCTP"] > + } > + config_layers =3D {'ether': {'src': self.outer_mac_src}, > + 'ipv4': {'proto': 'gre'}} > + # Start testpmd and enable rxonly forwarding mode > + testpmd_cmd =3D "./%s/app/testpmd -c ffff -n 4 -- -i --enable-rx= - > cksum --enable-rx-cksum" % self.target > + self.dut.send_expect( testpmd_cmd, > + "testpmd>", > + 20) > + self.dut.send_expect("set fwd rxonly", "testpmd>") > + self.dut.send_expect("set verbose 1", "testpmd>") > + self.dut.send_expect("start", "testpmd>") > + > + self.check_packet_transmission(pkt_types, config_layers) > + > + self.dut.send_expect("quit", "#") > + > + def test_GRE_ipv6_packet_detect(self): > + """ > + Start testpmd and enable rxonly forwarding mode > + Send packet as table listed and packet type match each layer > + """ > + pkt_types_ipv6_ip =3D { > + "MAC_IPv6_GRE_IPv4-TUNNEL_UDP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: UDP"], > + "MAC_IPv6_GRE_IPv4-TUNNEL_TCP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: TCP"], > + "MAC_IPv6_GRE_IPv4-TUNNEL_SCTP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: SCTP"], > + "MAC_VLAN_IPv6_GRE_IPv4-TUNNEL_UDP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: UDP", "PKT_RX_VLAN_PKT"], > + "MAC_VLAN_IPv6_GRE_IPv4-TUNNEL_TCP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: TCP", "PKT_RX_VLAN_PKT"], > + "MAC_VLAN_IPv6_GRE_IPv4-TUNNEL_SCTP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: SCTP", "PKT_RX_VLAN_PKT"] > + } > + > + pkt_types_ipv6_ipv6 =3D { > + "MAC_IPv6_GRE_IPv6-TUNNEL_UDP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: UDP"], > + "MAC_IPv6_GRE_IPv6-TUNNEL_TCP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: TCP"], > + "MAC_VLAN_IPv6_GRE_IPv6-TUNNEL_UDP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: UDP", "PKT_RX_VLAN_PKT"], > + "MAC_VLAN_IPv6_GRE_IPv6-TUNNEL_TCP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: TCP", "PKT_RX_VLAN_PKT"] > + } > + > + pkt_types_ipv6_ipv6_SCTP =3D { > + "MAC_IPv6_GRE_IPv6-TUNNEL_SCTP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: SCTP"], > + "MAC_VLAN_IPv6_GRE_IPv6-TUNNEL_SCTP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: SCTP", "PKT_RX_VLAN_PKT"] > + } > + > + # Start testpmd and enable rxonly forwarding mode > + testpmd_cmd =3D "./%s/app/testpmd -c ffff -n 4 -- -i --enable-rx= - > cksum" % self.target > + self.dut.send_expect(testpmd_cmd, "testpmd>", 20) > + self.dut.send_expect("set fwd rxonly", "testpmd>") > + self.dut.send_expect("set verbose 1", "testpmd>") > + self.dut.send_expect("start", "testpmd>") > + > + # inner ipv4 > + config_layers =3D {'ether': {'src': self.outer_mac_src}, > + 'ipv6': {'nh': 47}, > + 'raw': {'payload':['78']*40}} > + self.check_packet_transmission(pkt_types_ipv6_ip, config_layers) > + > + # inner ipv6 > + config_layers =3D {'ether': {'src': self.outer_mac_src}, > + 'ipv6': {'nh': 47}, > + 'gre': {'proto': 0x86dd}, > + 'raw': {'payload':['78']*40}} > + self.check_packet_transmission(pkt_types_ipv6_ipv6, config_layer= s) > + > + # inner ipv6 SCTP > + config_layers =3D {'ether': {'src': self.outer_mac_src}, > + 'ipv6': {'nh': 47}, > + 'gre': {'proto': 0x86dd}, > + 'inner_ipv6': {'nh': 132}, > + 'raw': {'payload':['78']*40}} > + self.check_packet_transmission(pkt_types_ipv6_ipv6_SCTP, > config_layers) > + self.dut.send_expect("quit", "#") > + > + def test_GRE_packet_filter(self): > + """ > + Start testpmd with multi queues, add GRE filter that forward > + inner/outer ip address 0.0.0.0 to queue 3, Send packet inner > + ip address matched and check packet recevied by queue 3 > + """ > + outer_mac =3D self.tester_iface_mac > + inner_mac =3D "10:00:00:00:00:00" > + > + # Start testpmd with multi queues > + #testpmd_cmd =3D "./%s/app/testpmd -c ff -n 3 -- -i --rxq=3D4 -= - > txq=3D4 --txqflags=3D0x0" % self.target > + testpmd_cmd =3D "./%s/app/testpmd -c ff -n 3 -- -i --enable-rx- > cksum --rxq=3D4 --txq=3D4" % self.target > + self.dut.send_expect(testpmd_cmd, "testpmd>", 20) > + self.dut.send_expect("set fwd rxonly", "testpmd>") > + self.dut.send_expect("set nbcore 4", "testpmd>") > + self.dut.send_expect("set verbose 1", "testpmd>") > + self.dut.send_expect("start", "testpmd>") > + > + # Add GRE filter that forward inner ip address 0.0.0.0 to queue = 3 > + cmd =3D "tunnel_filter add 0 %s %s 0.0.0.0 1 ipingre iip 0 > 3"%(outer_mac, inner_mac) > + self.dut.send_expect( cmd, "testpmd>") > + > + # Send packet inner ip address matched and check packet recevied > by queue 3 > + pkt_types =3D {"MAC_IP_GRE_IPv4-TUNNEL_UDP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: UDP"]} > + config_layers =3D {'ether': {'src': self.outer_mac_src}, > + 'ipv4': {'dst': "0.0.0.0", 'proto': 'gre'}} > + self.check_packet_transmission(pkt_types, config_layers) > + > + # Remove tunnel filter and check same packet recevied by queue 0 > + cmd =3D "tunnel_filter rm 0 %s %s 0.0.0.0 1 ipingre iip 0 > 3"%(outer_mac, inner_mac) > + self.dut.send_expect( cmd, "testpmd>") > + > + # Add GRE filter that forward outer ip address 0.0.0.0 to queue = 3 > + cmd =3D "tunnel_filter add 0 %s %s 0.0.0.0 1 ipingre oip 0 > 3"%(outer_mac, inner_mac) > + self.dut.send_expect( cmd, "testpmd>") > + > + # Send packet outer ip address matched and check packet recevied > by queue 3. > + pkt_types =3D {"MAC_IP_GRE_IPv4-TUNNEL_UDP_PKT": ["Tunnel type: > GRENAT", "Inner L4 type: UDP"]} > + config_layers =3D {'ether': {'src': self.outer_mac_src}, > + 'ipv4': {'dst': "0.0.0.0", 'proto': 'gre'}} > + self.check_packet_transmission(pkt_types, config_layers) > + > + # Add GRE filter that forward outer ip address 0.0.0.0 to queue = 3 > + cmd =3D "tunnel_filter rm 0 %s %s 0.0.0.0 1 ipingre iip 0 > 3"%(outer_mac, inner_mac) > + self.dut.send_expect( cmd, "testpmd>") > + time.sleep(2) > + self.dut.send_expect("quit", "#") > + > + def test_GRE_packet_chksum_offload(self): > + """ > + Start testpmd with hardware checksum offload enabled, > + Send packet with wrong IP/TCP/UDP/SCTP checksum and check > forwarded packet checksum > + """ > + # Start testpmd and enable rxonly forwarding mode > + testpmd_cmd =3D "./%s/app/testpmd -c ff -n 3 -- -i --enable-rx- > cksum --txqflags=3D0x0 --port-topology=3Dloop" % self.target > + self.dut.send_expect(testpmd_cmd, "testpmd>", 20) > + self.dut.send_expect("set verbose 1", "testpmd>") > + self.dut.send_expect("set fwd csum", "testpmd>") > + self.dut.send_expect("csum set ip hw 0", "testpmd>") > + self.dut.send_expect("csum set udp hw 0", "testpmd>") > + self.dut.send_expect("csum set sctp hw 0", "testpmd>") > + self.dut.send_expect("csum set outer-ip hw 0", "testpmd>") > + self.dut.send_expect("csum set tcp hw 0", "testpmd>") > + self.dut.send_expect("csum parse_tunnel on 0", "testpmd>") > + self.dut.send_expect("start", "testpmd>") > + > + # Send packet with wrong outer IP checksum and check forwarded > packet IP checksum is correct > + pkt_types =3D { "MAC_IP_GRE_IPv4-TUNNEL_TCP_PKT": > ["PKT_TX_IP_CKSUM"]} > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': IncreaseIP(self.outer_ip_src), > + 'dst': self.outer_ip_dst}, > + > 'inner_ipv4':{'src':IncreaseIP(self.inner_ip_src), > + 'dst':self.inner_ip_dst}} > + self.save_ref_packet(pkt_types, config_layers) > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': self.outer_ip_src, > + 'dst': self.outer_ip_dst}, > + 'inner_ipv4':{'src':self.inner_ip_src, > + 'dst':self.inner_ip_dst, > + 'chksum': 0x0}} > + self.check_packet_transmission(pkt_types, config_layers) > + self.compare_checksum() > + > + # Send packet with wrong inner IP checksum and check forwarded > packet IP checksum is correct > + pkt_types =3D { "MAC_IP_GRE_IPv4-TUNNEL_TCP_PKT": > ["PKT_TX_IP_CKSUM"]} > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': IncreaseIP(self.outer_ip_src), > + 'dst': self.outer_ip_dst}, > + > 'inner_ipv4':{'src':IncreaseIP(self.inner_ip_src), > + 'dst':self.inner_ip_dst}} > + self.save_ref_packet(pkt_types, config_layers) > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': self.outer_ip_src, > + 'dst': self.outer_ip_dst, > + 'chksum': 0x0}, > + 'inner_ipv4':{'src':self.inner_ip_src, > + 'dst':self.inner_ip_dst}} > + self.check_packet_transmission(pkt_types, config_layers) > + self.compare_checksum() > + > + # Send packet with wrong inner TCP checksum and check forwarded > packet TCP checksum is correct > + pkt_types =3D { "MAC_IP_GRE_IPv4-TUNNEL_TCP_PKT": > ["PKT_TX_TCP_CKSUM"]} > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': IncreaseIP(self.outer_ip_src), > + 'dst': self.outer_ip_dst}, > + > 'inner_ipv4':{'src':IncreaseIP(self.inner_ip_src), > + 'dst':self.inner_ip_dst}, > + 'tcp': {'src': 53, > + 'dst': 53}} > + self.save_ref_packet(pkt_types, config_layers) > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': self.outer_ip_src, > + 'dst': self.outer_ip_dst}, > + 'inner_ipv4':{'src':self.inner_ip_src, > + 'dst':self.inner_ip_dst}, > + 'tcp': {'chksum': 0x0}} > + self.check_packet_transmission(pkt_types, config_layers) > + self.compare_checksum() > + > + # Send packet with wrong inner UDP checksum and check forwarded > packet UDP checksum is correct > + pkt_types =3D { "MAC_IP_GRE_IPv4-TUNNEL_UDP_PKT": > ["PKT_TX_UDP_CKSUM"]} > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': IncreaseIP(self.outer_ip_src), > + 'dst': self.outer_ip_dst}, > + > 'inner_ipv4':{'src':IncreaseIP(self.inner_ip_src), > + 'dst':self.inner_ip_dst}} > + self.save_ref_packet(pkt_types, config_layers) > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': self.outer_ip_src, > + 'dst': self.outer_ip_dst}, > + 'inner_ipv4':{'src':self.inner_ip_src, > + 'dst':self.inner_ip_dst}, > + 'udp': {'chksum': 0xffff}} > + self.check_packet_transmission(pkt_types, config_layers) > + self.compare_checksum() > + > + # Send packet with wrong inner SCTP checksum and check forwarded > packet SCTP checksum is correct > + pkt_types =3D { "MAC_IP_GRE_IPv4-TUNNEL_SCTP_PKT": > ["PKT_TX_SCTP_CKSUM"]} > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': IncreaseIP(self.outer_ip_src), > + 'dst': self.outer_ip_dst}, > + > 'inner_ipv4':{'src':IncreaseIP(self.inner_ip_src), > + 'dst':self.inner_ip_dst}, > + 'sctp': {'src': 53, > + 'dst': 53}} > + self.save_ref_packet(pkt_types, config_layers) > + config_layers =3D {'ether': {'src': self.outer_mac_src, > + 'dst': self.outer_mac_dst}, > + 'ipv4': {'proto': 'gre', > + 'src': self.outer_ip_src, > + 'dst': self.outer_ip_dst}, > + 'inner_ipv4':{'src':self.inner_ip_src, > + 'dst':self.inner_ip_dst}, > + 'sctp': {'chksum': 0x0}} > + self.check_packet_transmission(pkt_types, config_layers) > + self.compare_checksum() > + > + self.dut.send_expect("quit", "#") > + > + def tear_down(self): > + """ > + Run after each test case. > + Nothing to do. > + """ > + pass > + > + def tear_down_all(self): > + """ > + Run after each test suite. > + Nothing to do. > + """ > + self.dut.kill_all() > + pass > diff --git a/tests/TestSuite_nvgre.py b/tests/TestSuite_nvgre.py > index 1da551b..bcbf41b 100644 > --- a/tests/TestSuite_nvgre.py > +++ b/tests/TestSuite_nvgre.py > @@ -349,7 +349,12 @@ class TestNvgre(TestCase): > nvgre Prerequisites > """ > # this feature only enable in FVL now > - self.verify(self.nic in ["fortville_eagle", "fortville_spirit", > "fortville_spirit_single", "fortpark_TLV", "sageville", "sagepond"], > "NVGRE Only supported by Fortville and Sageville") > + if self.nic in ["fortville_eagle", "fortville_spirit", > "fortville_spirit_single", "fortpark_TLV"]: > + self.compile_switch =3D 'CONFIG_RTE_LIBRTE_I40E_INC_VECTOR' > + elif self.nic in ["sageville", "sagepond"]: > + self.compile_switch =3D 'CONFIG_RTE_IXGBE_INC_VECTOR' > + else: > + self.verify(False, "%s not support NVGRE case" % self.nic) > # Based on h/w type, choose how many ports to use > ports =3D self.dut.get_ports(self.nic) > self.portmask =3D dts.create_mask(self.dut.get_ports(self.nic)) > @@ -457,7 +462,7 @@ class TestNvgre(TestCase): > self.dut.send_expect("show port stats all", "testpmd>", 10) > self.dut.send_expect("stop", "testpmd>", 10) > self.dut.send_expect("quit", "#", 10) > - > + > def nvgre_filter(self, filter_type=3D"omac-imac-tenid", queue_id=3D3= , > vlan=3DFalse, remove=3DFalse): > """ > send nvgre packet and check whether receive packet in assigned > queue > @@ -602,6 +607,15 @@ class TestNvgre(TestCase): > """ > verify nvgre packet with ipv4 > """ > + # packet type detect must used without VECTOR pmd > + out =3D self.dut.send_expect("cat config/common_base", "]# ", 10= ) > + src_vec_model =3D re.findall("%s=3D." % self.compile_switch, > out)[0][-1] > + if src_vec_model =3D=3D 'y': > + self.dut.send_expect("sed -i -e 's/%s=3D.*$/" % > self.compile_switch > + + "%s=3Dn/' config/common_base" % > self.compile_switch, "# ", 30) > + self.dut.skip_setup =3D False > + self.dut.build_install_dpdk(self.target) > + > # check no nvgre packet > self.nvgre_detect(outer_ip_proto=3D0xFF) > # check nvgre + IP inner packet > @@ -614,7 +628,13 @@ class TestNvgre(TestCase): > self.nvgre_detect(outer_vlan=3D1) > # check vlan nvgre + vlan inner packet > self.nvgre_detect(outer_vlan=3D1, inner_vlan=3D1) > - > + out =3D self.dut.send_expect("cat config/common_base", "]# ", 10= ) > + dst_vec_model =3D re.findall("%s=3D." % self.compile_switch, > out)[0][-1] > + if src_vec_model !=3D dst_vec_model: > + self.dut.send_expect("sed -i -e 's/%s=3D.*$/" % > self.compile_switch > + + "%s=3D%s/' config/common_base" % > (self.compile_switch, src_vec_model), "# ", 30) > + self.dut.skip_setup =3D False > + self.dut.build_install_dpdk(self.target) > def test_tunnel_filter(self): >=20 > # verify tunnel filter feature > diff --git a/tests/TestSuite_vxlan.py b/tests/TestSuite_vxlan.py > index c1d0200..f94dc24 100644 > --- a/tests/TestSuite_vxlan.py > +++ b/tests/TestSuite_vxlan.py > @@ -257,9 +257,12 @@ class TestVxlan(TestCase, IxiaPacketGenerator): > vxlan Prerequisites > """ > # this feature only enable in FVL now > - self.verify(self.nic in ["fortville_eagle", "fortville_spirit", > - "fortville_spirit_single", > "sagepond","fortpark_TLV"], > - "Vxlan Only supported by Fortville and Sageville") > + if self.nic in ["fortville_eagle", "fortville_spirit", > "fortville_spirit_single", "fortpark_TLV"]: > + self.compile_switch =3D 'CONFIG_RTE_LIBRTE_I40E_INC_VECTOR' > + elif self.nic in ["sageville", "sagepond"]: > + self.compile_switch =3D 'CONFIG_RTE_IXGBE_INC_VECTOR' > + else: > + self.verify(False, "%s not support this vxlan" % self.nic) > # Based on h/w type, choose how many ports to use > ports =3D self.dut.get_ports() >=20 > @@ -466,7 +469,7 @@ class TestVxlan(TestCase, IxiaPacketGenerator): > self.l4err_num +=3D 1 >=20 > # verify detected l3 invalid checksum > - if "inner_ip_invalid" in kwargs: > + if "ip_invalid" in kwargs: > self.verify(self.pmdout.get_pmd_value("Bad-ipcsum:", out) > =3D=3D self.iperr_num + 1, "Failed to count inne= r ip > chksum error") > self.iperr_num +=3D 1 > @@ -528,6 +531,15 @@ class TestVxlan(TestCase, IxiaPacketGenerator): > """ > verify vxlan packet detection > """ > + out =3D self.dut.send_expect("cat config/common_base", "]# ", 10= ) > + src_vec_model =3D re.findall("%s=3D." % self.compile_switch, > out)[0][-1] > + if src_vec_model =3D=3D 'y': > + self.dut.send_expect("sed -i -e 's/%s=3D.*$/" % > self.compile_switch > + + "%s=3Dn/' config/common_base" % > self.compile_switch, "# ", 30) > + self.dut.skip_setup =3D False > + self.dut.build_install_dpdk(self.target) > + > + > pmd_temp =3D "./%(TARGET)s/app/testpmd -c %(COREMASK)s -n " + \ > "%(CHANNEL)d -- -i --disable-rss --rxq=3D4 --txq=3D4" + \ > " --nb-cores=3D4 --portmask=3D%(PORT)s --txqflags=3D0x0" > @@ -557,11 +569,27 @@ class TestVxlan(TestCase, IxiaPacketGenerator): >=20 > out =3D self.dut.send_expect("stop", "testpmd>", 10) > self.dut.send_expect("quit", "#", 10) > + > + out =3D self.dut.send_expect("cat config/common_base", "]# ", 10= ) > + dst_vec_model =3D re.findall("%s=3D." % self.compile_switch, > out)[0][-1] > + if src_vec_model !=3D dst_vec_model: > + self.dut.send_expect("sed -i -e 's/%s=3D.*$/" % > self.compile_switch > + + "%s=3D%s/' config/common_base" % > (self.compile_switch, src_vec_model), "# ", 30) > + self.dut.skip_setup =3D False > + self.dut.build_install_dpdk(self.target) >=20 > def test_vxlan_ipv6_detect(self): > """ > verify vxlan packet detection with ipv6 header > """ > + out =3D self.dut.send_expect("cat config/common_base", "]# ", 10= ) > + src_vec_model =3D re.findall("%s=3D." % self.compile_switch, > out)[0][-1] > + if src_vec_model =3D=3D 'y': > + self.dut.send_expect("sed -i -e 's/%s=3D.*$/" % > self.compile_switch > + + "%s=3Dn/' config/common_base" % > self.compile_switch, "# ", 30) > + self.dut.skip_setup =3D False > + self.dut.build_install_dpdk(self.target) > + > pmd_temp =3D "./%(TARGET)s/app/testpmd -c %(COREMASK)s -n " + \ > "%(CHANNEL)d -- -i --disable-rss --rxq=3D4 --txq=3D4" + \ > " --nb-cores=3D4 --portmask=3D%(PORT)s --txqflags=3D0x0" > @@ -596,6 +624,14 @@ class TestVxlan(TestCase, IxiaPacketGenerator): > out =3D self.dut.send_expect("stop", "testpmd>", 10) > self.dut.send_expect("quit", "#", 10) >=20 > + out =3D self.dut.send_expect("cat config/common_base", "]# ", 10= ) > + dst_vec_model =3D re.findall("%s=3D." % self.compile_switch, > out)[0][-1] > + if src_vec_model !=3D dst_vec_model: > + self.dut.send_expect("sed -i -e 's/%s=3D.*$/" % > self.compile_switch > + + "%s=3D%s/' config/common_base" % > (self.compile_switch, src_vec_model), "# ", 30) > + self.dut.skip_setup =3D False > + self.dut.build_install_dpdk(self.target) > + > def test_vxlan_ipv4_checksum_offload(self): > """ > verify vxlan packet checksum offload > -- > 1.9.3