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 F053DA00BE; Thu, 28 May 2020 14:04:43 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D18721DB9B; Thu, 28 May 2020 14:04:43 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 83B021DB97 for ; Thu, 28 May 2020 14:04:40 +0200 (CEST) IronPort-SDR: 60pDQrAQYDF9jEM8BdzNm4zmsS6P0KVqgtAREhQhA2fnfbTXuYKHvlyFpY+1bosZ8H+AoUahj+ EQJPfXd52zkA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 May 2020 05:04:39 -0700 IronPort-SDR: B/bFUi6PRxKBLAgKU+oddEJJT9/sXR4FAp9+54TOxY2EZoCLu4PcnOi49Zi/gaajcWTQyDapRh W4KlJOQHOdHg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,444,1583222400"; d="scan'208";a="291975715" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga004.fm.intel.com with ESMTP; 28 May 2020 05:04:39 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 28 May 2020 05:04:39 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 28 May 2020 05:04:38 -0700 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 28 May 2020 05:04:38 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.170) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 28 May 2020 05:04:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bgd0oHNV3A3cn9VFJGdoUF/zZxkKdMAn8VXNSPyOWEjWZuZNpTxiVblrzuRPfU+BviXFpL4eumlLi7IWX+Mqem7s33tqPTOnj8SF4kBf+jnAZP/XJsyn0LCa2ULBPDJ1hYjbZNXkXbHUGtU3sotZN/tkLpWISqP7sGg5HqehalItJmj2ny+NSRmFZUmvazP9sAvmVJ9tomkvL2kczk7Q3b7HkqECa0qdf9XPxlYu4LPYlOuu+e7Yi0Fzr5+8Ed8XirLy2S1rUEDJhfgaYpjX/cxImpqF1ssGjhar7xBXD1rJLuxZhk1zvl9Lg/0uhOw9DZrGoF8Mlp9JfzJZZz73vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0N0PSkIDxT/F7wDeaQo0KjWvhJixKzaolDarJYGWsz0=; b=jaQtvRjDEtub3NMBWWfq1R/XLA4i3Cfooo5K6anILdEJAYoe0vQMMH6QqY9ajwWpgkVc4cbz33B+lhn7eCygGPMqsIya9xSymgR/FGN6HmtfyvDByAlj8INf/0CXXshuPTQxrITpIg9xiprX6aCqBzvUzWwk1Dg2YxCC2f0RFea3HDM/5mgYcD7444uXvPaH2cBGXKMgbHM0qBbv3+ZnmOhroPidNlfEAwbSvHgWe85Qe9d3DbsGnnc12BL7Z3Os4m+B1fWy433RPQAZfCPaB8mbbLYT5QgnwFnt/RerWKnxWY/DXX/Uxnqgy6rlbSUq7RvezocPcHenVmtFBqc0Vg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0N0PSkIDxT/F7wDeaQo0KjWvhJixKzaolDarJYGWsz0=; b=KoCIVlDkA5iubYyzOTRIw8vLse8AOf2coJUM2dSN5kuoQTJu5Bv74jVsQoCcOp5/NI65U3G2UYz1n8w9C9S4lE59RUqXIKKZ6vyV64fs5Nm9j4oxuDT35Q6CAmoSjj922PLGJxLdHxlzwcDh2yOKEc7u+mhF6J3pDApbqp6Usyw= Received: from MWHPR1101MB2254.namprd11.prod.outlook.com (2603:10b6:301:58::11) by MWHPR1101MB2368.namprd11.prod.outlook.com (2603:10b6:300:7a::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.23; Thu, 28 May 2020 12:04:33 +0000 Received: from MWHPR1101MB2254.namprd11.prod.outlook.com ([fe80::f192:356f:89f:c71f]) by MWHPR1101MB2254.namprd11.prod.outlook.com ([fe80::f192:356f:89f:c71f%9]) with mapi id 15.20.3045.018; Thu, 28 May 2020 12:04:33 +0000 From: "Xiao, QimaiX" To: "dts@dpdk.org" Thread-Topic: [dts][PATCH V1]tests/TestSuite_cvl_fdir: update cvl fdir for new testplan Thread-Index: AQHWNOfHl3DZlJ3sc0KoFIafoVFh/ai9Zlpw Date: Thu, 28 May 2020 12:04:33 +0000 Message-ID: References: <1590666820-145634-1-git-send-email-qimaix.xiao@intel.com> In-Reply-To: <1590666820-145634-1-git-send-email-qimaix.xiao@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.36] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6b90058a-6992-4f05-62ef-08d802ff48eb x-ms-traffictypediagnostic: MWHPR1101MB2368: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:309; x-forefront-prvs: 0417A3FFD2 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 5+83nwLXv+vTYwTGqdoSJt4NkIsK1UFxjX/+0vB01OLF7Qa8nr2oU73oHkrlWw2JXt3wIjK88eg7S1P6upWwfSUT78wzvp10aUtDqR76klF3MO9HIYvmqJyDeon6H3jEGjjbKeNWsX9IejQ5tJpsflCfpIyV+CuAkdIBRCd2s83hrv0/bokrGc+VX3Y/sGPbLhjGI4ZzunhDDIgtU4X7F4UNHETq+tnMf0qrEN6HU1npWj1RtdZSz4X6DJkxeK9VFpyS18qWMcs8Ay6gNhiNO4yJwlKBQkuVqQXVSAxDwyYKdfzYZT1pf8ejSUdaDV0pA3dGbJ0juO4gOUCvMYKEam2McwuKqfs5HwqzN7aBo/E= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR1101MB2254.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(136003)(396003)(346002)(376002)(366004)(39860400002)(186003)(6506007)(53546011)(52536014)(7696005)(478600001)(26005)(2906002)(66556008)(66446008)(76116006)(316002)(83380400001)(64756008)(30864003)(66946007)(33656002)(66476007)(5660300002)(8676002)(71200400001)(86362001)(8936002)(15650500001)(55016002)(6916009)(9686003)(559001)(579004)(569008); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: Y8/AqOJ670ElgbnHtU1OtkDrKyk0YsbID/IvO4bFjegjDM2z0tJMt//ZZaUF7Ps9B4tliQMHC6GL97tsV1Ag2BaqBKRySYmCiBb0jbAweL0E28RqU2tI4rxMzs5s/EvmLHMsifSYgiFsCWjLsMsHkzTx36c6QNkczb+gb5stte5dMdhqnvpe9nhMguQvpgg0pCNyJCk6cZypowfVD6MPyXUXv8ohBdko7hJyrbQ7BKSn6FzCYsB+WThKzrJK0S5MuVp8nmZsiwYc472KH+BmNAb/xMCaPlvgzP0cE356Jy1tx78j+fZJMC73FiEJal3ebsRzs0JUgWx5shSUFyEwblcRIyFjDapxEgb1Iupygk/CoBw55yHsMBBDaLnrO0DGvpuTm319+GFipnpvYk5tq+iYO5VAvZYFlqqizM5gnL1zrlpBa7R+pR9bujW9cHccUsfE9cneLM22mxTEhpKiWD4UlwxdNG4p50YtiUYTADsWbEMTODsBImahw+pDR8hc x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 6b90058a-6992-4f05-62ef-08d802ff48eb X-MS-Exchange-CrossTenant-originalarrivaltime: 28 May 2020 12:04:33.3618 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: VD1VVdBMuDgzTdN6oWLUCRrIaYlNkLnRtZ0aAF8o6EORqzqXMAoUycFsylh+EHbx4ePHJxZBfL9gIH/aGWpKaA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR1101MB2368 X-OriginatorOrg: intel.com Subject: Re: [dts] [PATCH V1]tests/TestSuite_cvl_fdir: update cvl fdir for new testplan 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" Tested-by: Xiao, QimaiX Regards, Xiao Qimai > -----Original Message----- > From: Xiao, QimaiX > Sent: Thursday, May 28, 2020 7:54 PM > To: dts@dpdk.org > Cc: Xiao, QimaiX > Subject: [dts][PATCH V1]tests/TestSuite_cvl_fdir: update cvl fdir for new > testplan >=20 > *. update suite according to new version of testplan >=20 > Signed-off-by: Xiao Qimai > --- > tests/TestSuite_cvl_fdir.py | 2446 +++++++++++++++++++++++++++-------- > -------- > 1 file changed, 1568 insertions(+), 878 deletions(-) >=20 > diff --git a/tests/TestSuite_cvl_fdir.py b/tests/TestSuite_cvl_fdir.py > index a8e3ef8..aabbfd2 100644 > --- a/tests/TestSuite_cvl_fdir.py > +++ b/tests/TestSuite_cvl_fdir.py > @@ -32,6 +32,8 @@ >=20 > import re > import time > +import copy > +import os >=20 > from packet import Packet > from pmd_output import PmdOutput > @@ -45,7 +47,7 @@ MAC_IPV4_PAY =3D { > "match": [ > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.21", > proto=3D255, ttl=3D2, tos=3D4) / Raw("x" * 80)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.21", > frag=3D1, proto=3D255, ttl=3D2, tos=3D4)/Raw("x" * 80)'], > - "unmatch": [ > + "unmatched": [ > 'Ether(dst=3D"00:11:22:33:44:56")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.22", > proto=3D255, ttl=3D2, tos=3D4) / Raw("x" * 80)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.22",dst=3D= "192.168.0.21", > proto=3D255, ttl=3D2, tos=3D4) / Raw("x" * 80)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D= "192.168.1.21", > proto=3D255, ttl=3D2, tos=3D4) / Raw("x" * 80)', > @@ -57,17 +59,24 @@ MAC_IPV4_PAY =3D { >=20 > MAC_IPV4_PAY_SELECTED =3D { > "match": [ > - > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > proto=3D1) / Raw("x" * 80)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > ttl=3D2, tos=3D4) /UDP(sport=3D22,dport=3D23)/Raw("x" * 80)'], > - "unmatch": [ > - > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.22") / > Raw("x" * 80)' > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > proto=3D1)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > frag=3D1, proto=3D1)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > ttl=3D2, tos=3D4)/UDP(sport=3D22,dport=3D23)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > frag=3D1, ttl=3D2, tos=3D4)/UDP(sport=3D22,dport=3D23)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > proto=3D17, ttl=3D2, tos=3D4)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > frag=3D1, proto=3D17, ttl=3D2, tos=3D4)/Raw("x" * 80)'], > + "unmatched": [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.22", > proto=3D1)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > proto=3D6)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21")/TC > P(sport=3D22,dport=3D23)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > frag=3D1)/TCP(sport=3D22,dport=3D23)/Raw("x" * 80)' > ] > } >=20 > MAC_IPV4_UDP =3D { > "match": [ > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.21", > ttl=3D2, tos=3D4) /UDP(sport=3D22,dport=3D23)/Raw("x" * 80)'], > - "unmatch": [ > + "unmatched": [ > 'Ether(dst=3D"00:11:22:33:44:56")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.21", > ttl=3D2, tos=3D4) /UDP(sport=3D22,dport=3D23)/Raw("x" * 80)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.1.19",dst=3D= "192.168.0.21", > ttl=3D2, tos=3D4) /UDP(sport=3D22,dport=3D23)/Raw("x" * 80)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.22", > ttl=3D2, tos=3D4) /UDP(sport=3D22,dport=3D23)/Raw("x" * 80)', > @@ -81,7 +90,7 @@ MAC_IPV4_UDP =3D { > MAC_IPV4_TCP =3D { > "match": [ > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.21", > ttl=3D2, tos=3D4) /TCP(sport=3D22,dport=3D23)/Raw("x" * 80)'], > - "unmatch": [ > + "unmatched": [ > 'Ether(dst=3D"00:11:22:33:44:56")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.21", > ttl=3D2, tos=3D4) /TCP(sport=3D22,dport=3D23)/Raw("x" * 80)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.1.19",dst=3D= "192.168.0.21", > ttl=3D2, tos=3D4) /TCP(sport=3D22,dport=3D23)/Raw("x" * 80)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.22", > ttl=3D2, tos=3D4) /TCP(sport=3D22,dport=3D23)/Raw("x" * 80)', > @@ -95,7 +104,7 @@ MAC_IPV4_TCP =3D { > MAC_IPV4_SCTP =3D { > "match": [ > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.21", > ttl=3D2, tos=3D4) /SCTP(sport=3D22,dport=3D23)/Raw("x" * 80)'], > - "unmatch": [ > + "unmatched": [ > 'Ether(dst=3D"00:11:22:33:44:56")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.21", > ttl=3D2, tos=3D4) /SCTP(sport=3D22,dport=3D23)/Raw("x" * 80)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.1.19",dst=3D= "192.168.0.21", > ttl=3D2, tos=3D4) /SCTP(sport=3D22,dport=3D23)/Raw("x" * 80)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D= "192.168.0.22", > ttl=3D2, tos=3D4) /SCTP(sport=3D22,dport=3D23)/Raw("x" * 80)', > @@ -108,29 +117,33 @@ MAC_IPV4_SCTP =3D { >=20 > MAC_IPV6_PAY =3D { > "match": [ > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D1, tc=3D1, hlim=3D2)/("X"*480)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D1, tc=3D1, > hlim=3D2)/IPv6ExtHdrFragment(1000)/("X"*480)'], > - "unmatch": [ > - > 'Ether(dst=3D"00:11:22:33:44:56")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D1, tc=3D1, hlim=3D2)/("X"*480)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2022", src=3D"2001::2", nh=3D1, tc=3D1, hlim=3D2)/("X"*480)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::1", nh=3D1, tc=3D1, hlim=3D2)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D0, tc=3D1, hlim=3D2)/("X"*480)'], > + "unmatched": [ > + > 'Ether(dst=3D"00:11:22:33:44:56")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D0, tc=3D1, hlim=3D2)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2022", src=3D"2001::2", nh=3D0, tc=3D1, hlim=3D2)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::1", nh=3D0, tc=3D1, hlim=3D2)/("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D2, tc=3D1, hlim=3D2)/("X"*480)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D1, tc=3D2, hlim=3D2)/("X"*480)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D1, tc=3D1, hlim=3D5)/("X"*480)'] > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D0, tc=3D2, hlim=3D2)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D0, tc=3D1, hlim=3D5)/("X"*480)'] > } >=20 > MAC_IPV6_PAY_SELECTED =3D { > "match": [ > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D1, tc=3D1, hlim=3D2)/("X"*480)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020")/IPv6ExtHdrFragment(1000)/("X"*480)'], > - "unmatch": [ > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2021")/("X"*480)'] > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D44, tc=3D1, hlim=3D2)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020")/IPv6ExtHdrFragment(id=3D1000)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", nh=3D44)/TCP(sport=3D22,dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020")/IPv6ExtHdrFragment(id=3D1000)/TCP(sport=3D22,dport=3D23)/("X"*= 480 > )', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", nh=3D6)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020")/TCP(sport=3D22,dport=3D23)/("X"*480)'], > + "unmatched": > ['Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:1= 111: > 3900:2021", nh=3D44)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020")/UDP(sport=3D22,dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", nh=3D17)/("X"*480)'] > } >=20 > MAC_IPV6_UDP =3D { > "match": [ >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2",tc=3D1, hlim=3D2)/UDP(sport=3D22,dport=3D23)/(= "X"*480)'], > - "unmatch": [ > + "unmatched": [ >=20 > 'Ether(dst=3D"00:11:22:33:44:56")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2",tc=3D1, hlim=3D2)/UDP(sport=3D22,dport=3D23)/(= "X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2021", src=3D"2001::2",tc=3D1, hlim=3D2)/UDP(sport=3D22,dport=3D23)/(= "X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2002::2",tc=3D1, hlim=3D2)/UDP(sport=3D22,dport=3D23)/(= "X"*480)', > @@ -144,7 +157,7 @@ MAC_IPV6_UDP =3D { > MAC_IPV6_TCP =3D { > "match": [ >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2",tc=3D1, hlim=3D2)/TCP(sport=3D22,dport=3D23)/(= "X"*480)'], > - "unmatch": [ > + "unmatched": [ >=20 > 'Ether(dst=3D"00:11:22:33:44:56")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2",tc=3D1, hlim=3D2)/TCP(sport=3D22,dport=3D23)/(= "X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2021", src=3D"2001::2",tc=3D1, hlim=3D2)/TCP(sport=3D22,dport=3D23)/(= "X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2002::2",tc=3D1, hlim=3D2)/TCP(sport=3D22,dport=3D23)/(= "X"*480)', > @@ -158,7 +171,7 @@ MAC_IPV6_TCP =3D { > MAC_IPV6_SCTP =3D { > "match": [ >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2",tc=3D1, hlim=3D2)/SCTP(sport=3D22,dport=3D23)/= ("X"*480)'], > - "unmatch": [ > + "unmatched": [ >=20 > 'Ether(dst=3D"00:11:22:33:44:56")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2",tc=3D1, hlim=3D2)/SCTP(sport=3D22,dport=3D23)/= ("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2021", src=3D"2001::2",tc=3D1, hlim=3D2)/SCTP(sport=3D22,dport=3D23)/= ("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2002::2",tc=3D1, hlim=3D2)/SCTP(sport=3D22,dport=3D23)/= ("X"*480)', > @@ -178,7 +191,7 @@ > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY =3D { > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(sport=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", dst=3D"192.168.= 0.21", > frag=3D1)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=3D2)/Ether(dst=3D"= 00:11: > 22:33:44:55")/IP(dst=3D"192.168.0.21", src=3D"192.168.0.20")/("X"*480)' > ], > - "unmatch": [ > + "unmatched": [ > 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.1.15")/UDP(s= port=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", dst=3D"192.168.= 0.22")', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.1.15")/UDP(s= port=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.30", dst=3D"192.168.= 0.21")', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN()/IP(dst=3D"192.168.0.= 21", > src=3D"192.168.0.20")/("X"*480)'] > @@ -190,7 +203,7 @@ > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP =3D { > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(sport=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(sport=3D22,dport=3D23)/("X"*480)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.1.15")/UDP(s= port=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/Ether()/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(sport=3D22,dport=3D23)/("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=3D2)/Ether(dst=3D"= 00:11: > 22:33:44:55")/IP(dst=3D"192.168.0.21", > src=3D"192.168.0.20")/UDP(sport=3D22,dport=3D23)/("X"*480)'], > - "unmatch": [ > + "unmatched": [ > 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.1.15")/UDP(s= port=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.22")/UDP(sport=3D22,dport=3D23)/("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=3D2)/Ether(dst=3D"= 00:11: > 22:33:44:55")/IP(src=3D"192.168.0.21", > dst=3D"192.168.0.23")/UDP(sport=3D22,dport=3D23)/("X"*480)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(sport=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(sport=3D21,dport=3D23)/("X"*480)', > @@ -206,7 +219,7 @@ > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP =3D { > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(sport=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/TCP(sport=3D22,dport=3D23)/("X"*480)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.1.15")/UDP(s= port=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/Ether()/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/TCP(sport=3D22,dport=3D23)/("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=3D2)/Ether(dst=3D"= 00:11: > 22:33:44:55")/IP(dst=3D"192.168.0.21", > src=3D"192.168.0.20")/TCP(sport=3D22,dport=3D23)/("X"*480)'], > - "unmatch": [ > + "unmatched": [ > 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.1.15")/UDP(s= port=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.22")/TCP(sport=3D22,dport=3D23)/("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=3D2)/Ether(dst=3D"= 00:11: > 22:33:44:55")/IP(dst=3D"192.168.0.21", > src=3D"192.168.0.23")/TCP(sport=3D22,dport=3D23)/("X"*480)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(sport=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/TCP(sport=3D21,dport=3D23)/("X"*480)', > @@ -221,7 +234,7 @@ > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP =3D { > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(sport=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/SCTP(sport=3D22,dport=3D23)/("X"*480)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.1.15")/UDP(s= port=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/Ether()/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/SCTP(sport=3D22,dport=3D23)/("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=3D2)/Ether(dst=3D"= 00:11: > 22:33:44:55")/IP(dst=3D"192.168.0.21", > src=3D"192.168.0.20")/SCTP(sport=3D22,dport=3D23)/("X"*480)'], > - "unmatch": [ > + "unmatched": [ > 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.1.15")/UDP(s= port=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.22")/SCTP(sport=3D22,dport=3D23)/("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=3D2)/Ether(dst=3D"= 00:11: > 22:33:44:55")/IP(dst=3D"192.168.0.21", > src=3D"192.168.0.23")/SCTP(sport=3D22,dport=3D23)/("X"*480)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(sport=3D200, > dport=3D4790)/VXLAN(flags=3D0xc)/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/SCTP(sport=3D21,dport=3D23)/("X"*480)', > @@ -230,657 +243,1006 @@ > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP =3D { >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN()/IP(dst=3D"192.168.0.= 21", > src=3D"192.168.0.20")/SCTP(sport=3D22,dport=3D23)/("X"*480)'] > } >=20 > -MAC_IPV4_GTPU_IPV4_PAY =3D { > +MAC_IPV4_GTPU_EH =3D { > + "match": [ > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(frag=3D1)/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/UDP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP( dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/TCP(sport=3D22, dport=3D23)/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/ICMP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6()/IPv6ExtHdrFragment(id=3D1000)/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6()/UDP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP( dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6()/TCP(sport=3D22, dport=3D23)/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6()/ICMP()/Raw("x"*20)'], > + "unmatched": [ > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/SCTP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6()/SCTP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x35)/IP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/Raw("x"*20)'] > +} > + > +MAC_IPV4_GTPU =3D { > "match": [ > - 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/Raw("x"*20)', > - 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(frag=3D1)/Raw("x"*20)', > - 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/UDP()/Raw("x"*20)', > - 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP( dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/TCP(sport=3D22, dport=3D23)/Raw("x"*20)', > - 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/ICMP()/Raw("x"*20)'], > - "unmatch": [ > - 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/SCTP()/Raw("x"*20)', > - 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/Raw("x"*20)', > - 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x35)/IP()/Raw("x"*20)', > - 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6()/Raw("x"*20)'] > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IP(frag=3D1)/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IP()/UDP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP( dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IP()/TCP(sport=3D22, dport=3D23)/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IP()/ICMP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IPv6()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IPv6()/IPv6ExtHdrFragment(id=3D1000)/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IPv6()/UDP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP( dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IPv6()/TCP(sport=3D22, dport=3D23)/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IPv6()/ICMP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x35)/IP()/Raw("x"*20)'], > + "unmatched": [ > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IP()/SCTP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IPv6()/SCTP()/Raw("x"*20)', > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x1234567)/IP()/Raw("x"*20)'] > } >=20 > tv_mac_ipv4_pay_queue_index =3D { > "name": "test_mac_ipv4_pay_queue_index", > "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end = actions > queue index 1 / end", > "scapy_str": MAC_IPV4_PAY, > - "check_func": rfc.check_queue, > + "check_func": rfc.check_mark, > "check_param": {"port_id": 0, "queue": 1} > } >=20 > -tv_mac_ipv4_pay_selected_inputset_queue_index =3D { > - "name": "test_mac_ipv4_pay_selected_inputset_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.2= 1 / end > actions queue index 1 / end", > - "scapy_str": MAC_IPV4_PAY_SELECTED, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_pay_rss_queues =3D { > + "name": "test_mac_ipv4_pay_rss_queues", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end = actions rss > queues 2 3 end / end", > + "scapy_str": MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": [2, 3]} > } >=20 > -tv_mac_ipv4_udp_queue_index =3D { > - "name": "test_mac_ipv4_upd_queue_index", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions queue index 1 / end", > - "scapy_str": MAC_IPV4_UDP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_pay_passthru =3D { > + "name": "test_mac_ipv4_pay_passthru", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end = actions > passthru / end", > + "scapy_str": MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "rss": True} > } >=20 > -tv_mac_ipv4_tcp_queue_index =3D { > - "name": "test_mac_ipv4_tcp_queue_index", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions queue index 63 / end", > - "scapy_str": MAC_IPV4_TCP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 63} > +tv_mac_ipv4_pay_drop =3D { > + "name": "test_mac_ipv4_pay_drop", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end = actions drop > / end", > + "scapy_str": MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv4_sctp_queue_index =3D { > - "name": "test_mac_ipv4_sctp_queue_index", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 ds= t is 23 tag is 1 > / end actions queue index 2 / end", > - "scapy_str": MAC_IPV4_SCTP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 2} > +tv_mac_ipv4_pay_mark_rss =3D { > + "name": "test_mac_ipv4_pay_mark_rss", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end = actions mark > / rss / end", > + "scapy_str": MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > } >=20 > -tv_mac_ipv6_pay_queue_index =3D { > - "name": "test_mac_ipv6_pay_queue_index", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop = is 2 > tc is 1 / end actions queue index 1 / end", > - "scapy_str": MAC_IPV6_PAY, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_pay_mark =3D { > + "name": "test_mac_ipv4_pay_mark", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end = actions mark > id 1 / end", > + "scapy_str": MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv6_pay_selected_inputset_queue_index =3D { > - "name": "test_mac_ipv6_pay_selected_inputset_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 / end actions queue index 1 / > end", > - "scapy_str": MAC_IPV6_PAY_SELECTED, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +vectors_ipv4_pay =3D [tv_mac_ipv4_pay_queue_index, > tv_mac_ipv4_pay_rss_queues, tv_mac_ipv4_pay_passthru, > + tv_mac_ipv4_pay_drop, tv_mac_ipv4_pay_mark_rss, > tv_mac_ipv4_pay_mark] > + > +tv_mac_ipv4_udp_queue_index =3D { > + "name": "test_mac_ipv4_udp_queue_index", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions queue index 63 / mark id 0 / end", > + "scapy_str": MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 63, "mark_id": 0} > } >=20 > -tv_mac_ipv6_udp_queue_index =3D { > - "name": "test_mac_ipv6_udp_queue_index", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > udp src is 22 dst is 23 / end actions queue index 1 / end", > - "scapy_str": MAC_IPV6_UDP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_udp_rss_queues =3D { > + "name": "test_mac_ipv4_udp_rss_queues", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions rss queues 0 1 2 3 end / mark id 4294967294 / end", > + "scapy_str": MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": [0, 1, 2, 3], "mark_id": 4294= 967294} > } >=20 > -tv_mac_ipv6_tcp_queue_index =3D { > - "name": "test_mac_ipv6_tcp_queue_index", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / tcp > src is 22 dst is 23 / end actions queue index 1 / end", > - "scapy_str": MAC_IPV6_TCP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_udp_passthru =3D { > + "name": "test_mac_ipv4_udp_passthru", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions passthru / mark id 1 / end", > + "scapy_str": MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv6_sctp_queue_index =3D { > - "name": "test_mac_ipv6_sctp_queue_index", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > sctp src is 22 dst is 23 / end actions queue index 1 / end", > - "scapy_str": MAC_IPV6_SCTP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_udp_drop =3D { > + "name": "test_mac_ipv4_udp_drop", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions drop / end", > + "scapy_str": MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv4_tun_ipv4_pay_queue_index =3D { > - "name": "test_mac_ipv4_tun_ipv4_pay_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_udp_mark_rss =3D { > + "name": "test_mac_ipv4_udp_mark_rss", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions mark id 2 / rss / end", > + "scapy_str": MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 2, "rss": True} > } >=20 > -tv_mac_ipv4_tun_ipv4_udp_queue_index =3D { > - "name": "test_mac_ipv4_tun_ipv4_udp_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = queue > index 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_udp_mark =3D { > + "name": "test_mac_ipv4_udp_mark", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions mark id 1 / end", > + "scapy_str": MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1} > } >=20 > -tv_mac_ipv4_tun_ipv4_tcp_queue_index =3D { > - "name": "test_mac_ipv4_tun_ipv4_tcp_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions = queue > index 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +vectors_ipv4_udp =3D [tv_mac_ipv4_udp_queue_index, > tv_mac_ipv4_udp_rss_queues, tv_mac_ipv4_udp_passthru, > + tv_mac_ipv4_udp_drop, tv_mac_ipv4_udp_mark_rss, > tv_mac_ipv4_udp_mark] > + > +tv_mac_ipv4_tcp_queue_index =3D { > + "name": "test_mac_ipv4_tcp_queue_index", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions queue index 63 / mark id 0 / end", > + "scapy_str": MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 63, "mark_id": 0} > } >=20 > -tv_mac_ipv4_tun_ipv4_sctp_queue_index =3D { > - "name": "test_mac_ipv4_tun_ipv4_sctp_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= queue > index 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_tcp_rss_queues =3D { > + "name": "test_mac_ipv4_tcp_rss_queues", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions rss queues 0 1 2 3 end / mark id 4294967294 / end", > + "scapy_str": MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": [0, 1, 2, 3], "mark_id": 4294= 967294} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_pay_queue_index =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_pay_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end= ", > - "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_tcp_passthru =3D { > + "name": "test_mac_ipv4_tcp_passthru", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions passthru / mark id 1 / end", > + "scapy_str": MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_udp_queue_index =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_udp_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions > queue index 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_tcp_drop =3D { > + "name": "test_mac_ipv4_tcp_drop", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions drop / end", > + "scapy_str": MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_tcp_queue_index =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_tcp_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions > queue index 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_tcp_mark_rss =3D { > + "name": "test_mac_ipv4_tcp_mark_rss", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions mark id 2 / rss / end", > + "scapy_str": MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 2, "rss": True} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_sctp_queue_index =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_sctp_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions > queue index 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_tcp_mark =3D { > + "name": "test_mac_ipv4_tcp_mark", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions mark id 1 / end", > + "scapy_str": MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1} > } >=20 > -tv_mac_ipv4_pay_drop =3D { > - "name": "test_mac_ipv4_pay_drop", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end = actions drop > / end", > - "scapy_str": MAC_IPV4_PAY, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > +vectors_ipv4_tcp =3D [tv_mac_ipv4_tcp_queue_index, > tv_mac_ipv4_tcp_rss_queues, tv_mac_ipv4_tcp_passthru, > + tv_mac_ipv4_tcp_drop, tv_mac_ipv4_tcp_mark_rss, > tv_mac_ipv4_tcp_mark] > + > +tv_mac_ipv4_sctp_queue_index =3D { > + "name": "test_mac_ipv4_sctp_queue_index", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 ds= t is 23 / end > actions queue index 63 / mark id 0 / end", > + "scapy_str": MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 63, "mark_id": 0} > } >=20 > -tv_mac_ipv4_udp_drop =3D { > - "name": "test_mac_ipv4_udp_drop", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions drop / end", > - "scapy_str": MAC_IPV4_UDP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > +tv_mac_ipv4_sctp_rss_queues =3D { > + "name": "test_mac_ipv4_sctp_rss_queues", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 ds= t is 23 / end > actions rss queues 0 1 2 3 end / mark id 4294967294 / end", > + "scapy_str": MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": [0, 1, 2, 3], "mark_id": 4294= 967294} > } >=20 > -tv_mac_ipv4_tcp_drop =3D { > - "name": "test_mac_ipv4_tcp_drop", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions drop / end", > - "scapy_str": MAC_IPV4_TCP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > +tv_mac_ipv4_sctp_passthru =3D { > + "name": "test_mac_ipv4_sctp_passthru", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 ds= t is 23 / end > actions passthru / mark id 1 / end", > + "scapy_str": MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > tv_mac_ipv4_sctp_drop =3D { > "name": "test_mac_ipv4_sctp_drop", > "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 ds= t is 23 / end > actions drop / end", > "scapy_str": MAC_IPV4_SCTP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > +} > + > +tv_mac_ipv4_sctp_mark_rss =3D { > + "name": "test_mac_ipv4_sctp_mark_rss", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 ds= t is 23 / end > actions mark id 2 / rss / end", > + "scapy_str": MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 2, "rss": True} > +} > + > +tv_mac_ipv4_sctp_mark =3D { > + "name": "test_mac_ipv4_sctp_mark", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 ds= t is 23 / end > actions mark id 1 / end", > + "scapy_str": MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1} > +} > + > +vectors_ipv4_sctp =3D [tv_mac_ipv4_sctp_queue_index, > tv_mac_ipv4_sctp_rss_queues, tv_mac_ipv4_sctp_passthru, > + tv_mac_ipv4_sctp_drop, tv_mac_ipv4_sctp_mark_rss, > tv_mac_ipv4_sctp_mark] > + > +tv_mac_ipv6_pay_queue_index =3D { > + "name": "test_mac_ipv6_pay_queue_index", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop = is 2 > tc is 1 / end actions queue index 1 / mark / end", > + "scapy_str": MAC_IPV6_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 1, "mark_id": 0} > +} > + > +tv_mac_ipv6_pay_rss_queues =3D { > + "name": "test_mac_ipv6_pay_rss_queues", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop = is 2 > tc is 1 / end actions rss queues 56 57 58 59 60 61 62 63 end / mark / end= ", > + "scapy_str": MAC_IPV6_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": list(range(56, 64)), "mark_id= ": 0} > +} > + > +tv_mac_ipv6_pay_passthru =3D { > + "name": "test_mac_ipv6_pay_passthru", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop = is 2 > tc is 1 / end actions passthru / mark / end", > + "scapy_str": MAC_IPV6_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "rss": True, "mark_id": 0} > } >=20 > tv_mac_ipv6_pay_drop =3D { > "name": "test_mac_ipv6_pay_drop", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop = is 2 > tc is 1 / end actions drop / end", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop = is 2 > tc is 1 / end actions drop / end", > + "scapy_str": MAC_IPV6_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > +} > + > +tv_mac_ipv6_pay_mark_rss =3D { > + "name": "test_mac_ipv6_pay_mark_rss", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop = is 2 > tc is 1 / end actions mark / rss / end", > + "scapy_str": MAC_IPV6_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +tv_mac_ipv6_pay_mark =3D { > + "name": "test_mac_ipv6_pay_mark", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 0 hop = is 2 > tc is 1 / end actions mark / end", > "scapy_str": MAC_IPV6_PAY, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +vectors_ipv6_pay =3D [tv_mac_ipv6_pay_queue_index, > tv_mac_ipv6_pay_rss_queues, tv_mac_ipv6_pay_passthru, > + tv_mac_ipv6_pay_drop, tv_mac_ipv6_pay_mark_rss, > tv_mac_ipv6_pay_mark] > + > +tv_mac_ipv6_udp_queue_index =3D { > + "name": "test_mac_ipv6_udp_queue_index", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > udp src is 22 dst is 23 / end actions queue index 1 / mark / end", > + "scapy_str": MAC_IPV6_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 1, "mark_id": 0} > +} > + > +tv_mac_ipv6_udp_rss_queues =3D { > + "name": "test_mac_ipv6_udp_rss_queues", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > udp src is 22 dst is 23 / end actions rss / end", > + "scapy_str": MAC_IPV6_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "rss": True} > +} > + > +tv_mac_ipv6_udp_passthru =3D { > + "name": "test_mac_ipv6_udp_passthru", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > udp src is 22 dst is 23 / end actions passthru / mark / end", > + "scapy_str": MAC_IPV6_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > } >=20 > tv_mac_ipv6_udp_drop =3D { > "name": "test_mac_ipv6_udp_drop", > "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > udp src is 22 dst is 23 / end actions drop / end", > "scapy_str": MAC_IPV6_UDP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > } > + > +tv_mac_ipv6_udp_mark_rss =3D { > + "name": "test_mac_ipv6_udp_mark_rss", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > udp src is 22 dst is 23 / end actions mark / rss / end", > + "scapy_str": MAC_IPV6_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +tv_mac_ipv6_udp_mark =3D { > + "name": "test_mac_ipv6_udp_mark", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > udp src is 22 dst is 23 / end actions mark / end", > + "scapy_str": MAC_IPV6_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +vectors_ipv6_udp =3D [tv_mac_ipv6_udp_queue_index, > tv_mac_ipv6_udp_rss_queues, tv_mac_ipv6_udp_passthru, > + tv_mac_ipv6_udp_drop, tv_mac_ipv6_udp_mark_rss, > tv_mac_ipv6_udp_mark] > + > +tv_mac_ipv6_tcp_queue_index =3D { > + "name": "test_mac_ipv6_tcp_queue_index", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / tcp > src is 22 dst is 23 / end actions queue index 1 / mark / end", > + "scapy_str": MAC_IPV6_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 1, "mark_id": 0} > +} > + > +tv_mac_ipv6_tcp_rss_queues =3D { > + "name": "test_mac_ipv6_tcp_rss_queues", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / tcp > src is 22 dst is 23 / end actions rss / end", > + "scapy_str": MAC_IPV6_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "rss": True} > +} > + > +tv_mac_ipv6_tcp_passthru =3D { > + "name": "test_mac_ipv6_tcp_passthru", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / tcp > src is 22 dst is 23 / end actions passthru / mark / end", > + "scapy_str": MAC_IPV6_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > tv_mac_ipv6_tcp_drop =3D { > "name": "test_mac_ipv6_tcp_drop", > "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / tcp > src is 22 dst is 23 / end actions drop / end", > "scapy_str": MAC_IPV6_TCP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > +} > + > +tv_mac_ipv6_tcp_mark_rss =3D { > + "name": "test_mac_ipv6_tcp_mark_rss", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / tcp > src is 22 dst is 23 / end actions mark / rss / end", > + "scapy_str": MAC_IPV6_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +tv_mac_ipv6_tcp_mark =3D { > + "name": "test_mac_ipv6_tcp_mark", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / tcp > src is 22 dst is 23 / end actions mark / end", > + "scapy_str": MAC_IPV6_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +vectors_ipv6_tcp =3D [tv_mac_ipv6_tcp_queue_index, > tv_mac_ipv6_tcp_rss_queues, tv_mac_ipv6_tcp_passthru, > + tv_mac_ipv6_tcp_drop, tv_mac_ipv6_tcp_mark_rss, > tv_mac_ipv6_tcp_mark] > + > +tv_mac_ipv6_sctp_queue_index =3D { > + "name": "test_mac_ipv6_sctp_queue_index", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > sctp src is 22 dst is 23 / end actions queue index 1 / mark / end", > + "scapy_str": MAC_IPV6_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 1, "mark_id": 0} > +} > + > +tv_mac_ipv6_sctp_rss_queues =3D { > + "name": "test_mac_ipv6_sctp_rss_queues", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > sctp src is 22 dst is 23 / end actions rss / end", > + "scapy_str": MAC_IPV6_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "rss": True} > +} > + > +tv_mac_ipv6_sctp_passthru =3D { > + "name": "test_mac_ipv6_sctp_passthru", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > sctp src is 22 dst is 23 / end actions passthru / mark / end", > + "scapy_str": MAC_IPV6_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > } >=20 > tv_mac_ipv6_sctp_drop =3D { > "name": "test_mac_ipv6_sctp_drop", > "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > sctp src is 22 dst is 23 / end actions drop / end", > "scapy_str": MAC_IPV6_SCTP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > +} > + > +tv_mac_ipv6_sctp_mark_rss =3D { > + "name": "test_mac_ipv6_sctp_mark_rss", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > sctp src is 22 dst is 23 / end actions mark / rss / end", > + "scapy_str": MAC_IPV6_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +tv_mac_ipv6_sctp_mark =3D { > + "name": "test_mac_ipv6_sctp_mark", > + "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > sctp src is 22 dst is 23 / end actions mark / end", > + "scapy_str": MAC_IPV6_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +vectors_ipv6_sctp =3D [tv_mac_ipv6_sctp_queue_index, > tv_mac_ipv6_sctp_rss_queues, tv_mac_ipv6_sctp_passthru, > + tv_mac_ipv6_sctp_drop, tv_mac_ipv6_sctp_mark_rss, > tv_mac_ipv6_sctp_mark] > + > +tv_mac_ipv4_tun_ipv4_pay_queue_index =3D { > + "name": "test_mac_ipv4_tun_ipv4_pay_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 1} > +} > + > +tv_mac_ipv4_tun_ipv4_pay_rss_queues =3D { > + "name": "test_mac_ipv4_tun_ipv4_pay_rss_queues", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 9 10 11 12 13 1= 4 15 16 > 17 18 19 20 21 22 23 24 end / mark / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": list(range(9, 25)), "mark_id"= : 0} > +} > + > +tv_mac_ipv4_tun_ipv4_pay_passthru =3D { > + "name": "test_mac_ipv4_tun_ipv4_pay_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions passthru / mark / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > } >=20 > tv_mac_ipv4_tun_ipv4_pay_drop =3D { > "name": "test_mac_ipv4_tun_ipv4_pay_drop", > "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions drop / end", > "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > +} > + > +tv_mac_ipv4_tun_ipv4_pay_mark_rss =3D { > + "name": "test_mac_ipv4_tun_ipv4_pay_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +tv_mac_ipv4_tun_ipv4_pay_mark =3D { > + "name": "test_mac_ipv4_tun_ipv4_pay_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions mark / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} > + > +vectors_ipv4_tun_ipv4_pay =3D [tv_mac_ipv4_tun_ipv4_pay_queue_index, > tv_mac_ipv4_tun_ipv4_pay_rss_queues, > + tv_mac_ipv4_tun_ipv4_pay_passthru, > tv_mac_ipv4_tun_ipv4_pay_drop, > + tv_mac_ipv4_tun_ipv4_pay_mark_rss, > tv_mac_ipv4_tun_ipv4_pay_mark] > + > +tv_mac_ipv4_tun_ipv4_udp_queue_index =3D { > + "name": "test_mac_ipv4_tun_ipv4_udp_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = queue > index 1 / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 1, "mark_id": 1} > +} > + > +tv_mac_ipv4_tun_ipv4_udp_rss_queues =3D { > + "name": "test_mac_ipv4_tun_ipv4_udp_rss_queues", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = rss > queues 38 39 40 41 end / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": list(range(38, 42)), "mark_id= ": 1} > +} > + > +tv_mac_ipv4_tun_ipv4_udp_passthru =3D { > + "name": "test_mac_ipv4_tun_ipv4_udp_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = passthru / > mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > tv_mac_ipv4_tun_ipv4_udp_drop =3D { > "name": "test_mac_ipv4_tun_ipv4_udp_drop", > "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = drop / > end", > "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > +} > + > +tv_mac_ipv4_tun_ipv4_udp_mark_rss =3D { > + "name": "test_mac_ipv4_tun_ipv4_udp_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = mark id 1 > / rss / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > +} > + > +tv_mac_ipv4_tun_ipv4_udp_mark =3D { > + "name": "test_mac_ipv4_tun_ipv4_udp_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = mark id 1 > / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > +} > + > +vectors_ipv4_tun_ipv4_udp =3D [tv_mac_ipv4_tun_ipv4_udp_queue_index, > tv_mac_ipv4_tun_ipv4_udp_rss_queues, > + tv_mac_ipv4_tun_ipv4_udp_passthru, > tv_mac_ipv4_tun_ipv4_udp_drop, > + tv_mac_ipv4_tun_ipv4_udp_mark_rss, > tv_mac_ipv4_tun_ipv4_udp_mark] > + > +tv_mac_ipv4_tun_ipv4_tcp_queue_index =3D { > + "name": "test_mac_ipv4_tun_ipv4_tcp_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions = queue > index 1 / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 1, "mark_id": 1} > +} > + > +tv_mac_ipv4_tun_ipv4_tcp_rss_queues =3D { > + "name": "test_mac_ipv4_tun_ipv4_tcp_rss_queues", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions = rss queues > 38 39 40 41 end / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": list(range(38, 42)), "mark_id= ": 1} > +} > + > +tv_mac_ipv4_tun_ipv4_tcp_passthru =3D { > + "name": "test_mac_ipv4_tun_ipv4_tcp_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions = passthru / > mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > tv_mac_ipv4_tun_ipv4_tcp_drop =3D { > "name": "test_mac_ipv4_tun_ipv4_tcp_drop", > "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions = drop / > end", > "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv4_tun_ipv4_sctp_drop =3D { > - "name": "test_mac_ipv4_tun_ipv4_sctp_drop", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= drop / > end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > +tv_mac_ipv4_tun_ipv4_tcp_mark_rss =3D { > + "name": "test_mac_ipv4_tun_ipv4_tcp_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions = mark id 1 / > rss / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_pay_drop =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_pay_drop", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > +tv_mac_ipv4_tun_ipv4_tcp_mark =3D { > + "name": "test_mac_ipv4_tun_ipv4_tcp_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions = mark id 1 / > end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_udp_drop =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_udp_drop", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions drop > / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > +vectors_ipv4_tun_ipv4_tcp =3D [tv_mac_ipv4_tun_ipv4_tcp_queue_index, > tv_mac_ipv4_tun_ipv4_tcp_rss_queues, > + tv_mac_ipv4_tun_ipv4_tcp_passthru, > tv_mac_ipv4_tun_ipv4_tcp_drop, > + tv_mac_ipv4_tun_ipv4_tcp_mark_rss, > tv_mac_ipv4_tun_ipv4_tcp_mark] > + > +tv_mac_ipv4_tun_ipv4_sctp_queue_index =3D { > + "name": "test_mac_ipv4_tun_ipv4_sctp_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= queue > index 1 / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 1, "mark_id": 1} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_tcp_drop =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_tcp_drop", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions drop > / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > +tv_mac_ipv4_tun_ipv4_sctp_rss_queues =3D { > + "name": "test_mac_ipv4_tun_ipv4_sctp_rss_queues", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= rss > queues 38 39 40 41 end / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": list(range(38, 42)), "mark_id= ": 1} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_sctp_drop =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_sctp_drop", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions drop > / end", > +tv_mac_ipv4_tun_ipv4_sctp_passthru =3D { > + "name": "test_mac_ipv4_tun_ipv4_sctp_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= passthru > / mark id 1 / end", > "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_pay_queue_group =3D { > - "name": "test_mac_ipv4_pay_queue_group", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end = actions rss > queues 0 1 end / end", > - "scapy_str": MAC_IPV4_PAY, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [0, 1]} > +tv_mac_ipv4_tun_ipv4_sctp_drop =3D { > + "name": "test_mac_ipv4_tun_ipv4_sctp_drop", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= drop / > end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv4_udp_queue_group =3D { > - "name": "test_mac_ipv4_udp_queue_group", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions rss queues 1 2 3 4 end / end", > - "scapy_str": MAC_IPV4_UDP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2, 3, 4]} > +tv_mac_ipv4_tun_ipv4_sctp_mark_rss =3D { > + "name": "test_mac_ipv4_tun_ipv4_sctp_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= mark id 1 > / rss / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_tcp_queue_group =3D { > - "name": "test_mac_ipv4_tcp_queue_group", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions rss queues 56 57 58 59 60 61 62 63 end / end", > - "scapy_str": MAC_IPV4_TCP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": list(range(56, 64))} > +tv_mac_ipv4_tun_ipv4_sctp_mark =3D { > + "name": "test_mac_ipv4_tun_ipv4_sctp_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= mark id 1 > / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_sctp_queue_group =3D { > - "name": "test_mac_ipv4_sctp_queue_group", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 ds= t is 23 tag is 1 > / end actions rss queues 0 1 2 3 end / end", > - "scapy_str": MAC_IPV4_SCTP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": list(range(4))} > +vectors_ipv4_tun_ipv4_sctp =3D [tv_mac_ipv4_tun_ipv4_sctp_queue_index, > tv_mac_ipv4_tun_ipv4_sctp_rss_queues, > + tv_mac_ipv4_tun_ipv4_sctp_passthru, > tv_mac_ipv4_tun_ipv4_sctp_drop, > + tv_mac_ipv4_tun_ipv4_sctp_mark_rss, > tv_mac_ipv4_tun_ipv4_sctp_mark] > + > +tv_mac_ipv4_tun_mac_ipv4_pay_queue_index =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_pay_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 0 / end= ", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 0} > } >=20 > -tv_mac_ipv6_pay_queue_group =3D { > - "name": "test_mac_ipv6_pay_queue_group", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop = is 2 > tc is 1 / end actions rss queues 1 2 end / end", > - "scapy_str": MAC_IPV6_PAY, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > +tv_mac_ipv4_tun_mac_ipv4_pay_rss_queues =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_pay_rss_queues", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 0 1 end = / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": [0, 1]} > } >=20 > -tv_mac_ipv6_udp_queue_group =3D { > - "name": "test_mac_ipv6_udp_queue_group", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > udp src is 22 dst is 23 / end actions rss queues 1 2 end / end", > - "scapy_str": MAC_IPV6_UDP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > +tv_mac_ipv4_tun_mac_ipv4_pay_passthru =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_pay_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions passthru / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "rss": True} > } >=20 > -tv_mac_ipv6_tcp_queue_group =3D { > - "name": "test_mac_ipv6_tcp_queue_group", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / tcp > src is 22 dst is 23 / end actions rss queues 1 2 end / end", > - "scapy_str": MAC_IPV6_TCP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > +tv_mac_ipv4_tun_mac_ipv4_pay_drop =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_pay_drop", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions drop / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv6_sctp_queue_group =3D { > - "name": "test_mac_ipv6_sctp_queue_group", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > sctp src is 22 dst is 23 / end actions rss queues 1 2 end / end", > - "scapy_str": MAC_IPV6_SCTP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > +tv_mac_ipv4_tun_mac_ipv4_pay_mark_rss =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_pay_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / rss / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > } >=20 > -tv_mac_ipv4_tun_ipv4_pay_queue_group =3D { > - "name": "test_mac_ipv4_tun_ipv4_pay_queue_group", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 9 10 11 12 13 1= 4 15 16 > 17 18 19 20 21 22 23 24 end / end", > +tv_mac_ipv4_tun_mac_ipv4_pay_mark =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_pay_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions mark / end", > "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": list(range(9, 25))} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "rss": True, "mark_id": 0} > +} > + > +vectors_mac_ipv4_tun_mac_ipv4_pay =3D > [tv_mac_ipv4_tun_mac_ipv4_pay_queue_index, > tv_mac_ipv4_tun_mac_ipv4_pay_rss_queues, > + tv_mac_ipv4_tun_mac_ipv4_pay_passth= ru, > tv_mac_ipv4_tun_mac_ipv4_pay_drop, > + tv_mac_ipv4_tun_mac_ipv4_pay_mark_r= ss, > tv_mac_ipv4_tun_mac_ipv4_pay_mark] > + > +tv_mac_ipv4_tun_mac_ipv4_udp_queue_index =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_udp_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions > queue index 15 / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 15, "mark_id": 1} > } >=20 > -tv_mac_ipv4_tun_ipv4_udp_queue_group =3D { > - "name": "test_mac_ipv4_tun_ipv4_udp_queue_group", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = rss > queues 38 39 40 41 end / end", > +tv_mac_ipv4_tun_mac_ipv4_udp_rss_queues =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_udp_rss_queues", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions rss > queues 0 1 2 3 end / mark id 1 / end", > "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [38, 39, 40, 41]} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": [0, 1, 2, 3], "mark_id": 1} > } >=20 > -tv_mac_ipv4_tun_ipv4_tcp_queue_group =3D { > - "name": "test_mac_ipv4_tun_ipv4_tcp_queue_group", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions = rss queues > 1 2 end / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > +tv_mac_ipv4_tun_mac_ipv4_udp_passthru =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_udp_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions > passthru / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_tun_ipv4_sctp_queue_group =3D { > - "name": "test_mac_ipv4_tun_ipv4_sctp_queue_group", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= rss > queues 1 2 end / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > +tv_mac_ipv4_tun_mac_ipv4_udp_drop =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_udp_drop", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions drop > / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_pay_queue_group =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_pay_queue_group", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions rss queues 1 2 end = / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > +tv_mac_ipv4_tun_mac_ipv4_udp_mark_rss =3D { > + "name": "tv_mac_ipv4_tun_mac_ipv4_udp_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions rss / > mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_udp_queue_group =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_udp_queue_group", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions rss > queues 1 2 end / end", > +tv_mac_ipv4_tun_mac_ipv4_udp_mark =3D { > + "name": "tv_mac_ipv4_tun_mac_ipv4_udp_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions > mark id 1 / end", > "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_tcp_queue_group =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_tcp_queue_group", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions rss > queues 1 2 end / end", > +vectors_mac_ipv4_tun_mac_ipv4_udp =3D > [tv_mac_ipv4_tun_mac_ipv4_udp_queue_index, > tv_mac_ipv4_tun_mac_ipv4_udp_rss_queues, > + tv_mac_ipv4_tun_mac_ipv4_udp_passth= ru, > tv_mac_ipv4_tun_mac_ipv4_udp_drop, > + tv_mac_ipv4_tun_mac_ipv4_udp_mark_r= ss, > tv_mac_ipv4_tun_mac_ipv4_udp_mark] > + > +tv_mac_ipv4_tun_mac_ipv4_tcp_queue_index =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_tcp_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions > queue index 15 / mark id 1 / end", > "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": 15, "mark_id": 1} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_sctp_queue_group =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_sctp_queue_group", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions rss > queues 1 2 end / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [1, 2]} > +tv_mac_ipv4_tun_mac_ipv4_tcp_rss_queues =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_tcp_rss_queues", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions rss > queues 0 1 2 3 end / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "queue": [0, 1, 2, 3], "mark_id": 1} > } >=20 > -tv_mac_ipv4_gtpu_ipv4_pay_queue_index =3D { > - "name": "test_mac_ipv4_gtpu_ipv4_pay_queue_index", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / ipv4 / end actions queue index 1 / end= ", > - "scapy_str": MAC_IPV4_GTPU_IPV4_PAY, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": 1} > +tv_mac_ipv4_tun_mac_ipv4_tcp_passthru =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_tcp_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions > passthru / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_gtpu_ipv4_pay_drop =3D { > - "name": "test_mac_ipv4_gtpu_ipv4_pay_drop", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / ipv4 / end actions drop / end", > - "scapy_str": MAC_IPV4_GTPU_IPV4_PAY, > - "check_func": rfc.check_drop, > - "check_param": {"port_id": 0} > +tv_mac_ipv4_tun_mac_ipv4_tcp_drop =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_tcp_drop", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions drop > / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv4_gtpu_ipv4_pay_queue_group =3D { > - "name": "test_mac_ipv4_gtpu_ipv4_pay_queue_group", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / ipv4 / end actions rss queues 0 1 end = / end", > - "scapy_str": MAC_IPV4_GTPU_IPV4_PAY, > - "check_func": rfc.check_queue, > - "check_param": {"port_id": 0, "queue": [0, 1]} > +tv_mac_ipv4_tun_mac_ipv4_tcp_mark_rss =3D { > + "name": "tv_mac_ipv4_tun_mac_ipv4_tcp_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions rss / > mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_gtpu_ipv4_pay_mark_count_query =3D { > - "name": "test_mac_ipv4_gtpu_ipv4_pay_mark_count_query", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / ipv4 / end actions queue index 2 / mar= k id 2 > / count / end", > - "scapy_str": MAC_IPV4_GTPU_IPV4_PAY, > +tv_mac_ipv4_tun_mac_ipv4_tcp_mark =3D { > + "name": "tv_mac_ipv4_tun_mac_ipv4_tcp_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions mark > id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 2, "mark_id": 2, > - "count": {"hits_set": 1, "hits": 5}, "mark": True} > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_pay_queue_index_mark =3D { > - "name": "test_mac_ipv4_pay_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end = actions > queue index 1 / mark id 0 / end", > - "scapy_str": MAC_IPV4_PAY, > +vectors_mac_ipv4_tun_mac_ipv4_tcp =3D > [tv_mac_ipv4_tun_mac_ipv4_tcp_queue_index, > tv_mac_ipv4_tun_mac_ipv4_tcp_rss_queues, > + tv_mac_ipv4_tun_mac_ipv4_tcp_passth= ru, > tv_mac_ipv4_tun_mac_ipv4_tcp_drop, > + tv_mac_ipv4_tun_mac_ipv4_tcp_mark_r= ss, > tv_mac_ipv4_tun_mac_ipv4_tcp_mark] > + > +tv_mac_ipv4_tun_mac_ipv4_sctp_queue_index =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_sctp_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions > queue index 15 / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 0, "mark": True= } > + "check_param": {"port_id": 0, "queue": 15, "mark_id": 1} > } >=20 > -tv_mac_ipv4_udp_queue_index_mark =3D { > - "name": "test_mac_ipv4_udp_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst= is 23 / end > actions queue index 0 / mark id 1 / end", > - "scapy_str": MAC_IPV4_UDP, > +tv_mac_ipv4_tun_mac_ipv4_sctp_rss_queues =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_sctp_rss_queues", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions rss > queues 0 1 2 3 end / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 0, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "queue": [0, 1, 2, 3], "mark_id": 1} > } >=20 > -tv_mac_ipv4_tcp_queue_index_mark =3D { > - "name": "test_mac_ipv4_tcp_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst= is 23 / end > actions queue index 1 / mark id 4294967294 / end", > - "scapy_str": MAC_IPV4_TCP, > +tv_mac_ipv4_tun_mac_ipv4_sctp_passthru =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_sctp_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions > passthru / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 4294967294, "ma= rk": > True} > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_sctp_queue_drop_mark =3D { > - "name": "test_mac_ipv4_sctp_queue_drop_mark", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src > is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 ds= t is 23 tag is 1 > / end actions drop / mark id 1 / end", > - "scapy_str": MAC_IPV4_SCTP, > +tv_mac_ipv4_tun_mac_ipv4_sctp_drop =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_sctp_drop", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions drop > / mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "mark_id": 1, "mark": True} > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv6_pay_queue_index_mark =3D { > - "name": "test_mac_ipv6_pay_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 proto is 1 hop = is 2 > tc is 1 / end actions queue index 1 / mark id 1 / end", > - "scapy_str": MAC_IPV6_PAY, > +tv_mac_ipv4_tun_mac_ipv4_sctp_mark_rss =3D { > + "name": "test_mac_ipv4_tun_mac_ipv4_sctp_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions rss / > mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv6_udp_queue_index_mark =3D { > - "name": "test_mac_ipv6_udp_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > udp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end", > - "scapy_str": MAC_IPV6_UDP, > +tv_mac_ipv4_tun_mac_ipv4_sctp_mark =3D { > + "name": "tv_mac_ipv4_tun_mac_ipv4_sctp_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions > mark id 1 / end", > + "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv6_tcp_queue_index_mark =3D { > - "name": "test_mac_ipv6_tcp_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / tcp > src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end", > - "scapy_str": MAC_IPV6_TCP, > +vectors_mac_ipv4_tun_mac_ipv4_sctp =3D > [tv_mac_ipv4_tun_mac_ipv4_sctp_queue_index, > + tv_mac_ipv4_tun_mac_ipv4_sctp_rss_= queues, > + tv_mac_ipv4_tun_mac_ipv4_sctp_pass= thru, > tv_mac_ipv4_tun_mac_ipv4_sctp_drop, > + tv_mac_ipv4_tun_mac_ipv4_sctp_mark= _rss, > tv_mac_ipv4_tun_mac_ipv4_sctp_mark] > + > +tv_mac_ipv4_gtpu_eh_queue_index =3D { > + "name": "test_mac_ipv4_gtpu_eh_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / end actions queue index 1 / mark id 1 = / > end", > + "scapy_str": MAC_IPV4_GTPU_EH, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "mark_id": 1, "queue": 1} > } >=20 > -tv_mac_ipv6_sctp_queue_index_mark =3D { > - "name": "test_mac_ipv6_sctp_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv6 dst > is CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is = 1 / > sctp src is 22 dst is 23 / end actions queue index 1 / mark id 1 / end", > - "scapy_str": MAC_IPV6_SCTP, > +tv_mac_ipv4_gtpu_eh_queue_group =3D { > + "name": "test_mac_ipv4_gtpu_eh_queue_group", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / end actions rss queues 0 1 2 3 end / m= ark id > 1 / end", > + "scapy_str": MAC_IPV4_GTPU_EH, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "mark_id": 1, "queue": [0, 1, 2, 3]} > } >=20 > -tv_mac_ipv4_tun_ipv4_pay_queue_index_mark =3D { > - "name": "test_mac_ipv4_tun_ipv4_pay_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mark id 1 = / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > +tv_mac_ipv4_gtpu_eh_passthru =3D { > + "name": "test_mac_ipv4_gtpu_eh_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / end actions passthru / mark id 1 / end= ", > + "scapy_str": MAC_IPV4_GTPU_EH, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_tun_ipv4_udp_queue_group_mark =3D { > - "name": "test_mac_ipv4_tun_ipv4_udp_queue_group_mark", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = rss > queues 1 2 end / mark id 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > +tv_mac_ipv4_gtpu_eh_drop =3D { > + "name": "test_mac_ipv4_gtpu_eh_drop", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end", > + "scapy_str": MAC_IPV4_GTPU_EH, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": [1, 2], "mark_id": 1, "mark":= True} > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -tv_mac_ipv4_tun_ipv4_tcp_drop_mark =3D { > - "name": "test_mac_ipv4_tun_ipv4_tcp_drop_mark", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions = drop / > mark id 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > +tv_mac_ipv4_gtpu_eh_mark_rss =3D { > + "name": "test_mac_ipv4_gtpu_eh_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / end actions mark id 1 / rss / end", > + "scapy_str": MAC_IPV4_GTPU_EH, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "mark_id": 1, "mark": True} > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > } >=20 > -tv_mac_ipv4_tun_ipv4_sctp_queue_index_mark =3D { > - "name": "test_mac_ipv4_tun_ipv4_sctp_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= queue > index 1 / mark id 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > +tv_mac_ipv4_gtpu_eh_mark =3D { > + "name": "tv_mac_ipv4_gtpu_eh_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x34 / end actions mark id 1 / end", > + "scapy_str": MAC_IPV4_GTPU_EH, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "rss": True} > +} > + > +tv_mac_ipv4_gtpu_eh_qfi_queue_index_mark =3D { > + "name": "test_mac_ipv4_gtpu_eh_qfi_queue_index_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc qfi > is 0x34 / end actions queue index 1 / mark id 3 / end", > + "scapy_str": {"match": > + [ > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255)/GTP_ > PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/TCP()/Raw("x"*20)'], > + "unmatched": > + [ > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255)/GTP_ > PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x35)/IP()/Raw("x"*20)']}, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "mark_id": 3, "queue": 1} > +} > + > +tv_mac_ipv4_gtpu_eh_qfi_rss_queues_mark =3D { > + "name": "test_mac_ipv4_gtpu_eh_qfi_rss_queues_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc / end actions rss queues 2 3 end / mark id 1 / end", > + "scapy_str": {"match": > + [ > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0)/IP()/TC > P()/Raw("x"*20)'], > + "unmatched": > + [ > + 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0)/IP()/TCP > ()/Raw("x"*20)']}, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 1, "queue": [2, 3]} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_pay_queue_index_mark =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_pay_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mar= k id 1 / > end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_PAY_MAC_IPV4_TUN_MAC_IPV4_PAY, > +vectors_mac_ipv4_gtpu_eh =3D [tv_mac_ipv4_gtpu_eh_queue_index, > tv_mac_ipv4_gtpu_eh_queue_group, > + tv_mac_ipv4_gtpu_eh_passthru, > tv_mac_ipv4_gtpu_eh_drop, > + tv_mac_ipv4_gtpu_eh_mark_rss, > tv_mac_ipv4_gtpu_eh_mark, > + tv_mac_ipv4_gtpu_eh_qfi_queue_index_mark, > tv_mac_ipv4_gtpu_eh_qfi_rss_queues_mark] > + > +tv_mac_ipv4_gtpu_queue_index =3D { > + "name": "test_mac_ipv4_gtpu_queue_index", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / end actions queue index 1 / mark / end", > + "scapy_str": MAC_IPV4_GTPU, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "mark_id": 0, "queue": 1} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_udp_queue_index_mark =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_udp_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end a= ctions > queue index 1 / mark id 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_UDP_MAC_IPV4_TUN_MAC_IPV4_UDP, > +tv_mac_ipv4_gtpu_queue_group =3D { > + "name": "test_mac_ipv4_gtpu_queue_group", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / end actions rss queues 0 1 end / mark / end", > + "scapy_str": MAC_IPV4_GTPU, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "mark_id": 0, "queue": [0, 1]} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_tcp_queue_index_mark =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_tcp_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end a= ctions > queue index 1 / mark id 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_TCP_MAC_IPV4_TUN_MAC_IPV4_TCP, > +tv_mac_ipv4_gtpu_passthru =3D { > + "name": "test_mac_ipv4_gtpu_passthru", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / end actions passthru / mark / end", > + "scapy_str": MAC_IPV4_GTPU, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > } >=20 > -tv_mac_ipv4_tun_mac_ipv4_sctp_queue_index_mark =3D { > - "name": "test_mac_ipv4_tun_mac_ipv4_sctp_queue_index_mark", > - "rule": "flow create 0 ingress pattern eth / ipv4 / udp / vxlan / et= h / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end = actions > queue index 1 / mark id 1 / end", > - "scapy_str": > MAC_IPV4_TUN_IPV4_SCTP_MAC_IPV4_TUN_MAC_IPV4_SCTP, > +tv_mac_ipv4_gtpu_drop =3D { > + "name": "test_mac_ipv4_gtpu_drop", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / end actions drop / end", > + "scapy_str": MAC_IPV4_GTPU, > "check_func": rfc.check_mark, > - "check_param": {"port_id": 0, "queue": 1, "mark_id": 1, "mark": True= } > + "check_param": {"port_id": 0, "drop": True} > } >=20 > -vectors_ipv4_pay =3D [tv_mac_ipv4_pay_queue_index, > tv_mac_ipv4_pay_selected_inputset_queue_index, > - tv_mac_ipv4_pay_drop, tv_mac_ipv4_pay_queue_gro= up, > tv_mac_ipv4_pay_queue_index_mark] > - > -vectors_ipv4_udp =3D [tv_mac_ipv4_udp_drop, > tv_mac_ipv4_udp_queue_group, tv_mac_ipv4_udp_queue_index_mark, > - tv_mac_ipv4_udp_queue_index] > - > -vectors_ipv4_tcp =3D [tv_mac_ipv4_tcp_drop, > tv_mac_ipv4_tcp_queue_group, tv_mac_ipv4_tcp_queue_index, > - tv_mac_ipv4_tcp_queue_index_mark] > - > -vectors_ipv4_sctp =3D [tv_mac_ipv4_sctp_queue_drop_mark, > tv_mac_ipv4_sctp_queue_group, tv_mac_ipv4_sctp_drop, > - tv_mac_ipv4_sctp_queue_index] > - > -vectors_ipv6_pay =3D [tv_mac_ipv6_pay_drop, > tv_mac_ipv6_pay_queue_group, tv_mac_ipv6_pay_queue_index, > - tv_mac_ipv6_pay_queue_index_mark, > tv_mac_ipv6_pay_selected_inputset_queue_index] > - > -vectors_ipv6_udp =3D [tv_mac_ipv6_udp_drop, > tv_mac_ipv6_udp_queue_group, tv_mac_ipv6_udp_queue_index, > - tv_mac_ipv6_udp_queue_index_mark] > - > -vectors_ipv6_tcp =3D [tv_mac_ipv6_tcp_drop, > tv_mac_ipv6_tcp_queue_group, tv_mac_ipv6_tcp_queue_index, > - tv_mac_ipv6_tcp_queue_index_mark] > - > -vectors_ipv6_sctp =3D [tv_mac_ipv6_sctp_queue_index_mark, > tv_mac_ipv6_sctp_drop, tv_mac_ipv6_sctp_queue_group, > - tv_mac_ipv6_sctp_queue_index] > - > -vectors_ipv4_tun_ipv4 =3D [tv_mac_ipv4_tun_ipv4_pay_drop, > tv_mac_ipv4_tun_ipv4_pay_queue_group, > - tv_mac_ipv4_tun_ipv4_pay_queue_index, > tv_mac_ipv4_tun_ipv4_pay_queue_index_mark, > - tv_mac_ipv4_tun_ipv4_sctp_drop, > tv_mac_ipv4_tun_ipv4_sctp_queue_group, > - tv_mac_ipv4_tun_ipv4_sctp_queue_index, > tv_mac_ipv4_tun_ipv4_sctp_queue_index_mark, > - tv_mac_ipv4_tun_ipv4_tcp_drop, > tv_mac_ipv4_tun_ipv4_tcp_drop_mark, > - tv_mac_ipv4_tun_ipv4_tcp_queue_group, > tv_mac_ipv4_tun_ipv4_tcp_queue_index, > - tv_mac_ipv4_tun_ipv4_udp_drop, > tv_mac_ipv4_tun_ipv4_udp_queue_group, > - tv_mac_ipv4_tun_ipv4_udp_queue_group_mark, > tv_mac_ipv4_tun_ipv4_udp_queue_index] > +tv_mac_ipv4_gtpu_mark_rss =3D { > + "name": "test_mac_ipv4_gtpu_mark_rss", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / end actions mark / rss / end", > + "scapy_str": MAC_IPV4_GTPU, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} >=20 > -vectors_ipv4_tun_mac =3D > [tv_mac_ipv4_tun_mac_ipv4_pay_queue_index_mark, > tv_mac_ipv4_tun_mac_ipv4_pay_drop, > - tv_mac_ipv4_tun_mac_ipv4_pay_queue_group, > tv_mac_ipv4_tun_mac_ipv4_pay_queue_index, > - tv_mac_ipv4_tun_mac_ipv4_sctp_drop, > tv_mac_ipv4_tun_mac_ipv4_sctp_queue_group, > - tv_mac_ipv4_tun_mac_ipv4_sctp_queue_index, > tv_mac_ipv4_tun_mac_ipv4_sctp_queue_index_mark, > - tv_mac_ipv4_tun_mac_ipv4_tcp_drop, > tv_mac_ipv4_tun_mac_ipv4_tcp_queue_group, > - tv_mac_ipv4_tun_mac_ipv4_tcp_queue_index, > tv_mac_ipv4_tun_mac_ipv4_tcp_queue_index_mark, > - tv_mac_ipv4_tun_mac_ipv4_udp_drop, > tv_mac_ipv4_tun_mac_ipv4_udp_queue_group, > - tv_mac_ipv4_tun_mac_ipv4_udp_queue_index, > tv_mac_ipv4_tun_mac_ipv4_udp_queue_index_mark] > +tv_mac_ipv4_gtpu_mark =3D { > + "name": "tv_mac_ipv4_gtpu_mark", > + "rule": "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / end actions mark / end", > + "scapy_str": MAC_IPV4_GTPU, > + "check_func": rfc.check_mark, > + "check_param": {"port_id": 0, "mark_id": 0, "rss": True} > +} >=20 > -test_vectors_gtpu_ipv4_pay =3D [tv_mac_ipv4_gtpu_ipv4_pay_drop, > tv_mac_ipv4_gtpu_ipv4_pay_mark_count_query, > - tv_mac_ipv4_gtpu_ipv4_pay_queue_group, > tv_mac_ipv4_gtpu_ipv4_pay_queue_index] > +vectors_mac_ipv4_gtpu =3D [tv_mac_ipv4_gtpu_queue_index, > tv_mac_ipv4_gtpu_queue_group, > + tv_mac_ipv4_gtpu_passthru, tv_mac_ipv4_gtpu_dro= p, > + tv_mac_ipv4_gtpu_mark_rss, tv_mac_ipv4_gtpu_mar= k] >=20 >=20 > class TestCVLFdir(TestCase): >=20 > - def check_rule(self, port_id=3D0, stats=3DTrue, rule_list=3DNone): > - out =3D self.dut.send_command("flow list %s" % port_id, timeout= =3D2) > - p =3D re.compile(r"ID\s+Group\s+Prio\s+Attr\s+Rule") > - m =3D p.search(out) > - if stats: > - self.verify(m, "flow rule on port %s is not existed" % port_= id) > - if rule_list: > - p =3D re.compile("^(\d+)\s") > - li =3D out.splitlines() > - res =3D list(filter(bool, list(map(p.match, li)))) > - result =3D [i.group(1) for i in res] > - self.verify(sorted(result) =3D=3D sorted(rule_list), > - "check rule list failed. expect %s, result %= s" % (rule_list, result)) > - else: > - self.verify(not m, "flow rule on port %s is existed" % port_= id) > - > - def destroy_rule(self, rule_id, port_id=3D0): > - if isinstance(rule_id, list): > - for i in rule_id: > - out =3D self.dut.send_command("flow destroy %s rule %s" = % (port_id, > i), timeout=3D1) > - p =3D re.compile(r"Flow rule #(\d+) destroyed") > - m =3D p.search(out) > - self.verify(m, "flow rule %s delete failed" % rule_id) > - else: > - out =3D self.dut.send_command("flow destroy %s rule %s" % (p= ort_id, > rule_id), timeout=3D1) > - p =3D re.compile(r"Flow rule #(\d+) destroyed") > - m =3D p.search(out) > - self.verify(m, "flow rule %s delete failed" % rule_id) > - > def query_count(self, hits_set, hits, port_id=3D0, rule_id=3D0): > out =3D self.dut.send_command("flow query %s %s count" % (port_i= d, > rule_id), timeout=3D1) > p =3D re.compile("hits_set:\s(\d+).*hits:\s(\d+)", re.DOTALL) > @@ -895,39 +1257,47 @@ class TestCVLFdir(TestCase): > test_results =3D {} > for tv in vectors: > try: > - count =3D 1 if not tv["check_param"].get("count") else > tv["check_param"]["count"] > - port_id =3D tv["check_param"]["port_id"] > - mark =3D tv["check_param"].get("mark") > + count =3D 1 > + port_id =3D tv["check_param"]["port_id"] if > tv["check_param"].get("port_id") is not None else 0 > + drop =3D tv["check_param"].get("drop") > # create rule > rule_li =3D self.create_fdir_rule(tv["rule"], check_stat= s=3DTrue) > # send and check match packets > out1 =3D self.send_pkts_getouput(pkts=3Dtv["scapy_str"][= "match"], > port_id=3Dport_id, > - count=3Dcount, mark=3Dmar= k) > - tv["check_func"](out1, pkt_num=3Dlen(tv["scapy_str"]["ma= tch"]), > check_param=3Dtv["check_param"]) > - # send and check unmatch packets > - out2 =3D self.send_pkts_getouput(pkts=3Dtv["scapy_str"][= "unmatch"], > port_id=3Dport_id, > - count=3Dcount, mark=3Dmar= k) > - tv["check_func"](out2, pkt_num=3Dlen(tv["scapy_str"]["un= match"]), > check_param=3Dtv["check_param"], > + count=3Dcount, drop=3Ddro= p) > + matched_queue =3D tv["check_func"](out1, > pkt_num=3Dlen(tv["scapy_str"]["match"]), > + check_param=3Dtv["check= _param"]) > + # send and check unmatched packets > + out2 =3D > self.send_pkts_getouput(pkts=3Dtv["scapy_str"]["unmatched"], > port_id=3Dport_id, > + count=3Dcount, drop=3Ddro= p) > + tv["check_func"](out2, > pkt_num=3Dlen(tv["scapy_str"]["unmatched"]), > check_param=3Dtv["check_param"], > stats=3DFalse) > if tv["check_param"].get("count"): > self.query_count(tv["check_param"]["count"]["hits_se= t"], > tv["check_param"]["count"]["hits"], > port_id=3Dport_id, > rule_id=3Drule_li[0]) > # list and destroy rule > - self.check_rule(port_id=3Dtv["check_param"]["port_id"], > rule_list=3Drule_li) > - self.destroy_rule(rule_id=3Drule_li, port_id=3Dport_id) > + self.check_fdir_rule(port_id=3Dtv["check_param"]["port_i= d"], > rule_list=3Drule_li) > + self.destroy_fdir_rule(rule_id=3Drule_li, port_id=3Dport= _id) > # send matched packet > out3 =3D self.send_pkts_getouput(pkts=3Dtv["scapy_str"][= "match"], > port_id=3Dport_id, > - count=3Dcount, mark=3Dmar= k) > - tv["check_func"](out3, pkt_num=3Dlen(tv["scapy_str"]["ma= tch"]), > check_param=3Dtv["check_param"], > - stats=3DFalse) > + count=3Dcount, drop=3Ddro= p) > + matched_queue2 =3D tv["check_func"](out3, > pkt_num=3Dlen(tv["scapy_str"]["match"]), > + check_param=3Dtv["chec= k_param"], > + stats=3DFalse) > + if tv["check_param"].get("rss"): > + self.verify(matched_queue =3D=3D matched_queue2 and = not > any([matched_queue, matched_queue2]), > + "send twice matched packet, received in = deferent queues") > # check not rule exists > - self.check_rule(port_id=3Dport_id, stats=3DFalse) > + self.check_fdir_rule(port_id=3Dport_id, stats=3DFalse) > test_results[tv["name"]] =3D True > - print((GREEN("case passed: %s" % tv["name"]))) > + self.logger.info((GREEN("case passed: %s" % tv["name"]))= ) > except Exception as e: > - print((RED(e))) > + self.logger.warning((RED(e))) > + self.dut.send_command("flow flush 0", timeout=3D1) > + self.dut.send_command("flow flush 1", timeout=3D1) > test_results[tv["name"]] =3D False > + self.logger.info((GREEN("case failed: %s" % tv["name"]))= ) > continue > failed_cases =3D [] > for k, v in list(test_results.items()): > @@ -973,13 +1343,16 @@ class TestCVLFdir(TestCase): > # specify a fixed rss-hash-key for cvl ether > self.pmd_output.execute_cmd( > "port config 0 rss-hash-key ipv4 > 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd12 > 34abcd1234abcd1234abcd1234abcd1234abcd") > + self.pmd_output.execute_cmd( > + "port config 1 rss-hash-key ipv4 > 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd12 > 34abcd1234abcd1234abcd1234abcd1234abcd") > res =3D self.pmd_output.wait_link_status_up('all', timeout=3D15) > self.verify(res is True, 'there have port link is down') >=20 > - def launch_testpmd_with_mark(self): > + def launch_testpmd_with_mark(self, rxq=3D64, txq=3D64): > self.pmd_output.start_testpmd(cores=3D"1S/4C/1T", > - param=3D"--portmask=3D%s --rxq=3D6= 4 --txq=3D64 --port- > topology=3Dloop" % self.portMask, > - eal_param=3D"-w %s,flow-mark-suppo= rt=3D1 -w %s,flow- > mark-support=3D1" % ( > + param=3D"--portmask=3D%s --rxq=3D%= d --txq=3D%d --port- > topology=3Dloop" % ( > + self.portMask, rxq, txq), > + eal_param=3D"-w %s,flow-mark-suppo= rt=3D1 -w %s,flow- > mark-support=3D1 --log-level=3Dice,7" % ( > self.pci0, self.pci1), socket= =3Dself.ports_socket) > self.config_testpmd() >=20 > @@ -988,32 +1361,44 @@ class TestCVLFdir(TestCase): > tx_port =3D self.tester_iface0 if not tx_port else tx_port > self.pkt.send_pkt(crb=3Dself.tester, tx_port=3Dtx_port, count=3D= count) >=20 > - def send_pkts_getouput(self, pkts, port_id=3D0, count=3D1, mark=3DNo= ne): > + def send_pkts_getouput(self, pkts, port_id=3D0, count=3D1, drop=3DFa= lse): > tx_port =3D self.tester_iface0 if port_id =3D=3D 0 else self.tes= ter_iface1 > - self.send_packets(pkts, tx_port=3Dtx_port, count=3Dcount) > + > time.sleep(1) > - if mark: > - out =3D (self.pmd_output.get_output(), > self.pmd_output.execute_cmd("stop")) > - else: > + if drop: > + self.pmd_output.execute_cmd("clear port stats all") > + time.sleep(0.5) > + self.send_packets(pkts, tx_port=3Dtx_port, count=3Dcount) > out =3D self.pmd_output.execute_cmd("stop") > - self.pmd_output.execute_cmd("start") > + self.pmd_output.execute_cmd("start") > + else: > + self.send_packets(pkts, tx_port=3Dtx_port, count=3Dcount) > + out =3D self.pmd_output.get_output() > return out >=20 > - def create_fdir_rule(self, rule, check_stats=3DNone): > - # dpdk get a warning message(ice_interrupt_handler), it'll mess = up > output stream, testpmd> probably not be > - # print completely. > + def create_fdir_rule(self, rule: (list, str), check_stats=3DNone, ms= g=3DNone, > validate=3DTrue): > + if validate: > + if isinstance(rule, list): > + validate_rule =3D [i.replace('create', 'validate') for i= in rule] > + else: > + validate_rule =3D rule.replace('create', 'validate') > + self.validate_fdir_rule(validate_rule, check_stats=3Dcheck_s= tats) > p =3D re.compile(r"Flow rule #(\d+) created") > rule_list =3D [] > if isinstance(rule, list): > for i in rule: > - out =3D self.dut.send_command(i, timeout=3D1) > + out =3D self.pmd_output.execute_cmd(i, timeout=3D1) > + if msg: > + self.verify(msg in out, "failed: expect %s in %s" % = (msg, out)) > m =3D p.search(out) > if m: > rule_list.append(m.group(1)) > else: > rule_list.append(False) > elif isinstance(rule, str): > - out =3D self.dut.send_command(rule, timeout=3D1) > + out =3D self.pmd_output.execute_cmd(rule, timeout=3D1) > + if msg: > + self.verify(msg in out, "failed: expect %s in %s" % (msg= , out)) > m =3D p.search(out) > if m: > rule_list.append(m.group(1)) > @@ -1027,11 +1412,37 @@ class TestCVLFdir(TestCase): > self.verify(not any(rule_list), "all rules should create fai= led, result %s" % > rule_list) > return rule_list >=20 > + def validate_fdir_rule(self, rule, check_stats=3DTrue, check_msg=3DN= one): > + flag =3D 'Flow rule validated' > + if isinstance(rule, str): > + out =3D self.pmd_output.execute_cmd(rule, timeout=3D1) > + if check_stats: > + self.verify(flag in out.strip(), "rule %s validated fail= ed, result %s" % > (rule, out)) > + else: > + if check_msg: > + self.verify(flag not in out.strip() and check_msg in= out.strip(), > + "rule %s validate should failed with msg= : %s, but result %s" % > (rule, check_msg, out)) > + else: > + self.verify(flag not in out.strip(), "rule %s valida= te should failed, > result %s" % (rule, out)) > + elif isinstance(rule, list): > + for r in rule: > + out =3D self.pmd_output.execute_cmd(r, timeout=3D1) > + if check_stats: > + self.verify(flag in out.strip(), "rule %s validated = failed, result %s" % > (r, out)) > + else: > + if not check_msg: > + self.verify(flag not in out.strip(), "rule %s va= lidate should failed, > result %s" % (r, out)) > + else: > + self.verify(flag not in out.strip() and check_ms= g in out.strip(), > + "rule %s should validate failed with= msg: %s, but > result %s" % ( > + r, check_msg, out)) > + > def check_fdir_rule(self, port_id=3D0, stats=3DTrue, rule_list=3DNon= e): > - out =3D self.dut.send_command("flow list %s" % port_id, timeout= =3D2) > + out =3D self.pmd_output.execute_cmd("flow list %s" % port_id) > p =3D re.compile(r"ID\s+Group\s+Prio\s+Attr\s+Rule") > + matched =3D p.search(out) > if stats: > - self.verify(p.search(out), "flow rule on port %s is not exis= ted" % > port_id) > + self.verify(matched, "flow rule on port %s is not existed" %= port_id) > if rule_list: > p =3D re.compile("^(\d+)\s") > li =3D out.splitlines() > @@ -1040,10 +1451,10 @@ class TestCVLFdir(TestCase): > self.verify(sorted(result) =3D=3D sorted(rule_list), > "check rule list failed. expect %s, result %= s" % (rule_list, result)) > else: > - self.verify(not p.search(out), "flow rule on port %s is exis= ted" % > port_id) > + self.verify(not matched, "flow rule on port %s is existed" %= port_id) >=20 > def destroy_fdir_rule(self, port_id=3D0, rule_id=3DNone): > - if rule_id =3D=3D None: > + if rule_id is None: > rule_id =3D 0 > if isinstance(rule_id, list): > for i in rule_id: > @@ -1057,228 +1468,348 @@ class TestCVLFdir(TestCase): > m =3D p.search(out) > self.verify(m, "flow rule %s delete failed" % rule_id) >=20 > - def test_mac_ipv4_pay(self): > - self._rte_flow_validate(vectors_ipv4_pay) > - > - def test_mac_ipv4_udp(self): > - self._rte_flow_validate(vectors_ipv4_udp) > - > - def test_mac_ipv4_tcp(self): > - self._rte_flow_validate(vectors_ipv4_tcp) > - > - def test_mac_ipv4_sctp(self): > - self._rte_flow_validate((vectors_ipv4_sctp)) > - > - def test_mac_ipv6_pay(self): > - self._rte_flow_validate(vectors_ipv6_pay) > - > - def test_mac_ipv6_udp(self): > - self._rte_flow_validate(vectors_ipv6_udp) > - > - def test_mac_ipv6_tcp(self): > - self._rte_flow_validate(vectors_ipv6_tcp) > + def test_flow_validation(self): > + rule =3D "flow validate 0 ingress pattern eth / ipv4 src is 192.= 168.0.20 dst is > 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 /= end" > + self.validate_fdir_rule(rule) > + rules3 =3D [ > + 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 / end actions queue index 1 / mark / count / end', > + 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 / end actions rss queues 0 1 end / mark id 1 / count identif= ier > 0x1234 shared on / end', > + 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 / end actions passthru / mark id 2 / count identifier 0x34 s= hared > off / end', > + 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 / end actions mark id 3 / rss / count shared on / end', > + 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 / end actions drop / count shared off / end'] > + self.validate_fdir_rule(rules3) > + self.check_fdir_rule(stats=3DFalse) >=20 > - def test_mac_ipv6_sctp(self): > - self._rte_flow_validate(vectors_ipv6_sctp) > + def test_negative_validation(self): > + # dpdk now supoort only count action > + # self.validate_fdir_rule( > + # 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.= 0.20 dst is > 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions count / end', > + # check_stats=3DFalse, check_msg=3D'Invalid argument') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 proto is 255 ttl is 2 tos is 4 / and actions end', > + check_stats=3DFalse, check_msg=3D'Bad arguments') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions rss queues 2 3 = end / rss / > end', > + check_stats=3DFalse, check_msg=3D'Invalid input action numbe= r: Invalid > argument') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions passthru / mark= id > 4294967296 / end', > + check_stats=3DFalse, check_msg=3D'Bad arguments') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 proto is 255 ttl is 2 tc is 4 / end actions queue index 1 / = end', > + check_stats=3DFalse, check_msg=3D'Bad arguments') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth dst is 00:11:22:33:44:5= 5 / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions queue > index 64 / end', > + check_stats=3DFalse, check_msg=3D'Invalid argument') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth dst is 00:11:22:33:44:5= 5 / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions rss > queues 1 2 3 end / end', > + check_stats=3DFalse, check_msg=3D'Invalid argument') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth dst is 00:11:22:33:44:5= 5 / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions rss > queues 0 end / end', > + check_stats=3DFalse, check_msg=3D'Invalid argument') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth dst is 00:11:22:33:44:5= 5 / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions rss > queues end / end', > + check_stats=3DFalse, check_msg=3D'Invalid argument') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth dst is 00:11:22:33:44:5= 5 / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions rss > queues 1 2 3 5 end / end', > + check_stats=3DFalse, check_msg=3D'Invalid argument') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth dst is 00:11:22:33:44:5= 5 / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions rss > queues 63 64 end / end', > + check_stats=3DFalse, check_msg=3D'Invalid argument') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth / ipv4 / udp / gtpu tei= d is > 0x12345678 / gtp_psc qfi is 0x100 / end actions queue index 1 / end', > + check_stats=3DFalse, check_msg=3D'Bad arguments') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth / ipv4 / udp / gtpu tei= d is > 0x100000000 / gtp_psc qfi is 0x5 / end actions queue index 2 / end', > + check_stats=3DFalse, check_msg=3D'Bad arguments') > + self.validate_fdir_rule( > + 'flow validate 0 ingress pattern eth / ipv4 / udp / gtpu tei= d is > 0x100000000 / end actions queue index 1 / end', > + check_stats=3DFalse, check_msg=3D'Bad arguments') > + # need run for os default pkg > + # self.validate_fdir_rule( > + # 'flow validate 0 ingress pattern eth / ipv4 / udp / gtpu t= eid is > 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end', > + # check_stats=3DFalse, check_msg=3D'Bad arguments') > + self.validate_fdir_rule( > + 'flow validate 2 ingress pattern eth / ipv4 src is 192.168.0= .20 dst is > 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 /= end', > + check_stats=3DFalse, check_msg=3D'No such device') > + self.check_fdir_rule(stats=3DFalse) >=20 > - def test_mac_ipv4_tun_ipv4(self): > - self._rte_flow_validate(vectors_ipv4_tun_ipv4) > + def test_mac_ipv4_pay_protocal(self): > + rules =3D [ > + "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.2= 1 proto is 1 / > end actions queue index 1 / mark id 1 / end", > + "flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.2= 1 proto is 17 > / end actions passthru / mark id 3 / end"] > + rule_li =3D self.create_fdir_rule(rules, check_stats=3DTrue) > + pkt1 =3D 'Ether(dst=3D"00:11:22:33:44:55") / IP(src=3D"192.168.0= .20", > dst=3D"192.168.0.21", proto=3D1) / Raw("x" * 80)' > + pkt2 =3D 'Ether(dst=3D"00:11:22:33:44:55") / IP(src=3D"192.168.0= .20", > dst=3D"192.168.0.21", frag=3D1, proto=3D1) / Raw("x" * 80)' > + pkt3 =3D 'Ether(dst=3D"00:11:22:33:44:55") / IP(src=3D"192.168.0= .20", > dst=3D"192.168.0.21", ttl=3D2, tos=3D4) / UDP(sport=3D22, dport=3D23) / R= aw("x" * 80)' > + pkt4 =3D 'Ether(dst=3D"00:11:22:33:44:55") / IP(src=3D"192.168.0= .20", > dst=3D"192.168.0.21", frag=3D1, ttl=3D2, tos=3D4) / UDP(sport=3D22, dport= =3D23) / Raw("x" > * 80)' > + pkt5 =3D 'Ether(dst=3D"00:11:22:33:44:55") / IP(src=3D"192.168.0= .20", > dst=3D"192.168.0.21", proto=3D17, ttl=3D2, tos=3D4) / Raw("x" * 80)' > + pkt6 =3D 'Ether(dst=3D"00:11:22:33:44:55") / IP(src=3D"192.168.0= .20", > dst=3D"192.168.0.21", frag=3D1, proto=3D17, ttl=3D2, tos=3D4) / Raw("x" *= 80)' > + > + out =3D self.send_pkts_getouput([pkt1, pkt2]) > + port_id =3D 0 > + p =3D > re.compile(r'port\s+%s/queue(.+?):\s+received\s+(\d+)\s+packets.*?FDIR > matched ID=3D(\S+)' % port_id, re.S) > + res =3D p.findall(out) > + pkt_num =3D sum([int(i[1]) for i in res]) > + pkt_queue =3D set([int(i[0]) for i in res]) > + pkt_mark_id =3D set([i[2] for i in res]) > + self.verify(pkt_num =3D=3D 2, "received pkts %s, expect 2" % pkt= _num) > + self.verify(all([i =3D=3D 1 for i in pkt_queue]), "wrong receive= d queue %s, > expect 1" % pkt_queue) > + self.verify(all([i =3D=3D '0x1' for i in pkt_mark_id]), "wrong r= eceived mark > id %s, expect 0x1" % pkt_mark_id) > + > + out2 =3D self.send_pkts_getouput([pkt3, pkt4, pkt5, pkt6]) > + res =3D p.findall(out2) > + pkt_num =3D sum([int(i[1]) for i in res]) > + pkt_mark_id =3D set([i[2] for i in res]) > + self.verify(pkt_num =3D=3D 4, "received pkts %s, expect 4" % pkt= _num) > + rfc.verify_directed_by_rss(out2) > + self.verify(all([i =3D=3D '0x3' for i in pkt_mark_id]), "wrong r= eceived mark > id %s, expect 0x1" % pkt_mark_id) > + > + pkt7 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.22", > proto=3D1) / Raw("x" * 80)' > + pkt8 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > proto=3D6) / Raw("x" * 80)' > + pkt9 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21")/TC > P(sport=3D22,dport=3D23)/ Raw("x" * 80)' > + pkt10 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > frag=3D1)/TCP(sport=3D22,dport=3D23)/ Raw("x" * 80)' > + > + out3 =3D self.send_pkts_getouput([pkt7, pkt8, pkt9, pkt10]) > + fdir_scanner =3D re.compile("FDIR matched ID=3D(0x\w+)") > + p2 =3D > re.compile(r"port\s+%s/queue\s+(\d+):\s+received\s+(\d+)\s+packets" % > port_id) > + res =3D p2.findall(out3) > + pkt_num =3D sum([int(i[1]) for i in res]) > + self.verify(pkt_num =3D=3D 4, "received pkts %s, expect 4" % pkt= _num) > + self.verify(not fdir_scanner.search(out3), "should not FDIR matc= hed ID > included in output: %s" % out3) > + > + self.check_fdir_rule(port_id=3Dport_id, rule_list=3Drule_li) > + self.destroy_fdir_rule(rule_id=3Drule_li) > + > + out =3D self.send_pkts_getouput([pkt1, pkt2, pkt3, pkt4, pkt5, p= kt6]) > + res =3D p2.findall(out) > + pkt_num =3D sum([int(i[1]) for i in res]) > + self.verify(pkt_num =3D=3D 6, "received pkts %s, expect 6" % pkt= _num) > + self.verify(not fdir_scanner.search(out3), "should not FDIR matc= hed ID > included in output: %s" % out3) > + self.check_fdir_rule(stats=3DFalse) >=20 > - def test_mac_ipv4_tun_mac(self): > - self._rte_flow_validate(vectors_ipv4_tun_mac) > + def test_mac_ipv6_pay_protocal(self): > + rules =3D [ > + "flow create 0 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 44 / end actions rss > queues 5 6 end / mark id 1 / end", > + "flow create 0 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 6 / end actions mark id = 2 / > rss / end"] > + rule_li =3D self.create_fdir_rule(rules, check_stats=3DTrue) > + pkt1 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"ABAB:910A:2222:5498:8475:1111:3900:1010", nh=3D44, tc= =3D1, > hlim=3D2)/("X"*480)' > + pkt2 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", > src=3D"ABAB:910A:2222:5498:8475:1111:3900:1010")/IPv6ExtHdrFragment(b"10 > 00")/("X"*480)' > + pkt3 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"ABAB:910A:2222:5498:8475:1111:3900:1010", > nh=3D44)/TCP(sport=3D22,dport=3D23)/("X"*480)' > + pkt4 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", > src=3D"ABAB:910A:2222:5498:8475:1111:3900:1010")/IPv6ExtHdrFragment(b"10 > 00")/TCP(sport=3D22,dport=3D23)/("X"*480)' > + pkt5 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", nh=3D6)/("X"*480)' > + pkt6 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020")/TCP(sport=3D22,dport=3D23)/("X"*480)' > + > + out =3D self.send_pkts_getouput([pkt1, pkt2, pkt3, pkt4]) > + port_id =3D 0 > + p =3D > re.compile(r'port\s+%s/queue(.+?):\s+received\s+(\d+)\s+packets.*?FDIR > matched ID=3D(\S+)' % port_id, re.S) > + res =3D p.findall(out) > + pkt_num =3D sum([int(i[1]) for i in res]) > + pkt_queue =3D set([int(i[0]) for i in res]) > + pkt_mark_id =3D set([i[2] for i in res]) > + self.verify(pkt_num =3D=3D 4, "received pkts %s, expect 4" % pkt= _num) > + self.verify(all([i in [5, 6] for i in pkt_queue]), "wrong receiv= ed queue %s, > expect 5 or 6]" % pkt_queue) > + self.verify(all([i =3D=3D '0x1' for i in pkt_mark_id]), "wrong r= eceived mark > id %s, expect 0x1" % pkt_mark_id) > + > + out2 =3D self.send_pkts_getouput([pkt5, pkt6]) > + res =3D p.findall(out2) > + pkt_num =3D sum([int(i[1]) for i in res]) > + pkt_mark_id =3D set([i[2] for i in res]) > + self.verify(pkt_num =3D=3D 2, "received pkts %s, expect 2" % pkt= _num) > + rfc.verify_directed_by_rss(out2) > + self.verify(all([i =3D=3D '0x2' for i in pkt_mark_id]), "wrong r= eceived mark > id %s, expect 0x2" % pkt_mark_id) > + > + pkt8 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020")/UDP(sport=3D22,dport=3D23)/("X"*480)' > + pkt9 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", nh=3D17)/("X"*480)' > + > + out3 =3D self.send_pkts_getouput([pkt8, pkt9]) > + fdir_scanner =3D re.compile("FDIR matched ID=3D(0x\w+)") > + p2 =3D > re.compile(r"port\s+%s/queue\s+(\d+):\s+received\s+(\d+)\s+packets" % > port_id) > + res =3D p2.findall(out3) > + pkt_num =3D sum([int(i[1]) for i in res]) > + self.verify(pkt_num =3D=3D 2, "received pkts %s, expect 3" % pkt= _num) > + self.verify(not fdir_scanner.search(out3), "should not FDIR matc= hed ID > included in output: %s" % out3) > + > + self.check_fdir_rule(port_id=3Dport_id, rule_list=3Drule_li) > + self.destroy_fdir_rule(rule_id=3Drule_li) > + > + out =3D self.send_pkts_getouput([pkt1, pkt2, pkt3, pkt4, pkt5, p= kt6]) > + res =3D p2.findall(out) > + pkt_num =3D sum([int(i[1]) for i in res]) > + self.verify(pkt_num =3D=3D 6, "received pkts %s, expect 6" % pkt= _num) > + self.verify(not fdir_scanner.search(out3), "should not FDIR matc= hed ID > included in output: %s" % out3) > + self.check_fdir_rule(stats=3DFalse) >=20 > - def test_queue_index_wrong_parameters(self): > - rule1 =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / = end actions > queue index 64 / end" > - self.create_fdir_rule(rule1, check_stats=3DFalse) > - rule2 =3D [ > - "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions queue > index 1 / end", > - "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions queue > index 2 / end", > - "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions drop / > end"] > - res =3D self.create_fdir_rule(rule2) > - self.verify(res[0], "create fdir rule failed, result %s" % res) > - self.verify(not any(res[1:]), "created wrong fdir rule %s should= fail" % > rule2[1:]) > - > - def test_queue_group_wrong_parameters(self): > - rule1 =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / = end actions > rss queues 0 1 2 end / end" > - rule2 =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / = end actions > rss queues 0 end / end" > - rule3 =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / = end actions > rss queues 1 2 3 5 end / end" > - rule4 =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / = end actions > rss queues 63 64 end / end" > - rule5 =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions r= ss queues 0 > 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2= 8 29 30 31 > 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 5= 6 57 58 > 59 60 61 62 63 end / end" > - res =3D self.create_fdir_rule([rule1, rule2, rule3, rule4], chec= k_stats=3DFalse) > - self.dut.send_command("stop", timeout=3D1) > - self.dut.send_command("port stop all", timeout=3D1) > - self.dut.send_command("port config all rxq 32", timeout=3D1) > - self.dut.send_command("port config all txq 32", timeout=3D2) > - self.dut.send_command("port start all", timeout=3D1) > - self.pmd_output.execute_cmd("start") > - res =3D self.create_fdir_rule(rule5, check_stats=3DFalse) > - self.dut.send_command("stop", timeout=3D1) > - self.dut.send_command("port stop all", timeout=3D1) > - self.dut.send_command("port config all rxq 64", timeout=3D1) > - self.dut.send_command("port config all txq 64", timeout=3D2) > - self.dut.send_command("port start all", timeout=3D1) > - self.pmd_output.execute_cmd("start") > - result =3D True > + def test_invalid_parameters_of_queue_index(self): > + rule =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / = end actions > queue index 64 / end" > + out =3D self.dut.send_command(rule, timeout=3D1) > + self.verify("Invalid input action: Invalid argument" in out, "fa= iled with > output: %s" % out) > + self.check_fdir_rule(port_id=3D0, stats=3DFalse) > + > + def test_invalid_parameters_of_rss_queues(self): > + rule1 =3D [ > + "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions rss > queues 1 2 3 end / end", > + "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions rss > queues 0 end / end", > + "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end act= ions rss > queues end / end"] > + self.create_fdir_rule(rule=3Drule1, check_stats=3DFalse, msg=3D'= Invalid input > action: Invalid argument') > + rule2 =3D 'flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / = end actions > rss queues 1 2 3 5 end / end' > + self.create_fdir_rule(rule2, check_stats=3DFalse, msg=3D'Invalid= input action: > Invalid argument') > + rule3 =3D 'flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / = end actions > rss queues 63 64 end / end' > + self.create_fdir_rule(rule3, check_stats=3DFalse, msg=3D'Invalid= input action: > Invalid argument') > try: > - self.create_fdir_rule(rule5, check_stats=3DTrue) > - out =3D self.send_pkts_getouput(pkts=3DMAC_IPV4_PAY["match"]= ) > - rfc.check_queue(out, pkt_num=3Dlen(MAC_IPV4_PAY["match"]), > check_param=3D{"port_id": 0, "queue": list(range(64))}) > - out =3D self.send_pkts_getouput(pkts=3DMAC_IPV4_PAY["unmatch= "]) > - rfc.check_queue(out, pkt_num=3Dlen(MAC_IPV4_PAY["unmatch"]), > check_param=3D{"port_id": 0, "queue": list(range(64))}) > + # restart testpmd > + self.dut.send_expect("quit", "# ") > + self.dut.kill_all() > + self.launch_testpmd_with_mark(rxq=3D7, txq=3D7) > + self.pmd_output.execute_cmd("start") > + rule4 =3D 'flow create 0 ingress pattern eth dst is 00:11:22= :33:44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 proto is 255 / = end actions > rss queues 0 1 2 3 4 5 6 7 end / end' > + self.create_fdir_rule(rule4, check_stats=3DFalse) > + self.check_fdir_rule(port_id=3D0, stats=3DFalse) > + # restart testpmd > + self.dut.send_expect("quit", "# ") > + self.dut.kill_all() > + self.launch_testpmd_with_mark(rxq=3D8, txq=3D8) > + self.pmd_output.execute_cmd("start") > + self.create_fdir_rule(rule4, check_stats=3DTrue) > + out =3D self.send_pkts_getouput(pkts=3DMAC_IPV4_PAY['match']= ) > + rfc.check_mark(out, pkt_num=3Dlen(MAC_IPV4_PAY['match']), > check_param=3D{"port_id": 0, "queue": list(range(8))}, > + stats=3DTrue) > + out2 =3D self.send_pkts_getouput(pkts=3DMAC_IPV4_PAY['unmatc= hed']) > + rfc.check_mark(out2, pkt_num=3Dlen(MAC_IPV4_PAY['unmatched']= ), > + check_param=3D{"port_id": 0, "queue": list(ra= nge(8))}, > stats=3DTrue) > except Exception as e: > - result =3D False > - print((RED("failed:" + str(e)))) > + raise Exception(e) > finally: > - # restore testpmd config to default, then verify results > - self.config_testpmd() > - self.verify(result, "check failed") > + self.dut.kill_all() > + self.launch_testpmd_with_mark() > + > + def test_invalid_parameters_of_input_set(self): > + rule =3D [ > + "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x12345678 / gtp_psc qfi is 0x100 / end actions queue index 1 / end", > + "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x100000000 / gtp_psc qfi is 0x5 / end actions queue index 2 / end", > + "flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is > 0x100000000 / end actions queue index 1 / end" > + ] > + self.create_fdir_rule(rule, check_stats=3DFalse, msg=3D"Bad argu= ments") > + self.check_fdir_rule(stats=3DFalse) > + > + def test_invalid_parameters_of_mark_id(self): > + rule =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 > src is 192.168.0.20 / end actions queue index 1 / mark id 4294967296 / en= d" > + self.create_fdir_rule(rule, check_stats=3DFalse, msg=3D"Bad argu= ments") > + self.check_fdir_rule(stats=3DFalse) >=20 > - def test_mac_ipv4_gtpu_ipv4_pay_teid_mark_count_query(self): > - rule =3D "flow create 1 ingress pattern eth / ipv4 / udp / gtpu = teid is > 0x12345678 / gtp_psc / ipv4 / end actions rss queues 0 1 2 3 4 5 6 7 8 9 = 10 11 12 > 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3= 7 38 39 > 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 e= nd / > mark id 100 / count / end" > - p_gtpu1 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", dst=3D"00:00:00:00= :01:03") / > IP(src=3D"192.168.0.20", dst=3D"192.168.0.21") / UDP(dport=3D2152) / > GTP_U_Header(gtp_type=3D255, teid=3D0x12345678) / > GTP_PDUSession_ExtensionHeader(pdu_type=3D0, qos_flow=3D0x35) / IP() / > Raw("x" * 20)' > - p_gtpu2 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/UDP()/Raw("x"*20)' > - # create fdir rule > + def test_duplicated_rules(self): > + rule =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions q= ueue index > 1 / end" > rule_li =3D self.create_fdir_rule(rule, check_stats=3DTrue) > - out =3D self.send_pkts_getouput(pkts=3Dp_gtpu1, port_id=3D1, mar= k=3DTrue) > - check_param =3D {"port_id": 1, "queue": list(range(64)), "mark_i= d": 100} > - rfc.check_mark(out, pkt_num=3D1, check_param=3Dcheck_param) > - > - out =3D self.send_pkts_getouput(pkts=3Dp_gtpu2, port_id=3D1, mar= k=3DTrue) > - rfc.check_queue(out[1], pkt_num=3D1, check_param=3Dcheck_param) > - mark_scanner =3D "FDIR matched ID=3D(0x\w+)" > - res =3D re.search(mark_scanner, out[0]) > - self.verify(not res, "FDIR should not in %s" % out[0]) > - self.query_count(1, 1, 1, 0) > - > - self.check_fdir_rule(port_id=3D1, stats=3DTrue) > - self.destroy_fdir_rule(port_id=3D1, rule_id=3Drule_li[0]) > - # send matched packets > - out =3D self.send_pkts_getouput(pkts=3Dp_gtpu1, port_id=3D1, mar= k=3DTrue) > - rfc.check_queue(out[1], pkt_num=3D1, check_param=3Dcheck_param, > stats=3DTrue) > - res =3D re.search(mark_scanner, out[0]) > - self.verify(not res, "FDIR should not in %s" % out[0]) > - self.check_fdir_rule(port_id=3D1, stats=3DFalse) > + self.create_fdir_rule(rule, check_stats=3DFalse, msg=3D"Rule alr= eady exists!: > File exists", validate=3DFalse) > + self.check_fdir_rule(stats=3DTrue, rule_list=3Drule_li) >=20 > - def test_mac_ipv4_gtpu_ipv4_pay_qfi_mark_count_query(self): > - rule =3D "flow create 1 ingress pattern eth / ipv4 / udp / gtpu = / gtp_psc qfi > is 0x34 / ipv4 / end actions drop / mark id 3 / count / end" > - p_gtpu1 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/TCP()/Raw("x"*20)' > - p_gtpu2 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x35)/IP()/Raw("x"*20)' > - # create fdir rule > - res =3D self.create_fdir_rule(rule, check_stats=3DTrue) > - check_param =3D {"port_id": 1, "mark": True, "mark_id": 3} > - # send matched packet > - out =3D self.send_pkts_getouput(pkts=3Dp_gtpu1, port_id=3D1, mar= k=3DTrue) > - rfc.check_mark(out, pkt_num=3D1, check_param=3Dcheck_param, > stats=3DTrue) > - # send unmatched packet > - out1 =3D self.send_pkts_getouput(pkts=3Dp_gtpu2, port_id=3D1, ma= rk=3DTrue) > - rfc.check_mark(out1, pkt_num=3D1, check_param=3Dcheck_param, > stats=3DFalse) > - self.query_count(1, 1, 1, 0) > - self.check_fdir_rule(port_id=3D1, stats=3DTrue, rule_list=3Dres) > - self.destroy_fdir_rule(port_id=3D1, rule_id=3D0) > - # send matched packets > - out =3D self.send_pkts_getouput(p_gtpu1, port_id=3D1, mark=3DTru= e) > - rfc.check_mark(out, pkt_num=3D1, check_param=3D{"port_id": 1}, > stats=3DFalse) > - self.check_fdir_rule(port_id=3D1, stats=3DFalse) > + def test_conflicted_rules(self): > + rule1 =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions q= ueue index > 1 / end" > + rule_li =3D self.create_fdir_rule(rule1, check_stats=3DTrue) > + rule2 =3D [ > + "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions queue in= dex 2 / > end", > + "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions drop / e= nd"] > + self.create_fdir_rule(rule2, check_stats=3DFalse, msg=3D"Rule al= ready > exists!: File exists", validate=3DFalse) > + self.check_fdir_rule(stats=3DTrue, rule_list=3Drule_li) > + > + def test_conflicted_actions(self): > + rule1 =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:= 44:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions q= ueue index > 1 / rss queues 2 3 end / end" > + self.create_fdir_rule(rule1, check_stats=3DFalse, msg=3D"Invalid= input > action number: Invalid argument") > + self.check_fdir_rule(stats=3DFalse) >=20 > - def test_mac_ipv4_gtpu_ipv4_pay_multirules(self): > - rule1 =3D "flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / gtp_psc qfi is 0x34 / ipv4 / end actions queue index 1 / end= " > - rule2 =3D "flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / gtp_psc qfi is 0x35 / ipv4 / end actions queue index 2 / end= " > - rule3 =3D "flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x1234567 / gtp_psc qfi is 0x35 / ipv4 / end actions queue index 3 / end" > - res =3D self.create_fdir_rule(rule=3D[rule1, rule2, rule3], chec= k_stats=3DTrue) > - rule4 =3D "flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x1234567 / gtp_psc qfi is 0x35 / ipv4 / end actions queue index 3 / end" > - rule5 =3D "flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x1234567 / gtp_psc qfi is 0x35 / ipv4 / end actions queue index 4 / end" > - rule6 =3D "flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x1234567 / gtp_psc qfi is 0x75 / ipv4 / end actions queue index 4 / end" > - res2 =3D self.create_fdir_rule(rule=3D[rule4, rule5, rule6], che= ck_stats=3DFalse) > - rule7 =3D "flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x1234567 / gtp_psc qfi is 0x34 / ipv4 / end actions queue index 3 / end" > - res3 =3D self.create_fdir_rule(rule7, check_stats=3DTrue) > - p_gtpu1 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/Raw("x"*20)' > - p_gtpu2 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/Raw("x"*20)' > - p_gtpu3 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x35)/IP()/Raw("x"*20)' > - p_gtpu4 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x35)/IP()/Raw("x"*20)' > - p_gtpu5 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x1234567)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x36)/IP()/Raw("x"*20)' > - out1 =3D self.send_pkts_getouput(p_gtpu1) > - rfc.check_queue(out1, pkt_num=3D1, check_param=3D{"queue": 1}) > - out2 =3D self.send_pkts_getouput(p_gtpu2) > - rfc.check_queue(out2, pkt_num=3D1, check_param=3D{"queue": 3}) > - out3 =3D self.send_pkts_getouput(p_gtpu3) > - rfc.check_queue(out3, pkt_num=3D1, check_param=3D{"queue": 2}) > - out4 =3D self.send_pkts_getouput(p_gtpu4) > - rfc.check_queue(out4, pkt_num=3D1, check_param=3D{"queue": 3}) > - out5 =3D self.send_pkts_getouput(p_gtpu5) > - rfc.check_queue(out5, pkt_num=3D1, check_param=3D{"queue": [1, 2= , 3]}, > stats=3DFalse) > - res.extend(res3) > - self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3Dres) > - self.dut.send_command("flow flush 0", timeout=3D1) > - out1 =3D self.send_pkts_getouput(p_gtpu1) > - rfc.check_queue(out1, pkt_num=3D1, check_param=3D{"queue": 1}, > stats=3DFalse) > - out2 =3D self.send_pkts_getouput(p_gtpu2) > - rfc.check_queue(out2, pkt_num=3D1, check_param=3D{"queue": 3}, > stats=3DFalse) > - out3 =3D self.send_pkts_getouput(p_gtpu3) > - rfc.check_queue(out3, pkt_num=3D1, check_param=3D{"queue": 2}, > stats=3DFalse) > - out4 =3D self.send_pkts_getouput(p_gtpu4) > - rfc.check_queue(out4, pkt_num=3D1, check_param=3D{"queue": 3}, > stats=3DFalse) > - > - def test_mac_ipv4_gtpu_ipv4_pay_two_ports(self): > - rule1 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / gtp_psc qfi is 0x34 / ipv4 / end actions queue index 1 / end= ' > - rule2 =3D 'flow create 1 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / gtp_psc qfi is 0x34 / ipv4 / end actions queue index 1 / end= ' > - rule3 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / gtp_psc qfi is 0x35 / ipv4 / end actions queue index 2 / end= ' > - rule4 =3D 'flow create 1 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / gtp_psc qfi is 0x35 / ipv4 / end actions queue index 3 / end= ' > - rule5 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / gtp_psc qfi is 0x34 / ipv4 / end actions queue index 1 / end= ' > - rule6 =3D 'flow create 1 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / gtp_psc / ipv4 / end actions queue index 2 / end' > - > - p_gtpu1 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/Raw("x"*20)' > - p_gtpu2 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x35)/IP()/Raw("x"*20)' > - p_gtpu3 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:00:00:00:01:03")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x35)/IP()/Raw("x"*20)' > - res1 =3D self.create_fdir_rule([rule1, rule2], check_stats=3DTru= e) > - out1 =3D self.send_pkts_getouput(p_gtpu1) > - rfc.check_queue(out1, pkt_num=3D1, check_param=3D{"queue": 1}) > - out2 =3D self.send_pkts_getouput(p_gtpu1, port_id=3D1) > - rfc.check_queue(out2, pkt_num=3D1, check_param=3D{"port_id": 1, > "queue": 1}) > - > - res2 =3D self.create_fdir_rule([rule3, rule4], check_stats=3DTru= e) > - out1 =3D self.send_pkts_getouput(p_gtpu2) > - rfc.check_queue(out1, pkt_num=3D1, check_param=3D{"queue": 2}) > - out2 =3D self.send_pkts_getouput(p_gtpu2, port_id=3D1) > - rfc.check_queue(out2, pkt_num=3D1, check_param=3D{"port_id": 1, > "queue": 3}) > + def test_void_action(self): > + rule =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions e= nd" > + self.create_fdir_rule(rule, check_stats=3DFalse, msg=3D"Invalid = input action: > Invalid argument") > + self.check_fdir_rule(stats=3DFalse) >=20 > - self.dut.send_command("flow flush 0", timeout=3D1) > - self.dut.send_command("flow flush 1", timeout=3D1) > + def _test_unsupported_action(self): > + # now dpdk has already support only count action, so this case n= eed > update or abandon > + rule =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / end actions c= ount / end" > + self.create_fdir_rule(rule, check_stats=3DFalse, msg=3D"Invalid = input action: > Invalid argument") > + self.check_fdir_rule(stats=3DFalse) >=20 > - res3 =3D self.create_fdir_rule([rule5, rule6]) > - self.verify(all(res3), "rules should be create seccess, result i= s %s" % res3) > - out1 =3D self.send_pkts_getouput(p_gtpu3) > - rfc.check_queue(out1, pkt_num=3D1, check_param=3D{"queue": 1}, > stats=3DFalse) > - out2 =3D self.send_pkts_getouput(p_gtpu3, port_id=3D1) > - rfc.check_queue(out2, pkt_num=3D1, check_param=3D{"port_id": 1, > "queue": 2}, stats=3DTrue) > + def test_delete_a_nonexistent_rule(self): > + self.check_fdir_rule(stats=3DFalse) > + out =3D self.pmd_output.execute_cmd("flow destroy 0 rule 0") > + self.verify(not "error" in out, "failed, destroy non-existent ru= le should > not raise error") > + self.check_fdir_rule(stats=3DFalse) > + out =3D self.pmd_output.execute_cmd("flow flush 0") > + self.verify(not "error" in out, "failed, flush non-existent rule= should not > raise error") > + self.check_fdir_rule(stats=3DFalse) >=20 > - self.check_fdir_rule(port_id=3D0, rule_list=3Dres3[0]) > - self.check_fdir_rule(port_id=3D1, rule_list=3Dres3[1]) > + def test_unsupported_input_set_field(self): > + rule =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 tc is 2 / end actions queue index= 1 / end" > + self.create_fdir_rule(rule, check_stats=3DFalse, msg=3D"Bad argu= ments") > + self.check_fdir_rule(stats=3DFalse) >=20 > - self.destroy_fdir_rule(0, 0) > - self.destroy_fdir_rule(1, 0) > + def test_invalid_port(self): > + rule =3D "flow create 2 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / end= " > + self.create_fdir_rule(rule, check_stats=3DFalse, msg=3D"No such = device: No > such device") > + out =3D self.pmd_output.execute_cmd("flow list 2") > + self.verify("Invalid port 2" in out, "expect Invalid port 2 in %= s" % out) >=20 > - out1 =3D self.send_pkts_getouput([p_gtpu1, p_gtpu2]) > - rfc.check_queue(out1, pkt_num=3D2, check_param=3D{"port_id": 0, > "queue": [1, 2]}, stats=3DFalse) > - out2 =3D self.send_pkts_getouput([p_gtpu1, p_gtpu2, p_gtpu3], > port_id=3D1) > - rfc.check_queue(out2, pkt_num=3D3, check_param=3D{"port_id": 1, > "queue": [1, 2, 3]}, stats=3DFalse) > + def _test_unsupported_pattern(self): > + # only test with OS default package > + rule =3D "flow create 0 ingress pattern eth / ipv4 / udp / gtpu = teid is > 0x12345678 / gtp_psc qfi is 0x34 / end actions drop / end" > + self.create_fdir_rule(rule, check_stats=3DFalse) > + self.check_fdir_rule(stats=3DFalse) >=20 > - self.check_fdir_rule(0, stats=3DFalse) > - self.check_fdir_rule(1, stats=3DFalse) > + def test_conflict_patterns(self): > + fdir_flag =3D "ice_flow_create(): Succeeded to create (1) flow" > + switch_flag =3D "ice_flow_create(): Succeeded to create (2) flow= " > + pkts =3D > ['Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168= .0.21")/R > aw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21") > /UDP(sport=3D22, dport=3D23)/ Raw("x" * 80)'] > + rule1 =3D 'flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / end > actions queue index 1 / end' > + out =3D self.pmd_output.execute_cmd(rule1) > + self.verify(fdir_flag in out, "fdir rule should be created") > + out =3D self.send_pkts_getouput(pkts=3Dpkts) > + rfc.check_mark(out, pkt_num=3D2, check_param=3D{"port_id": 0, "q= ueue": > 1}, stats=3DTrue) >=20 > - def test_mac_ipv4_gtpu_ipv4_pay_wrong_parameters(self): > - rule1 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / gtp_psc qfi is 0x100 / ipv4 / end actions queue index 1 / en= d' > - rule2 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x100000000 / gtp_psc qfi is 0x5 / ipv4 / end actions queue index 2 / end= ' > - self.create_fdir_rule([rule1, rule2], check_stats=3DFalse) > - self.check_fdir_rule(0, stats=3DFalse) > + rule2 =3D "flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / udp > src is 22 dst is 23 / end actions queue index 2 / end" > + out =3D self.pmd_output.execute_cmd(rule2) > + self.verify(switch_flag in out, "switch rule should be created") > + out =3D self.send_pkts_getouput(pkts=3Dpkts[0]) > + rfc.check_mark(out, pkt_num=3D1, check_param=3D{"port_id": 0, "q= ueue": > 1}, stats=3DTrue) > + out =3D self.send_pkts_getouput(pkts=3Dpkts[1]) > + rfc.check_mark(out, pkt_num=3D1, check_param=3D{"port_id": 0, "q= ueue": > 2}, stats=3DTrue) > + > + self.pmd_output.execute_cmd('flow flush 0') > + out =3D self.pmd_output.execute_cmd(rule2) > + self.verify(fdir_flag in out, "fdir rule should be created") > + out =3D self.send_pkts_getouput(pkts=3Dpkts[1]) > + rfc.check_mark(out, pkt_num=3D1, check_param=3D{"port_id": 0, "q= ueue": > 2}, stats=3DTrue) > + out =3D self.pmd_output.execute_cmd(rule1) > + self.verify(switch_flag in out, "switch rule should be created") > + out =3D self.send_pkts_getouput(pkts=3Dpkts[1]) > + rfc.check_mark(out, pkt_num=3D1, check_param=3D{"port_id": 0, "q= ueue": > 1}, stats=3DTrue) > + > + def test_count_for_1_rule_of_1_port(self): > + rule =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / = end actions > queue index 1 / count / end" > + rule_li =3D self.create_fdir_rule(rule, check_stats=3DTrue) > + out =3D self.send_pkts_getouput(pkts=3DMAC_IPV4_PAY['match']) > + rfc.check_mark(out, pkt_num=3Dlen(MAC_IPV4_PAY['match']), > check_param=3D{"port_id": 0, "queue": 1}, > + stats=3DTrue) > + out =3D self.send_pkts_getouput(pkts=3DMAC_IPV4_PAY['unmatched']= ) > + rfc.check_mark(out, pkt_num=3Dlen(MAC_IPV4_PAY['unmatched']), > check_param=3D{"port_id": 0, "queue": 1, "rss": True}, > + stats=3DFalse) > + self.query_count(1, 2, 0, 0) > + self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3Drule= _li) > + self.destroy_fdir_rule(0, rule_li) > + out =3D self.send_pkts_getouput(pkts=3DMAC_IPV4_PAY['match']) > + rfc.check_mark(out, pkt_num=3Dlen(MAC_IPV4_PAY['match']), > check_param=3D{"port_id": 0, "queue": 1, "rss": True}, > + stats=3DFalse) > + self.check_fdir_rule(stats=3DFalse) > + out =3D self.pmd_output.execute_cmd("flow query 0 0 count") > + self.verify("Flow rule #0 not found" in out, "query should faile= d") >=20 > def test_count_query_identifier_share(self): > rule1 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.1 / end > actions queue index 1 / count identifier 0x1234 shared on / end' > - rule2 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.2 / end > actions queue index 2 / count identifier 0x1234 shared on / end' > - rule3 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.3 / end > actions queue index 3 / count identifier 0x1234 shared off / end' > - rule4 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.4 / end > actions queue index 4 / count identifier 0x1234 / end' > + rule2 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.2 / end > actions rss queues 2 3 end / count identifier 0x1234 shared on / end' > + rule3 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.3 / end > actions passthru / mark / count identifier 0x1234 shared off / end' > + rule4 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.4 / end > actions mark id 1 / rss / count identifier 0x1234 / end' > rule5 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.5 / end > actions queue index 5 / count shared on / end' > rule6 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.6 / end > actions drop / count shared on / end' > rule7 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.7 / end > actions drop / count identifier 0x1235 shared on / end' > + rule8 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.0.8 / end > actions rss / count / end' >=20 > pkt1 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.1",dst=3D"192.168.0= .21") / > Raw("x" * 80)' > pkt2 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.2",dst=3D"192.168.0= .21") / > Raw("x" * 80)' > @@ -1287,23 +1818,26 @@ class TestCVLFdir(TestCase): > pkt5 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.5",dst=3D"192.168.0= .21") / > Raw("x" * 80)' > pkt6 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.6",dst=3D"192.168.0= .21") / > Raw("x" * 80)' > pkt7 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.7",dst=3D"192.168.0= .21") / > Raw("x" * 80)' > + pkt8 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.8",dst=3D"192.168.0= .21") / > Raw("x" * 80)' >=20 > - res =3D self.create_fdir_rule([rule1, rule2, rule3, rule4, rule5= , rule6, rule7]) > + res =3D self.create_fdir_rule([rule1, rule2, rule3, rule4, rule5= , rule6, rule7, > rule8], check_stats=3DTrue) > self.verify(all(res), "create rules failed, result: %s" % res) > out1 =3D self.send_pkts_getouput(pkt1, count=3D10) > - rfc.check_queue(out1, pkt_num=3D10, check_param=3D{"queue": 1}, > stats=3DTrue) > + rfc.check_mark(out1, pkt_num=3D10, check_param=3D{"queue": 1}, > stats=3DTrue) > out2 =3D self.send_pkts_getouput(pkt2, count=3D10) > - rfc.check_queue(out2, pkt_num=3D10, check_param=3D{"queue": 2}, > stats=3DTrue) > + rfc.check_mark(out2, pkt_num=3D10, check_param=3D{"queue": [2, 3= ]}, > stats=3DTrue) > out3 =3D self.send_pkts_getouput(pkt3, count=3D10) > - rfc.check_queue(out3, pkt_num=3D10, check_param=3D{"queue": 3}, > stats=3DTrue) > + rfc.check_mark(out3, pkt_num=3D10, check_param=3D{"mark_id": 0, = "rss": > True}, stats=3DTrue) > out4 =3D self.send_pkts_getouput(pkt4, count=3D10) > - rfc.check_queue(out4, pkt_num=3D10, check_param=3D{"queue": 4}, > stats=3DTrue) > + rfc.check_mark(out4, pkt_num=3D10, check_param=3D{"mark_id": 1, = "rss": > True}, stats=3DTrue) > out5 =3D self.send_pkts_getouput(pkt5, count=3D10) > - rfc.check_queue(out5, pkt_num=3D10, check_param=3D{"queue": 5}, > stats=3DTrue) > - out6 =3D self.send_pkts_getouput(pkt6, count=3D10) > + rfc.check_mark(out5, pkt_num=3D10, check_param=3D{"queue": 5}, > stats=3DTrue) > + out6 =3D self.send_pkts_getouput(pkt6, count=3D10, drop=3DTrue) > rfc.check_drop(out6, pkt_num=3D10, check_param=3D{"port_id": 0}) > - out7 =3D self.send_pkts_getouput(pkt7, count=3D10) > + out7 =3D self.send_pkts_getouput(pkt7, count=3D10, drop=3DTrue) > rfc.check_drop(out7, pkt_num=3D10, check_param=3D{"port_id": 0}) > + out8 =3D self.send_pkts_getouput(pkt8, count=3D10) > + rfc.check_mark(out8, pkt_num=3D10, check_param=3D{"rss": True}, > stats=3DTrue) >=20 > self.query_count(1, 20, 0, 0) > self.query_count(1, 20, 0, 1) > @@ -1312,26 +1846,26 @@ class TestCVLFdir(TestCase): > self.query_count(1, 20, 0, 4) > self.query_count(1, 20, 0, 5) > self.query_count(1, 10, 0, 6) > + self.query_count(1, 10, 0, 7) >=20 > self.check_fdir_rule(0, stats=3DTrue, rule_list=3Dres) > self.dut.send_command("flow flush 0", timeout=3D1) > - out =3D self.send_pkts_getouput(pkts=3D[pkt1, pkt2, pkt3, pkt4, = pkt5]) > - rfc.check_queue(out, pkt_num=3D5, check_param=3D{"port_id": 0, "= queue": > list(range(1, 6))}, stats=3DFalse) > - out6 =3D self.send_pkts_getouput(pkt6, count=3D10) > - rfc.check_drop(out6, pkt_num=3D10, check_param=3D{"port_id": 0}, > stats=3DFalse) > - out7 =3D self.send_pkts_getouput(pkt7, count=3D10) > - rfc.check_drop(out7, pkt_num=3D10, check_param=3D{"port_id": 0}, > stats=3DFalse) > - > self.check_fdir_rule(stats=3DFalse) >=20 > - def test_multi_patterns_count_query(self): > - rule1 =3D 'flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / tcp > src is 22 dst is 23 / end actions queue index 1 / count / end' > - rule2 =3D 'flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / udp > src is 22 dst is 23 / end actions drop / count / end' > - rule3 =3D 'flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / sctp > src is 22 dst is 23 / end actions rss queues 62 63 end / count / end' > - rule4 =3D 'flow create 0 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queu= e > index 1 / count / end' > - rule5 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / vxla= n / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = queue > index 3 / count / end' > - rule6 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / vxla= n / eth / ipv4 > src is 192.168.0.20 / tcp dst is 23 / end actions queue index 4 / count /= end' > - rule7 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / vxla= n / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= queue > index 5 / count / end' > + self.send_pkts_getouput(pkts=3D[pkt1, pkt2, pkt3, pkt4, pkt5, pk= t6, pkt7, > pkt8]) > + out =3D self.pmd_output.execute_cmd("flow query 0 0 count") > + self.verify("Flow rule #0 not found" in out, "query should faile= d") > + > + def test_multi_patterns_mark_count_query(self): > + rule1 =3D 'flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / tcp > src is 22 dst is 23 / end actions queue index 1 / mark id 0 / count / end= ' > + rule2 =3D 'flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / udp > src is 22 dst is 23 / end actions drop / mark id 1 / count / end' > + rule3 =3D 'flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / sctp > src is 22 dst is 23 / end actions rss queues 62 63 end / mark id 2 / coun= t / end' > + rule4 =3D 'flow create 0 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queu= e > index 1 / mark id 3 / count / end' > + rule5 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / vxla= n / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions = queue > index 3 / mark id 4 / count / end' > + rule6 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / vxla= n / eth / ipv4 > src is 192.168.0.20 / tcp dst is 23 / end actions queue index 4 / count /= mark id > 5 / end' > + rule7 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / vxla= n / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 / sctp src is 22 dst is 23 / end actions= queue > index 5 / mark id 6 / count / end' > + rule8 =3D 'flow create 1 ingress pattern eth / ipv4 / udp / gtpu= teid is > 0x12345678 / end actions rss queues 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15= 16 17 > 18 19 20 21 22 23 24 25 26 27 28 29 30 31 \ > + 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54= 55 56 57 > 58 59 60 61 62 63 end / mark id 100 / count / end' >=20 > pkt1 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21") > /TCP(sport=3D22, dport=3D23)/ Raw("x" * 80)' > pkt2 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21") > /UDP(sport=3D22, dport=3D23)/ Raw("x" * 80)' > @@ -1340,203 +1874,359 @@ class TestCVLFdir(TestCase): > pkt5 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D4790)/VXLAN(flags=3D0x= c)/IP( > dst=3D"192.168.0.21", src=3D"192.168.0.20")/UDP(sport=3D22,dport=3D23)/("= X"*480)' > pkt6 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=3D2)/Ether(dst=3D"= 00:11: > 22:33:44:55")/IP(src=3D"192.168.0.20")/TCP(dport=3D23)/("X"*480)' > pkt7 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN(vni=3D2)/Ether()/IP(sr= c=3D"19 > 2.168.0.20", dst=3D"192.168.0.21")/SCTP(sport=3D22,dport=3D23)/("X"*480)' > + pkt8 =3D 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.2= 0", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/IP()/Raw("x"*20)' >=20 > - res =3D self.create_fdir_rule(rule=3D[rule1, rule2, rule3, rule4= , rule5, rule6, > rule7], check_stats=3DTrue) > + res =3D self.create_fdir_rule(rule=3D[rule1, rule2, rule3, rule4= , rule5, rule6, > rule7, rule8], check_stats=3DTrue) > self.verify(all(res), "create rules failed, result %s" % res) > out =3D self.send_pkts_getouput(pkts=3Dpkt1, count=3D10) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"queue": 1}, > stats=3DTrue) > - out =3D self.send_pkts_getouput(pkts=3Dpkt2, count=3D10) > + rfc.check_mark(out, pkt_num=3D10, check_param=3D{"queue": 1, > "mark_id": 0}, stats=3DTrue) > + out =3D self.send_pkts_getouput(pkts=3Dpkt2, count=3D10, drop=3D= True) > rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 0}) > out =3D self.send_pkts_getouput(pkts=3Dpkt3, count=3D10) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"queue": [62, = 63]}, > stats=3DTrue) > + rfc.check_mark(out, pkt_num=3D10, check_param=3D{"queue": [62, 6= 3], > "mark_id": 2}, stats=3DTrue) > out =3D self.send_pkts_getouput(pkts=3Dpkt4, count=3D10) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"queue": 1}, > stats=3DTrue) > + rfc.check_mark(out, pkt_num=3D10, check_param=3D{"queue": 1, > "mark_id": 3}, stats=3DTrue) > out =3D self.send_pkts_getouput(pkts=3Dpkt5, count=3D10) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"queue": 3}, > stats=3DTrue) > + rfc.check_mark(out, pkt_num=3D10, check_param=3D{"queue": 3, > "mark_id": 4}, stats=3DTrue) > out =3D self.send_pkts_getouput(pkts=3Dpkt6, count=3D10) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"queue": 4}, > stats=3DTrue) > + rfc.check_mark(out, pkt_num=3D10, check_param=3D{"queue": 4, > "mark_id": 5}, stats=3DTrue) > out =3D self.send_pkts_getouput(pkts=3Dpkt7, count=3D10) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"queue": 5}, > stats=3DTrue) > + rfc.check_mark(out, pkt_num=3D10, check_param=3D{"queue": 5, > "mark_id": 6}, stats=3DTrue) > + out =3D self.send_pkts_getouput(port_id=3D1, pkts=3Dpkt8, count= =3D10) > + rfc.check_mark(out, pkt_num=3D10, check_param=3D{"port_id": 1, "= rss": > True, "mark_id": 100}, stats=3DTrue) >=20 > for i in range(7): > self.query_count(1, 10, port_id=3D0, rule_id=3Di) > - self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3Dres) > + self.query_count(1, 10, port_id=3D1, rule_id=3D0) > + self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3Dres[= :-1]) > + self.dut.send_command("flow flush 0", timeout=3D1) > + self.check_fdir_rule(stats=3DFalse) > + > + self.send_pkts_getouput(pkts=3D[pkt1, pkt2, pkt3, pkt4, pkt5, pk= t6, pkt7, > pkt8]) > + out =3D self.pmd_output.execute_cmd("flow query 0 0 count") > + self.verify("Flow rule #0 not found" in out, "query should faile= d") > + > + def test_max_count_number(self): > + pattern =3D "flow create 0 ingress pattern eth / ipv4 src is 192= .168.0.{} / > end actions drop / count / end" > + rules =3D [pattern.format(i) for i in range(1, 256)] + [ > + "flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1= / end actions > drop / count / end"] > + res =3D self.create_fdir_rule(rules, check_stats=3DTrue) > + > + rule2 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.1.2 / end > actions drop / count / end' > + self.create_fdir_rule(rule2, check_stats=3DFalse, msg=3D"No free= counter > found", validate=3DFalse) >=20 > + pkt =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.1.1",dst=3D"192.168.0= .21") / > Raw("x" * 80)' > + out =3D self.send_pkts_getouput(pkt, count=3D10, drop=3DTrue) > + rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 0}, > stats=3DTrue) > + self.query_count(1, 10, port_id=3D0, rule_id=3D255) > + self.check_fdir_rule(0, stats=3DTrue, rule_list=3Dres) > self.dut.send_command("flow flush 0", timeout=3D1) > - out =3D self.send_pkts_getouput(pkts=3Dpkt1, count=3D10) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"queue": 1}, > stats=3DFalse) > - out =3D self.send_pkts_getouput(pkts=3Dpkt2, count=3D10) > + out =3D self.send_pkts_getouput(pkt, count=3D10, drop=3DTrue) > rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 0}, > stats=3DFalse) > - out =3D self.send_pkts_getouput(pkts=3Dpkt3, count=3D1) > - rfc.check_queue(out, pkt_num=3D1, check_param=3D{"queue": [62, 6= 3]}, > stats=3DFalse) > - out =3D self.send_pkts_getouput(pkts=3D[pkt4, pkt5, pkt6, pkt7],= count=3D1) > - rfc.check_queue(out, pkt_num=3D4, check_param=3D{"queue": [1, 3,= 4, 5]}, > stats=3DFalse) > self.check_fdir_rule(stats=3DFalse) > + self.dut.send_command("stop", timeout=3D2) > + self.dut.send_command("quit", timeout=3D2) > + self.launch_testpmd_with_mark() > + > + def test_same_rule_on_two_ports(self): > + rule =3D [ > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid = is 0x12345678 > / gtp_psc qfi is 0x34 / end actions queue index 1 / mark / end', > + 'flow create 1 ingress pattern eth / ipv4 / udp / gtpu teid = is 0x12345678 > / gtp_psc qfi is 0x34 / end actions queue index 1 / mark / end'] > + self.create_fdir_rule(rule=3Drule, check_stats=3DTrue) > + p_gtpu1 =3D 'Ether(src=3D"a4:bf:01:51:27:ca", > dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20", > dst=3D"192.168.0.21")/UDP(dport=3D2152)/GTP_U_Header(gtp_type=3D255, > teid=3D0x12345678)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP()/Raw("x"*20)' > + out1 =3D self.send_pkts_getouput(pkts=3Dp_gtpu1, port_id=3D0) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": 0, "= queue": > 1, "mark_id": 0}, stats=3DTrue) > + out2 =3D self.send_pkts_getouput(pkts=3Dp_gtpu1, port_id=3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": 1, "= queue": > 1, "mark_id": 0}, stats=3DTrue) > + self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3D['0'= ]) > + self.check_fdir_rule(port_id=3D1, stats=3DTrue, rule_list=3D['0'= ]) > + self.destroy_fdir_rule(port_id=3D0) > + self.check_fdir_rule(port_id=3D0, stats=3DFalse) > + self.check_fdir_rule(port_id=3D1, stats=3DTrue, rule_list=3D['0'= ]) > + out1 =3D self.send_pkts_getouput(pkts=3Dp_gtpu1, port_id=3D0) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": 0, "= queue": > 1, "rss": True}, stats=3DFalse) > + out2 =3D self.send_pkts_getouput(pkts=3Dp_gtpu1, port_id=3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": 1, "= queue": > 1, "mark_id": 0}, stats=3DTrue) > + self.destroy_fdir_rule(port_id=3D1) > + self.check_fdir_rule(port_id=3D0, stats=3DFalse) > + self.check_fdir_rule(port_id=3D1, stats=3DFalse) > + out1 =3D self.send_pkts_getouput(pkts=3Dp_gtpu1, port_id=3D0) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": 0, "= queue": > 1, "rss": True}, stats=3DFalse) > + out2 =3D self.send_pkts_getouput(pkts=3Dp_gtpu1, port_id=3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": 1, "= queue": > 1, "rss": True}, stats=3DFalse) > + > + def test_same_intput_set_different_actions_on_two_ports(self): > + rule =3D [ > + 'flow create 0 ingress pattern eth / ipv4 src is 192.168.0.2= 0 dst is > 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / mark= id 1 / > end', > + 'flow create 1 ingress pattern eth / ipv4 src is 192.168.0.2= 0 dst is > 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 2 3 end /= mark id > 1 / end'] > + self.create_fdir_rule(rule=3Drule, check_stats=3DTrue) > + pkt =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21")/TC > P(sport=3D22,dport=3D23)/Raw("x" * 80)' > + out1 =3D self.send_pkts_getouput(pkts=3Dpkt, port_id=3D0) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": 0, "= queue": > 1, "mark_id": 1}, stats=3DTrue) > + out2 =3D self.send_pkts_getouput(pkts=3Dpkt, port_id=3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": 1, "= queue": > [2, 3], "mark_id": 1}, stats=3DTrue) > + self.pmd_output.execute_cmd('flow flush 0') > + self.pmd_output.execute_cmd('flow flush 1') > + self.check_fdir_rule(0, False) > + self.check_fdir_rule(1, False) > + out1 =3D self.send_pkts_getouput(pkts=3Dpkt, port_id=3D0) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": 0, "= queue": > 1, "rss": True}, stats=3DFalse) > + out2 =3D self.send_pkts_getouput(pkts=3Dpkt, port_id=3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": 1, "= queue": > [2, 3], "rss": True}, stats=3DFalse) >=20 > def test_two_ports_multi_patterns_count_query(self): > rules =3D [ > - 'flow create 1 ingress pattern eth / ipv4 dst is 192.168.0.2= 1 proto is 255 > tos is 4 / end actions queue index 1 / count / end', > - 'flow create 1 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /= sctp > src is 22 dst is 23 / end actions rss queues 6 7 end / count / end', > - 'flow create 1 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /= udp > src is 22 dst is 23 / end actions rss queues 6 7 end / count / end', > - 'flow create 1 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /= tcp > src is 22 dst is 23 / end actions queue index 2 / count / end', > + 'flow create 1 ingress pattern eth / ipv4 dst is 192.168.0.2= 1 proto is 255 > tos is 4 / end actions queue index 1 / mark id 1 / count identifier 0x123= 4 > shared on / end', > + 'flow create 1 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /= sctp > src is 22 dst is 23 / end actions rss queues 6 7 end / mark id 2 / count = identifier > 0x1234 shared on / end', > + 'flow create 1 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /= udp > src is 22 dst is 23 / end actions rss queues 6 7 end / mark id 1 / count = / end', > + 'flow create 1 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 hop is 2 tc is 1 /= tcp > src is 22 dst is 23 / end actions queue index 2 / mark / count / end', > 'flow create 1 ingress pattern eth / ipv4 / udp / vxlan / ip= v4 src is > 192.168.0.20 dst is 192.168.0.21 / end actions drop / count / end', > 'flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.2= 1 tos is 4 / tcp > src is 22 dst is 23 / end actions drop / count / end', > - 'flow create 0 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queu= e > index 1 / count / end' > - ] > + 'flow create 0 ingress pattern eth / ipv6 dst is > CDCD:910A:2222:5498:8475:1111:3900:2020 src is 2001::2 / end actions queu= e > index 1 / mark id 1 / count identifier 0x1234 shared on / end'] > pkts =3D [ >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > proto=3D255, ttl=3D2, tos=3D4) / Raw("x" * 80)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2",tc=3D1, hlim=3D2)/SCTP(sport=3D22,dport=3D23)/= ("X"*480)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2",tc=3D1, hlim=3D2)/UDP(sport=3D22,dport=3D23)/(= "X"*480)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2",tc=3D1, hlim=3D2)/TCP(sport=3D22,dport=3D23)/(= "X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", tc=3D1, hlim=3D2)/SCTP(sport=3D22,dport=3D23)= /("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", tc=3D1, hlim=3D2)/UDP(sport=3D22,dport=3D23)/= ("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", tc=3D1, hlim=3D2)/TCP(sport=3D22,dport=3D23)/= ("X"*480)', >=20 > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP()/VXLAN()/Ether()/IP(src=3D"19= 2.168 > .0.20", dst=3D"192.168.0.21")/("X"*480)', > 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.0.21", t= tl=3D2, > tos=3D4)/TCP(sport=3D22,dport=3D23)/Raw(load=3D"X"*480)', > - > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D1, tc=3D1, hlim=3D2)/("X"*480)', > - 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.0.21", t= tl=3D2, > tos=3D4)/TCP(sport=3D22,dport=3D23)/Raw(load=3D"X"*480)' > - ] > - res =3D self.create_fdir_rule(rule=3Drules, check_stats=3DTrue) > - out =3D self.send_pkts_getouput(pkts[0], port_id=3D1, count=3D10= ) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"port_id": 1, > "queue": 1}, stats=3DTrue) > - out =3D self.send_pkts_getouput(pkts[1:3], port_id=3D1, count=3D= 10) > - rfc.check_queue(out, pkt_num=3D20, check_param=3D{"port_id": 1, > "queue": [6, 7]}, stats=3DTrue) > - out =3D self.send_pkts_getouput(pkts[3], port_id=3D1, count=3D10= ) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"port_id": 1, > "queue": 2}, stats=3DTrue) > - out =3D self.send_pkts_getouput(pkts[4], port_id=3D1, count=3D10= ) > - rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 1}) > - out =3D self.send_pkts_getouput(pkts[5], count=3D10) > - rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 0}) > - out =3D self.send_pkts_getouput(pkts[6], count=3D10) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"port_id": 0, > "queue": 1}, stats=3DTrue) > - out =3D self.send_pkts_getouput(pkts[7], port_id=3D1, count=3D10= ) > - rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 1}, > stats=3DFalse) > - > + > 'Ether(dst=3D"00:11:22:33:44:55")/IPv6(dst=3D"CDCD:910A:2222:5498:8475:11= 11:3 > 900:2020", src=3D"2001::2", nh=3D0, tc=3D1, hlim=3D2)/("X"*480)', > + 'Ether(dst=3D"00:11:22:33:44:55")/IP(dst=3D"192.168.0.21", t= tl=3D2, > tos=3D4)/TCP(sport=3D22,dport=3D23)/Raw(load=3D"X"*480)'] > + > + self.create_fdir_rule(rule=3Drules, check_stats=3DTrue) > + > + out1 =3D self.send_pkts_getouput(pkts[0], port_id=3D1, count=3D1= 0) > + rfc.check_mark(out1, pkt_num=3D10, check_param=3D{"port_id": 1, > "queue": 1, "mark_id": 1}) > + out2 =3D self.send_pkts_getouput(pkts[1], port_id=3D1, count=3D1= 0) > + rfc.check_mark(out2, pkt_num=3D10, check_param=3D{"port_id": 1, > "queue": [6, 7], "mark_id": 2}) > + out3 =3D self.send_pkts_getouput(pkts[2], port_id=3D1, count=3D1= 0) > + rfc.check_mark(out3, pkt_num=3D10, check_param=3D{"port_id": 1, > "queue": [6, 7], "mark_id": 1}) > + out4 =3D self.send_pkts_getouput(pkts[3], port_id=3D1, count=3D1= 0) > + rfc.check_mark(out4, pkt_num=3D10, check_param=3D{"port_id": 1, > "queue": 2, "mark_id": 0}) > + out5 =3D self.send_pkts_getouput(pkts[4], port_id=3D1, count=3D1= 0, > drop=3DTrue) > + rfc.check_mark(out5, pkt_num=3D10, check_param=3D{"port_id": 1, = "drop": > True}) > + out6 =3D self.send_pkts_getouput(pkts[5], port_id=3D0, count=3D1= 0, > drop=3DTrue) > + rfc.check_mark(out6, pkt_num=3D10, check_param=3D{"port_id": 0, = "drop": > True}) > + out7 =3D self.send_pkts_getouput(pkts[6], port_id=3D0, count=3D1= 0) > + rfc.check_mark(out7, pkt_num=3D10, check_param=3D{"port_id": 0, > "queue": 1, "mark_id": 1}) > + out8 =3D self.send_pkts_getouput(pkts[7], port_id=3D1, count=3D1= 0) > + rfc.check_mark(out8, pkt_num=3D10, check_param=3D{"port_id": 1, > "mark_id": 0}) > + self.query_count(1, 20, 1, 0) > + self.query_count(1, 20, 1, 1) > + self.query_count(1, 10, 1, 2) > + self.query_count(1, 10, 1, 3) > + self.query_count(1, 10, 1, 4) > + self.query_count(1, 10, 0, 0) > + self.query_count(1, 10, 0, 1) > + self.check_fdir_rule(port_id=3D1, stats=3DTrue, rule_list=3Dlist= (map(str, > range(5)))) > + self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3Dlist= (map(str, > range(2)))) > + self.pmd_output.execute_cmd("flow flush 0") > + self.pmd_output.execute_cmd("flow flush 1") > + out1 =3D self.send_pkts_getouput(pkts=3Dpkts[:5].append(pkts[7])= , > port_id=3D1, count=3D10) > + rfc.check_mark(out1, pkt_num=3D60, check_param=3D{"port_id": 1}, > stats=3DFalse) > + out2 =3D self.send_pkts_getouput(pkts=3Dpkts[5:7], port_id=3D0, = count=3D10) > + rfc.check_mark(out2, pkt_num=3D20, check_param=3D{"port_id": 0}, > stats=3DFalse) > + self.check_fdir_rule(port_id=3D0, stats=3DFalse) > + self.check_fdir_rule(port_id=3D1, stats=3DFalse) > for i in range(5): > - self.query_count(1, 10, 1, i) > + out =3D self.pmd_output.execute_cmd("flow query %s %s count"= % (1, > i)) > + self.verify("Flow rule #%s not found" % i in out, "expect no= t rule > found, result %s" % out) > for i in range(2): > - self.query_count(1, 10, 0, i) > - self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3Dres[= 0:2]) > - self.check_fdir_rule(port_id=3D1, stats=3DTrue, rule_list=3Dres[= 2:]) > - > - self.dut.send_command("flow flush 0", timeout=3D1) > - self.dut.send_command("flow flush 1", timeout=3D1) > - > - out =3D self.send_pkts_getouput(pkts[0], port_id=3D1, count=3D10= ) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"port_id": 1, > "queue": 1}, stats=3DFalse) > - out =3D self.send_pkts_getouput(pkts[1:3], port_id=3D1, count=3D= 10) > - rfc.check_queue(out, pkt_num=3D20, check_param=3D{"port_id": 1, > "queue": [6, 7]}, stats=3DFalse) > - out =3D self.send_pkts_getouput(pkts[3], port_id=3D1, count=3D10= ) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"port_id": 1, > "queue": 2}, stats=3DFalse) > - out =3D self.send_pkts_getouput(pkts[4], port_id=3D1, count=3D10= ) > - rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 1}, > stats=3DFalse) > - out =3D self.send_pkts_getouput(pkts[5], count=3D10) > - rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 0}, > stats=3DFalse) > - out =3D self.send_pkts_getouput(pkts[6], count=3D10) > - rfc.check_queue(out, pkt_num=3D10, check_param=3D{"port_id": 0, > "queue": 1}, stats=3DFalse) > - out =3D self.send_pkts_getouput(pkts[7], port_id=3D0, count=3D10= ) > - rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 0}, > stats=3DFalse) > - self.check_fdir_rule(0, stats=3DFalse) > - self.check_fdir_rule(1, stats=3DFalse) > + out =3D self.pmd_output.execute_cmd("flow query %s %s count"= % (0, > i)) > + self.verify("Flow rule #%s not found" % i in out, "expect no= t rule > found, result %s" % out) > + > + def test_port_stop_start_reset(self): > + rule =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 > src is 192.168.0.20 dst is 192.168.0.21 / end actions queue index 1 / mar= k / > end" > + rule_li =3D self.create_fdir_rule(rule=3Drule, check_stats=3DTru= e) > + self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3Drule= _li) > + pkt =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21") / > Raw("x" * 80)' > + out1 =3D self.send_pkts_getouput(pkts=3Dpkt, port_id=3D0, count= =3D1) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": 0, "= queue": > 1, "mark_id": 0}, stats=3DTrue) > + self.pmd_output.execute_cmd("port stop 0") > + self.pmd_output.execute_cmd("port start 0") > + self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3Drule= _li) > + out2 =3D self.send_pkts_getouput(pkts=3Dpkt, port_id=3D0, count= =3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": 0, "= queue": > 1, "mark_id": 0}, stats=3DTrue) > + > + def test_add_delete_rules(self): > + self.pmd_output.execute_cmd("stop") > + self.dut.send_command("quit", timeout=3D2) > + cmd_path =3D '/tmp/add_delete_rules' > + cmds =3D [ > + 'flow create 0 ingress pattern eth / ipv4 src is 192.= 168.0.20 dst is > 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / mark= / end', > + 'flow create 0 ingress pattern eth / ipv4 src is 192.= 168.0.20 dst is > 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 2 3 end /= mark id > 1 / end', > + 'flow list 0', 'flow flush 0'] * 15360 > + cmds_li =3D map(lambda x: x + os.linesep, cmds) > + with open(cmd_path, 'w') as f: > + f.writelines(cmds_li) > + self.dut.session.copy_file_to(cmd_path, cmd_path) > + try: > + eal_param =3D self.dut.create_eal_parameters(cores=3D"1S/4C/= 1T", > ports=3D[self.pci0 + ",flow-mark-support=3D1", > + = self.pci1 + ",flow-mark-support=3D1"], > + socket=3Dself.por= ts_socket) > + param =3D " -- -i --portmask=3D%s --rxq=3D%d --txq=3D%d --po= rt- > topology=3Dloop --cmdline-file=3D%s" % ( > + self.portMask, 64, 64, cmd_path) > + command_line =3D self.dut.target + "/app/testpmd " + eal_par= am + > param > + out =3D self.dut.send_expect(command_line, 'testpmd>', timeo= ut=3D600) > + self.verify('Failed to create file' not in out, "create some= rule > failed: %s" % out) > + self.config_testpmd() > + self.pmd_output.execute_cmd('start') > + rules =3D [ > + 'flow create 0 ingress pattern eth / ipv4 src is 192.168= .0.20 dst is > 192.168.0.21 / udp src is 22 dst is 23 / end actions queue index 1 / mark= / end', > + 'flow create 0 ingress pattern eth / ipv4 src is 192.168= .0.20 dst is > 192.168.0.21 / tcp src is 22 dst is 23 / end actions rss queues 2 3 end /= mark id > 1 / end'] > + rule_li =3D self.create_fdir_rule(rule=3Drules, check_stats= =3DTrue) > + self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3D= rule_li) > + pkts =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21")/U > DP(sport=3D22,dport=3D23)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21")/TC > P(sport=3D22,dport=3D23)/Raw("x" * 80)'] > + out1 =3D self.send_pkts_getouput(pkts=3Dpkts[0], port_id=3D0= , count=3D1) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": 1, "mark_id": 0}, stats=3DTrue) > + out2 =3D self.send_pkts_getouput(pkts=3Dpkts[1], port_id=3D0= , count=3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": [2, 3], "mark_id": 1}, stats=3DTrue) > + except Exception as e: > + raise Exception(e) > + finally: > + self.dut.kill_all() > + self.launch_testpmd_with_mark() >=20 > - def test_multirules_mark(self): > + def test_delete_rules(self): > rules =3D [ > - "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / udp src is 22 dst is= 23 / end > actions queue index 1 / mark id 1 / end", > - "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / tcp src is 22 dst is= 23 / end > actions queue index 2 / mark id 1 / end", > - "flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 = / ipv4 src is > 192.168.0.20 dst is 192.168.0.21 ttl is 2 tos is 4 / sctp src is 22 dst i= s 23 / end > actions queue index 1 / mark id 2 / count / end"] > - > - pkt1 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > ttl=3D2, tos=3D4) /UDP(sport=3D22,dport=3D23)/Raw("x" * 80)' > - pkt2 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > ttl=3D2, tos=3D4) /TCP(sport=3D22,dport=3D23)/Raw("x" * 80)' > - pkt3 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21", > ttl=3D2, tos=3D4) /SCTP(sport=3D22,dport=3D23)/Raw("x" * 80)' > - > - res =3D self.create_fdir_rule(rules, check_stats=3DTrue) > - > - out1 =3D self.send_pkts_getouput(pkt1, mark=3DTrue) > - rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": 0, > "mark_id": 1, "queue": 1}, stats=3DTrue) > - > - out2 =3D self.send_pkts_getouput(pkt2, mark=3DTrue) > - rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": 0, > "mark_id": 1, "queue": 2}, stats=3DTrue) > - > - out3 =3D self.send_pkts_getouput(pkt3, mark=3DTrue) > - rfc.check_mark(out3, pkt_num=3D1, check_param=3D{"port_id": 0, > "mark_id": 2, "queue": 1}, stats=3DTrue) > - > - self.query_count(1, 1, port_id=3D0, rule_id=3D2) > - self.check_fdir_rule(0, stats=3DTrue, rule_list=3Dres) > - self.destroy_fdir_rule(port_id=3D0, rule_id=3D0) > + 'flow create 0 ingress pattern eth / ipv4 src is 192.168.56.= 0 dst is > 192.1.0.0 tos is 4 / tcp src is 22 dst is 23 / end actions queue index 1 = / mark / > end', > + 'flow create 0 ingress pattern eth / ipv4 src is 192.168.56.= 0 dst is > 192.1.0.0 tos is 4 / tcp src is 22 dst is 24 / end actions queue index 2 = / mark / > end', > + 'flow create 0 ingress pattern eth / ipv4 src is 192.168.56.= 0 dst is > 192.1.0.0 tos is 4 / tcp src is 22 dst is 25 / end actions queue index 3 = / mark / > end'] > + pkts =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.56.0",dst=3D"192.1.0.= 0",tos=3D4)/ > TCP(sport=3D22,dport=3D23)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.56.0",dst=3D"192.1.0.= 0",tos=3D4)/ > TCP(sport=3D22,dport=3D24)/Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.56.0",dst=3D"192.1.0.= 0",tos=3D4)/ > TCP(sport=3D22,dport=3D25)/Raw("x" * 80)'] > + queues =3D [1, 2, 3] > + > + for i in range(3): > + rule_li =3D self.create_fdir_rule(rule=3Drules, check_stats= =3DTrue) > + rule_li2 =3D copy.copy(rule_li) > + pkts2 =3D copy.copy(pkts) > + queues2 =3D copy.copy(queues) > + self.check_fdir_rule(rule_list=3Drule_li) > + out1 =3D self.send_pkts_getouput(pkts=3Dpkts[0], port_id=3D0= , count=3D1) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": 1, "mark_id": 0}, stats=3DTrue) > + out2 =3D self.send_pkts_getouput(pkts=3Dpkts[1], port_id=3D0= , count=3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": 2, "mark_id": 0}, stats=3DTrue) > + out3 =3D self.send_pkts_getouput(pkts=3Dpkts[2], port_id=3D0= , count=3D1) > + rfc.check_mark(out3, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": 3, "mark_id": 0}, stats=3DTrue) > + self.destroy_fdir_rule(port_id=3D0, rule_id=3Di) > + rule_li2.pop(i) > + pkts2.pop(i) > + queues2.pop(i) > + self.check_fdir_rule(rule_list=3Drule_li2) > + out1 =3D self.send_pkts_getouput(pkts=3Dpkts[i], port_id=3D0= , count=3D1) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": queues[i], "mark_id": 0}, stats=3DFalse) > + out2 =3D self.send_pkts_getouput(pkts=3Dpkts2[0], port_id=3D= 0, count=3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": queues2[0], "mark_id": 0}, stats=3DTrue) > + out3 =3D self.send_pkts_getouput(pkts=3Dpkts2[1], port_id=3D= 0, count=3D1) > + rfc.check_mark(out3, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": queues2[1], "mark_id": 0}, stats=3DTrue) > + self.pmd_output.execute_cmd("flow flush 0") > + out1 =3D self.send_pkts_getouput(pkts=3Dpkts[0], port_id=3D0= , count=3D1) > + rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": 1, "mark_id": 0}, stats=3DFalse) > + out2 =3D self.send_pkts_getouput(pkts=3Dpkts[1], port_id=3D0= , count=3D1) > + rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": 2, "mark_id": 0}, stats=3DFalse) > + out3 =3D self.send_pkts_getouput(pkts=3Dpkts[2], port_id=3D0= , count=3D1) > + rfc.check_mark(out3, pkt_num=3D1, check_param=3D{"port_id": = 0, > "queue": 3, "mark_id": 0}, stats=3DFalse) > + > + def test_max_rules(self): > + rule_pattern =3D "flow create 0 ingress pattern eth / ipv4 src i= s > 192.168.100.20 dst is 192.168.%d.%d / end actions queue index 1 / mark / > end" > + rules =3D list() > + pkt_pattern =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.100.20",dst=3D"192.16= 8.%d.%d > ")/Raw("x" * 80)' > + pkts2 =3D list() > + for i in range(60): > + for j in range(256): > + rules.append(rule_pattern % (i, j)) > + pkts2.append(pkt_pattern % (i, j)) > + cmd_path =3D '/tmp/test_max_rules' > + cmd_li =3D map(lambda x: x + os.linesep, rules) > + with open(cmd_path, 'w') as f: > + f.writelines(cmd_li) > + self.pmd_output.execute_cmd("stop") > + self.dut.send_command("quit", timeout=3D2) > + self.dut.session.copy_file_to(cmd_path, cmd_path) > + try: > + out =3D self.pmd_output.start_testpmd(cores=3D"1S/4C/1T", > + param=3D"--portmask=3D%s= --rxq=3D%d --txq=3D%d --port- > topology=3Dloop --cmdline-file=3D%s" % ( > + self.portMask, 64, 6= 4, cmd_path), > + eal_param=3D"-w %s,flow-= mark-support=3D1 - > w %s,flow-mark-support=3D1" % ( > + self.pci0, self.pci1= ), socket=3Dself.ports_socket) > + self.verify('Failed to create file' not in out, "create some= rule > failed: %s" % out) > + self.config_testpmd() > + self.pmd_output.execute_cmd('start') > + rule =3D "flow create 0 ingress pattern eth / ipv4 src is 19= 2.168.100.20 dst > is 192.168.60.0 / end actions queue index 1 / mark / end" > + self.create_fdir_rule(rule=3Drule, check_stats=3DFalse, msg= =3D'Failed to > create flow', validate=3DFalse) > + rule_li =3D list(map(str, range(15360))) > + self.check_fdir_rule(port_id=3D0, stats=3DTrue, rule_list=3D= rule_li) > + pkts =3D > ['Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.100.20",dst=3D"192.1= 68.0.0")/ > Raw("x" * 80)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.100.20",dst=3D"192.16= 8.59.255" > )/Raw("x" * 80)'] > + out1 =3D self.send_pkts_getouput(pkts=3Dpkts, port_id=3D0, c= ount=3D1) > + rfc.check_mark(out1, pkt_num=3D2, check_param=3D{"port_id": = 0, > "queue": 1, "mark_id": 0}, stats=3DTrue) > + self.pmd_output.execute_cmd("flow flush 0") > + self.check_fdir_rule(port_id=3D0, stats=3DFalse) > + out =3D self.send_pkts_getouput(pkts=3Dpkts2, port_id=3D0, c= ount=3D1) > + rfc.check_mark(out, pkt_num=3Dlen(pkts2), check_param=3D{"po= rt_id": 0, > "mark_id": 0}, stats=3DFalse) > + except Exception as e: > + raise Exception(e) > + finally: > + self.dut.kill_all() > + self.launch_testpmd_with_mark() >=20 > - out1 =3D self.send_pkts_getouput(pkt1, mark=3DTrue) > - rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": 0, > "mark_id": 1, "queue": 1}, stats=3DFalse) > + def test_mac_ipv4_pay(self): > + self._rte_flow_validate(vectors_ipv4_pay) >=20 > - self.check_fdir_rule(0, stats=3DTrue, rule_list=3Dres[1:]) > - out2 =3D self.send_pkts_getouput(pkt2, mark=3DTrue) > - rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": 0, > "mark_id": 1, "queue": 2}, stats=3DTrue) > + def test_mac_ipv4_udp(self): > + self._rte_flow_validate(vectors_ipv4_udp) >=20 > - out3 =3D self.send_pkts_getouput(pkt3, mark=3DTrue) > - rfc.check_mark(out3, pkt_num=3D1, check_param=3D{"port_id": 0, > "mark_id": 2, "queue": 1}, stats=3DTrue) > + def test_mac_ipv4_tcp(self): > + self._rte_flow_validate(vectors_ipv4_tcp) >=20 > - self.query_count(1, 2, port_id=3D0, rule_id=3D2) > - self.dut.send_command("flow flush 0", timeout=3D1) > + def test_mac_ipv4_sctp(self): > + self._rte_flow_validate((vectors_ipv4_sctp)) >=20 > - out1 =3D self.send_pkts_getouput(pkt1, mark=3DTrue) > - rfc.check_mark(out1, pkt_num=3D1, check_param=3D{"port_id": 0, > "mark_id": 1, "queue": 1}, stats=3DFalse) > + def test_mac_ipv6_pay(self): > + self._rte_flow_validate(vectors_ipv6_pay) >=20 > - out2 =3D self.send_pkts_getouput(pkt2, mark=3DTrue) > - rfc.check_mark(out2, pkt_num=3D1, check_param=3D{"port_id": 0, > "mark_id": 1, "queue": 2}, stats=3DFalse) > + def test_mac_ipv6_udp(self): > + self._rte_flow_validate(vectors_ipv6_udp) >=20 > - out3 =3D self.send_pkts_getouput(pkt3, mark=3DTrue) > - rfc.check_mark(out3, pkt_num=3D1, check_param=3D{"port_id": 0, > "mark_id": 2, "queue": 1}, stats=3DFalse) > + def test_mac_ipv6_tcp(self): > + self._rte_flow_validate(vectors_ipv6_tcp) >=20 > - self.check_fdir_rule(stats=3DFalse) > + def test_mac_ipv6_sctp(self): > + self._rte_flow_validate(vectors_ipv6_sctp) >=20 > - def test_mark_wrong_parameters(self): > - rule =3D "flow create 0 ingress pattern eth dst is 00:11:22:33:4= 4:55 / ipv4 src > is 192.168.0.20 / end actions queue index 1 / mark id 4294967296 / end" > - self.create_fdir_rule(rule=3Drule, check_stats=3DFalse) > - self.check_fdir_rule(stats=3DFalse) > + def test_mac_ipv4_tun_ipv4_pay(self): > + self._rte_flow_validate(vectors_ipv4_tun_ipv4_pay) >=20 > - def test_pattern_conflict_flow(self): > - rule1 =3D "flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / end > actions queue index 1 / end" > - self.create_fdir_rule(rule=3Drule1, check_stats=3DTrue) > - pkt1 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21")/Ra > w("x" * 80)' > - pkt2 =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.0.20",dst=3D"192.168.= 0.21") > /UDP(sport=3D22, dport=3D23)/ Raw("x" * 80)' > - out1 =3D self.send_pkts_getouput(pkts=3D[pkt1, pkt2]) > - rfc.check_queue(out1, pkt_num=3D2, check_param=3D{"port_id": 0, > "queue": 1}, stats=3DTrue) > + def test_mac_ipv4_tun_ipv4_udp(self): > + self._rte_flow_validate(vectors_ipv4_tun_ipv4_udp) >=20 > - rule2 =3D "flow create 0 ingress pattern eth / ipv4 dst is 192.1= 68.0.21 / udp > src is 22 dst is 23 / end actions queue index 2 / end" > - self.create_fdir_rule(rule=3Drule2, check_stats=3DTrue) > - out2 =3D self.send_pkts_getouput(pkt1) > - rfc.check_queue(out2, pkt_num=3D1, check_param=3D{"port_id": 0, > "queue": 1}, stats=3DTrue) > + def test_mac_ipv4_tun_ipv4_tcp(self): > + self._rte_flow_validate(vectors_ipv4_tun_ipv4_tcp) >=20 > - out3 =3D self.send_pkts_getouput(pkt2) > - rfc.check_queue(out3, pkt_num=3D1, check_param=3D{"port_id": 0, > "queue": 2}, stats=3DTrue) > + def test_mac_ipv4_tun_ipv4_sctp(self): > + self._rte_flow_validate(vectors_ipv4_tun_ipv4_sctp) >=20 > - self.dut.send_command("flow flush 0", timeout=3D1) > + def test_mac_ipv4_tun_mac_ipv4_pay(self): > + self._rte_flow_validate(vectors_mac_ipv4_tun_mac_ipv4_pay) >=20 > - self.create_fdir_rule(rule=3Drule2, check_stats=3DTrue) > - out4 =3D self.send_pkts_getouput(pkt2) > - rfc.check_queue(out4, pkt_num=3D1, check_param=3D{"port_id": 0, > "queue": 2}, stats=3DTrue) > + def test_mac_ipv4_tun_mac_ipv4_udp(self): > + self._rte_flow_validate(vectors_mac_ipv4_tun_mac_ipv4_udp) >=20 > - self.create_fdir_rule(rule=3Drule1, check_stats=3DTrue) > - out5 =3D self.send_pkts_getouput(pkt2) > - rfc.check_queue(out5, pkt_num=3D1, check_param=3D{"port_id": 0, > "queue": 1}, stats=3DTrue) > + def test_mac_ipv4_tun_mac_ipv4_tcp(self): > + self._rte_flow_validate(vectors_mac_ipv4_tun_mac_ipv4_tcp) >=20 > - def test_max_count(self): > - pattern =3D "flow create 0 ingress pattern eth / ipv4 src is 192= .168.0.{} / > end actions drop / count / end" > - rules =3D [pattern.format(i) for i in range(1, 256)] + [ > - "flow create 0 ingress pattern eth / ipv4 src is 192.168.1.1= / end actions > drop / count / end"] > - res =3D self.create_fdir_rule(rules, check_stats=3DTrue) > + def test_mac_ipv4_tun_mac_ipv4_sctp(self): > + self._rte_flow_validate(vectors_mac_ipv4_tun_mac_ipv4_sctp) >=20 > - rule2 =3D 'flow create 0 ingress pattern eth / ipv4 src is 192.1= 68.1.2 / end > actions drop / count / end' > - res2 =3D self.create_fdir_rule(rule2, check_stats=3DFalse) > + def test_mac_ipv4_gtpu_eh(self): > + self._rte_flow_validate(vectors_mac_ipv4_gtpu_eh) >=20 > - pkt =3D > 'Ether(dst=3D"00:11:22:33:44:55")/IP(src=3D"192.168.1.1",dst=3D"192.168.0= .21") / > Raw("x" * 80)' > - out =3D self.send_pkts_getouput(pkt, count=3D10) > - rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 0}, > stats=3DTrue) > - self.query_count(1, 10, port_id=3D0, rule_id=3D255) > - self.check_fdir_rule(0, stats=3DTrue, rule_list=3Dres) > - self.dut.send_command("flow flush 0", timeout=3D1) > - out =3D self.send_pkts_getouput(pkt, count=3D10) > - rfc.check_drop(out, pkt_num=3D10, check_param=3D{"port_id": 0}, > stats=3DFalse) > - self.check_fdir_rule(stats=3DFalse) > - self.dut.send_command("stop", timeout=3D2) > - self.dut.send_command("quit", timeout=3D2) > - self.launch_testpmd_with_mark() > + def test_mac_ipv4_gtpu(self): > + self._rte_flow_validate(vectors_mac_ipv4_gtpu) >=20 > def tear_down(self): > # destroy all flow rule on port 0 > -- > 1.8.3.1