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 6345AA04DC; Tue, 20 Oct 2020 08:16:24 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 27F42AC75; Tue, 20 Oct 2020 08:16:23 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 825A19AFE for ; Tue, 20 Oct 2020 08:16:19 +0200 (CEST) IronPort-SDR: FbIEer9YnRT35cDi/kPoDKub8df0KTxmxF9gn4+qEppvfEFFcv2bggyxYyR0zDDX2EtPuUo0is HsHbhlnMgb9Q== X-IronPort-AV: E=McAfee;i="6000,8403,9779"; a="228794620" X-IronPort-AV: E=Sophos;i="5.77,396,1596524400"; d="log'?scan'208";a="228794620" X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2020 23:16:16 -0700 IronPort-SDR: zAbJb/7T2k0NiGB6mDTkml/P5f2Ve3kwKf8Ya3rg56rnIRWggYeiR6MlC9pbZMpwnHSqGZg/3c VmPejPKvUfhw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,396,1596524400"; d="log'?scan'208";a="465816162" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga004.jf.intel.com with ESMTP; 19 Oct 2020 23:16:16 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 19 Oct 2020 23:16:15 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 19 Oct 2020 23:16:15 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.170) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Mon, 19 Oct 2020 23:16:10 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ll+bx5uN4NOsfrnnurEJofc7qH8r/X92MMJHpKg1qN+bs01K/qtHdWKnFwjnRbEo/xASsQz5tT3m9Ua2Hm/GMDcCUxdsX7lOpBrxahGPuyX30sU2PHdCzgHg+HLd2zrnJWQtTyWK7dSAY1WNamAoMsxNrSrOfDBYHID7NfteC/e2/Qe3f8dGV8kdi48s5OrMkv81OKH1HvxSDbyWiAR7rYohaLSCr735QK4ZBchbEDQm3ojUegcHOSd0MaJWXrI6iTzipVSSzdAUXBUgvrWmaIjQepk8PLNzJAP6BziuM6rE4Zt1hbeNRlyCdH+E7nfrUO6AHxY8LFl88dwgIfs2/w== 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=Z34QxM8amknkocoWx8zir4qTH691c1LIjy65O2gyA10=; b=BWbOQSfKHp0y49M1NOhV/3uWQAyhvJzhsvcc/7QPj9Zc3xw6/4nqkjzfTPZ/QmS4Qfh10dVPYocAYDgLlQWd70yWFMYarLCRK/PPnqRzPeNH0eLhliCltKc8ixamDfVgbAEs7wiqi6r7raXB6+zqhufmdoBpEHTlnm+kYkGtg4jcGKJ+5lc0wKIH52BVjRiMqsyzXn8bZNCp1hENQWKSoErAa4yMcoBttmfpfit+YW5IN5kN0AGuzkZFMO7IfWzeDfSxasy2C/dRSlJjLUB484SRJyo2VDtrXkkXt3ReA3uGKLNESiySWxb2Y1XgtXdVvBYtDcvdH4BcVpWmAdTOQg== 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=Z34QxM8amknkocoWx8zir4qTH691c1LIjy65O2gyA10=; b=WgA68sLFJgpcq8XAScUhhnAyHujlGgIaBkaMDLuMe/LJu4j/C4b8uIHgJSSMirWsRDXbBTOYCpKlhVjIadZP2Bzmkhg2Ux+CMAubQC6SyFhDUqTxXQSyfCwpbLT9gTkl2A1b10qAzGFvpMnCnlmLTBW+S3E2S2tix0I3/4GV5uI= Received: from CY4PR1101MB2263.namprd11.prod.outlook.com (2603:10b6:910:19::23) by CY4PR11MB1781.namprd11.prod.outlook.com (2603:10b6:903:124::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.25; Tue, 20 Oct 2020 06:15:55 +0000 Received: from CY4PR1101MB2263.namprd11.prod.outlook.com ([fe80::3920:1fb5:1444:ff64]) by CY4PR1101MB2263.namprd11.prod.outlook.com ([fe80::3920:1fb5:1444:ff64%12]) with mapi id 15.20.3477.028; Tue, 20 Oct 2020 06:15:55 +0000 From: "Zhao, HaiyangX" To: "dts@dpdk.org" , "Peng, Yuan" Thread-Topic: [dts][PATCH V1] tests: add cvl_advanced_rss_gtpu Thread-Index: AQHWpqbGYsOz2g1t80KjMDJBTw2QB6mgAGug Date: Tue, 20 Oct 2020 06:15:55 +0000 Message-ID: References: <20201020140127.9670-1-haiyangx.zhao@intel.com> In-Reply-To: <20201020140127.9670-1-haiyangx.zhao@intel.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: yes 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.55.46.46] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 37984a90-8068-4257-2a8c-08d874bf9ad0 x-ms-traffictypediagnostic: CY4PR11MB1781: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rHA6i8cpbJee6fUBp7VcDl7tGgb4j5WPMzeRl5uYS1wkwsQn4SlX2jcIwOS2C4qWwe6F0Og3NvdJtkGHCoBHWMGG7Qib0to/fPZztpWy3Kfc5M8IJr2lXWM6spd/hXqugTujDojifx8fhSITaK/HCy81104qy2p8CDFXuTWQw2r9tGUhcOZKL4gCRE5vZDgoqh/VhCXUCVqCDvjEeC0iME1D9gGEUZ8FI3I9CJUDEaJtqTDFYR6zf1Oqk4wSwEn7+4go7rJzErTuA0/9bz+DcpgVTsrY1IAcSbPvi/A9beDd68g9mZ6nnSCsUbQucOHOmVY7Q4HjFr07g2MZWdLcyh2zG7bjqsL1fBvo8ahZDeyBbU4ZjA0RQ2ATLzcoPVRm x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY4PR1101MB2263.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(396003)(39860400002)(366004)(376002)(346002)(478600001)(316002)(83380400001)(2906002)(8676002)(110136005)(8936002)(9686003)(99936003)(186003)(55016002)(71200400001)(30864003)(66476007)(66556008)(64756008)(66616009)(66446008)(66946007)(4743002)(5660300002)(76116006)(26005)(33656002)(52536014)(6636002)(7696005)(6506007)(53546011)(86362001)(579004)(559001)(569008); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: hLYjgdKGHfOR8q5oETyEIeoCMu3YRYOcTTRxfdUUpXQoOMESTUPQX59vAfwo5tAQERfYqbBMmvX9jin+YsuGUohiTtkyvU1ToZu5dZNtAsOABMDKuDGFfXTJxsw/W9KEjv3oFGoaQs2ccjqVJvzZhfg3HkopHx/LuDBTM+6yyUPdHljFA+c7V1xVnYM1Qg3FZ4ocAoj6Pt/jBdlHMMXNrBG+LKWbotTBQmo/sij0gIEFcA7IoupM9eMFyA10EOoill09OHTYggkwRITNO7UUHLvF3oMmNXde1jQn2K8/eRtM44nIMZAGZULLjNhReWZ94Hdt5xt5M52wp2LcOy4/O6AnJcMsbuZyB7jhmZfvy/27OTIhI9DdFMpKdXlEYilwIK6yyw6nObf5LG2lUOY0MC2GPWRhEq4/Jl4JJAeKx+REZXHGvAy8YX+IckBUNjAFlyRDy+cMH7h7O7tZVBxEp/xf0T4UAyTMcf6RFsJ6w+3MpCeGDLordu9w0b+O9aW2qxyH8MoVo9ZbTKWOYprV28VwUgLpUuXNMjPQExVjnEpDDJ1KAUmVg410VmytMCRRdlFLYyAG4AT2psKER8rRxkPsIwRI9EE9pQSejf58DI9FnTxm8VcybsLwp+BBWnaragg6vMkJqh1ZrmeYiKcxQQ== Content-Type: multipart/mixed; boundary="_002_CY4PR1101MB2263FB2B7C8F9CCAF111AB74F41F0CY4PR1101MB2263_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR1101MB2263.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 37984a90-8068-4257-2a8c-08d874bf9ad0 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Oct 2020 06:15:55.5865 (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: nx7JxjET2D13XeGJQrbgbEZmTNy8aK+hClw+xyQ/c2kyKRJYsFeajWaUgf5G2Xr5bXNcR4/J2BT2/xLcd/TZCw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR11MB1781 X-OriginatorOrg: intel.com Subject: Re: [dts] [PATCH V1] tests: add cvl_advanced_rss_gtpu 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" --_002_CY4PR1101MB2263FB2B7C8F9CCAF111AB74F41F0CY4PR1101MB2263_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Tested-by: Haiyang Zhao > -----Original Message----- > From: Haiyang Zhao > Sent: Tuesday, October 20, 2020 22:01 > To: dts@dpdk.org; Peng, Yuan > Cc: Zhao, HaiyangX > Subject: [dts][PATCH V1] tests: add cvl_advanced_rss_gtpu >=20 > *add cvl rss gtpu cases. >=20 > Signed-off-by: Haiyang Zhao > --- > tests/TestSuite_cvl_advanced_rss_gtpu.py | 5305 > ++++++++++++++++++++++ > 1 file changed, 5305 insertions(+) > create mode 100755 tests/TestSuite_cvl_advanced_rss_gtpu.py >=20 > diff --git a/tests/TestSuite_cvl_advanced_rss_gtpu.py > b/tests/TestSuite_cvl_advanced_rss_gtpu.py > new file mode 100755 > index 0000000..e505dc2 > --- /dev/null > +++ b/tests/TestSuite_cvl_advanced_rss_gtpu.py > @@ -0,0 +1,5305 @@ > +# BSD LICENSE > +# > +# Copyright(c) 2010-2020 Intel Corporation. All rights reserved. > +# All rights reserved. > +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions > +# are met: > +# > +# * Redistributions of source code must retain the above copyright > +# notice, this list of conditions and the following disclaimer. > +# * Redistributions in binary form must reproduce the above copyright > +# notice, this list of conditions and the following disclaimer in > +# the documentation and/or other materials provided with the > +# distribution. > +# * Neither the name of Intel Corporation nor the names of its > +# contributors may be used to endorse or promote products derived > +# from this software without specific prior written permission. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS > +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT > NOT > +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND > FITNESS FOR > +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE > COPYRIGHT > +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, > INCIDENTAL, > +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > NOT > +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS > OF USE, > +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED > AND ON ANY > +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF > THE USE > +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH > DAMAGE. > + > + > +import re > +import time > +from packet import Packet > +from pmd_output import PmdOutput > +from test_case import TestCase > +from rte_flow_common import RssProcessing > + > + > +mac_ipv4_gtpu_ipv4_basic =3D { > + 'ipv4-nonfrag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/= ("X"*480)', > + 'ipv4-frag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", > frag=3D6)/("X"*480)', > + 'ipv4-icmp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'ipv4-udp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP()/("X"*4= 80)', > +} > + > +mac_ipv4_gtpu_ipv4_l3src_changed_pkt =3D > eval(str(mac_ipv4_gtpu_ipv4_basic).replace('192.168.0.2', '192.168.1.2')) > +mac_ipv4_gtpu_ipv4_l3dst_changed_pkt =3D > eval(str(mac_ipv4_gtpu_ipv4_basic).replace('192.168.0.1', '192.168.1.1')) > +mac_ipv4_gtpu_ipv4_unmatched_pkt =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1", src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > +] > + > +mac_ipv4_gtpu_ipv4_l3dst_only =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / end > actions rss types ipv4 l3-dst-only end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4- > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4- > nonfrag'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-fr= ag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-fr= ag'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-ic= mp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-ic= mp'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-ud= p'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-ud= p'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'], > + mac_ipv4_gtpu_ipv4_basic['ipv4-frag'], > + mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'], > + mac_ipv4_gtpu_ipv4_basic['ipv4-udp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv4_l3src_only =3D eval(str(mac_ipv4_gtpu_ipv4_l3dst_only= ) > + .replace('mac_ipv4_gtpu_ipv4_l3dst'= , > 'mac_ipv4_gtpu_ipv4_l3src') > + .replace('l3-dst-only', 'l3-src-onl= y') > + .replace('check_hash_same', 'hash_c= heck_different') > + .replace('check_hash_different', 'c= heck_hash_same') > + .replace('hash_check_different', 'c= heck_hash_different')) > +mac_ipv4_gtpu_ipv4_all =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_all', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / end > actions rss types ipv4 end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4- > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4- > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > nonfrag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-fr= ag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-fr= ag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > frag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-ic= mp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-ic= mp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > icmp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3dst_changed_pkt['ipv4-ud= p'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_l3src_changed_pkt['ipv4-ud= p'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > udp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'], > + mac_ipv4_gtpu_ipv4_basic['ipv4-frag'], > + mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'], > + mac_ipv4_gtpu_ipv4_basic['ipv4-udp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv4_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / end > actions rss types gtpu end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > nonfrag'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > nonfrag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > frag'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > frag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > icmp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > icmp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > udp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_basic['ipv4- > udp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_ipv4_basic['ipv4-nonfrag'], > + mac_ipv4_gtpu_ipv4_basic['ipv4-frag'], > + mac_ipv4_gtpu_ipv4_basic['ipv4-icmp'], > + mac_ipv4_gtpu_ipv4_basic['ipv4-udp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv4_toeplitz =3D [mac_ipv4_gtpu_ipv4_l3dst_only, > mac_ipv4_gtpu_ipv4_l3src_only, > + mac_ipv4_gtpu_ipv4_all, mac_ipv4_gtpu_ipv= 4_gtpu] > + > +mac_ipv4_gtpu_ipv4_symmetric =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_symmetric', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / end > actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues end / > end', > + 'pre-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/= ("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/= ("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", > frag=3D6)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1", > frag=3D6)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/ICMP()/("X"*= 480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/= ("X"*480)', > + 'action': {'save_hash': 'nonfrag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/= ("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", > frag=3D6)/("X"*480)', > + 'action': {'save_hash': 'frag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1", > frag=3D6)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': {'save_hash': 'icmp'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/ICMP()/("X"*= 480)', > + 'action': 'check_hash_same', > + }, > + { # unmatch MAC_IPV4_GTPU_IPV6 nonfrag > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { # unmatch MAC_IPV4_GTPU_EH_IPV4 > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'action': 'save_hash', > + }, > + { # unmatch MAC_IPV4_GTPU_EH_IPV4 > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/= ("X"*480)', > + 'action': {'check_no_hash_or_different': 'nonfrag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/= ("X"*480)', > + 'action': {'check_no_hash_or_different': 'nonfrag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", > frag=3D6)/("X"*480)', > + 'action': {'check_no_hash_or_different': 'frag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1", > frag=3D6)/("X"*480)', > + 'action': {'check_no_hash_or_different': 'frag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': {'check_no_hash_or_different': 'icmp'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/ICMP()/("X"*= 480)', > + 'action': {'check_no_hash_or_different': 'icmp'}, > + }, > + ], > +} > + > +mac_ipv4_gtpu_ipv6_symmetric =3D > eval(str(mac_ipv4_gtpu_ipv4_symmetric).replace('IPv6', 'IPv61') > + .replace('IP(dst=3D"192.168.0.1",src= =3D"192.168.0.2"', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D"192.168.0.2",src= =3D"192.168.0.1"', > 'IPv6(dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",src=3D"ABAB:910B:66= 66 > :3457:8295:3333:1800:2929"') > + .replace(', frag=3D6)', ')/IPv6ExtHd= rFragment()') > + .replace('IPv61(dst=3D"ABAB:910B:666= 6:3457:8295:3333:180 > 0:2929",src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")') > + .replace('IPv61(src=3D"ABAB:910B:666= 6:3457:8295:3333:1800 > :2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")') > + .replace('gtpu / ipv4', 'gtpu / ipv6= ').replace('types ipv4', > 'types ipv6') > + ) > + > +mac_ipv4_gtpu_ipv4_udp_symmetric =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_symmetric', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss func symmetric_toeplitz types ipv4-udp end key_len 0 > queues end / end', > + 'pre-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'save_hash': 'basic_with_rule'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'check_hash_different': 'basic_with_rule'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': {'check_hash_different': 'basic_with_rule'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'check_hash_different': 'basic_with_rule'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': {'check_hash_different': 'basic_with_rule'}, > + }, > + ], > +} > + > +mac_ipv4_gtpu_ipv6_udp_symmetric =3D > eval(str(mac_ipv4_gtpu_ipv4_udp_symmetric).replace('IPv6', 'IPv61') > + .replace('IP(dst=3D"192.168.0.1"= ,src=3D"192.168.0.2"', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D"192.168.0.2"= ,src=3D"192.168.0.1"', > 'IPv6(dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",src=3D"ABAB:910B:66= 66 > :3457:8295:3333:1800:2929"') > + .replace('IPv61(dst=3D"ABAB:910B= :6666:3457:8295:3333:18 > 00:2929",src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")') > + .replace('IPv61(src=3D"ABAB:910B= :6666:3457:8295:3333:18 > 00:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")') > + .replace('gtpu / ipv4', 'gtpu / = ipv6').replace('types ipv4- > udp', 'types ipv6-udp') > + ) > + > +mac_ipv4_gtpu_ipv4_tcp_symmetric =3D > eval(str(mac_ipv4_gtpu_ipv4_udp_symmetric).replace('TCP(', 'TCP1(') > + .replace('UDP(sport', 'TCP(sport= ').replace('TCP1', 'UDP') > + .replace('udp / end', 'tcp / end= ').replace('ipv4-udp', > 'ipv4-tcp') > + .replace('udp_symmetric', 'tcp_s= ymmetric')) > + > +mac_ipv4_gtpu_ipv6_tcp_symmetric =3D > eval(str(mac_ipv4_gtpu_ipv4_tcp_symmetric).replace('IPv6', 'IPv61') > + .replace('IP(dst=3D"192.168.0.1"= ,src=3D"192.168.0.2"', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D"192.168.0.2"= ,src=3D"192.168.0.1"', > 'IPv6(dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",src=3D"ABAB:910B:66= 66 > :3457:8295:3333:1800:2929"') > + .replace('IPv61(dst=3D"ABAB:910B= :6666:3457:8295:3333:18 > 00:2929",src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")') > + .replace('IPv61(src=3D"ABAB:910B= :6666:3457:8295:3333:18 > 00:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")') > + .replace('gtpu / ipv4', 'gtpu / = ipv6').replace('types ipv4- > tcp', 'types ipv6-tcp') > + ) > + > +mac_ipv4_gtpu_eh_dl_ipv4_symmetric =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_symmetric', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4 en= d > key_len 0 queues end / end', > + 'pre-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", frag=3D6)/("= X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1", frag=3D6)/("= X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/ICMP()/("X"*= 480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP()/("X"*4= 80)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP()/("X"*4= 80)', > + 'action': 'check_hash_different', > + }, > + ], > + 'test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", frag=3D6)/("= X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1", frag=3D6)/("= X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/ICMP()/("X"*= 480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP()/("X"*4= 80)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP()/("X"*4= 80)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", frag=3D6)/("= X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1", frag=3D6)/("= X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/ICMP()/("X"*= 480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP()/("X"*4= 80)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP()/("X"*4= 80)', > + 'action': 'check_hash_different', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'action': 'save_or_no_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/("X"*480)', > + 'action': 'check_no_hash_or_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", frag=3D6)/("= X"*480)', > + 'action': 'save_or_no_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1", frag=3D6)/("= X"*480)', > + 'action': 'check_no_hash_or_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': 'save_or_no_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/ICMP()/("X"*= 480)', > + 'action': 'check_no_hash_or_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP()/("X"*4= 80)', > + 'action': 'save_or_no_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP()/("X"*4= 80)', > + 'action': 'check_no_hash_or_different', > + }, > + ], > +} > +mac_ipv4_gtpu_eh_ul_ipv4_symmetric =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv4_symmetric) > + .replace('pdu_type=3D1', 'pdu_= type=3D2') > + .replace('pdu_type=3D0', 'pdu_= type=3D1') > + .replace('pdu_type=3D2', 'pdu_= type=3D0') > + .replace('eh_dl', 'eh_ul') > + .replace('gtp_psc pdu_t is 0',= 'gtp_psc pdu_t is 1') > + ) > + > +mac_ipv4_gtpu_eh_ipv4_symmetric =3D > [mac_ipv4_gtpu_eh_dl_ipv4_symmetric, > mac_ipv4_gtpu_eh_ul_ipv4_symmetric] > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss func symmetric_toeplitz types i= pv4- > udp end key_len 0 queues end / end', > + 'pre-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_no_hash_or_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_no_hash_or_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_no_hash_or_different', > + }, > + ], > +} > +mac_ipv4_gtpu_eh_ul_ipv4_udp_symmetric =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric) > + .replace('pdu_type=3D1', '= pdu_type=3D2') > + .replace('pdu_type=3D0', '= pdu_type=3D1') > + .replace('pdu_type=3D2', '= pdu_type=3D0') > + .replace('gtp_psc pdu_t is= 0', 'gtp_psc pdu_t is 1') > + .replace('eh_dl', 'eh_ul')= ) > +mac_ipv4_gtpu_eh_ipv4_udp_symmetric =3D > [mac_ipv4_gtpu_eh_dl_ipv4_udp_symmetric, > mac_ipv4_gtpu_eh_ul_ipv4_udp_symmetric] > + > +mac_ipv4_gtpu_eh_ipv4_tcp_symmetric =3D [eval(str(element).replace('TCP'= , > 'TCP1').replace('udp', 'tcp') > + .replace('UDP(sp= ort', 'TCP(sport').replace('TCP1', > 'UDP') > + .replace('ipv4 /= tcp / gtpu', 'ipv4 / udp / gtpu')) > + for element in mac_ipv4_gtpu_eh_i= pv4_udp_symmetric] > + > +mac_ipv4_gtpu_eh_ipv6_symmetric =3D > eval(str(mac_ipv4_gtpu_eh_ipv4_symmetric).replace('IPv6', 'IPv61') > + .replace('IP(dst=3D"192.168.0.1",= src=3D"192.168.0.2"', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D"192.168.0.2",= src=3D"192.168.0.1"', > 'IPv6(dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",src=3D"ABAB:910B:66= 66 > :3457:8295:3333:1800:2929"') > + .replace(', frag=3D6)', ')/IPv6Ex= tHdrFragment()') > + .replace('IPv61(dst=3D"ABAB:910B:= 6666:3457:8295:3333:18 > 00:2929",src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")') > + .replace('IPv61(src=3D"ABAB:910B:= 6666:3457:8295:3333:18 > 00:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")') > + .replace('ipv4 / end', 'ipv6 / en= d').replace('types ipv4', > 'types ipv6') > + .replace('ipv4_symmetric', 'ipv6_= symmetric') > + ) > + > +mac_ipv4_gtpu_eh_ipv6_udp_symmetric =3D > eval(str(mac_ipv4_gtpu_eh_ipv4_udp_symmetric).replace('IPv6', 'IPv61') > + .replace('IP(dst=3D"192.168.0.1"= ,src=3D"192.168.0.2"', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D"192.168.0.2"= ,src=3D"192.168.0.1"', > 'IPv6(dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",src=3D"ABAB:910B:66= 66 > :3457:8295:3333:1800:2929"') > + .replace('IPv61(dst=3D"ABAB:910B= :6666:3457:8295:3333:18 > 00:2929",src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")') > + .replace('IPv61(src=3D"ABAB:910B= :6666:3457:8295:3333:18 > 00:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")') > + .replace('ipv4 / udp / end', 'ip= v6 / udp / > end').replace('types ipv4-udp', 'types ipv6-udp') > + .replace('ipv4_udp_symmetric', '= ipv6_udp_symmetric') > + ) > + > + > +mac_ipv4_gtpu_eh_ipv6_tcp_symmetric =3D > eval(str(mac_ipv4_gtpu_eh_ipv4_tcp_symmetric).replace('IPv6', 'IPv61') > + .replace('IP(dst=3D"192.168.0.1"= ,src=3D"192.168.0.2"', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D"192.168.0.2"= ,src=3D"192.168.0.1"', > 'IPv6(dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",src=3D"ABAB:910B:66= 66 > :3457:8295:3333:1800:2929"') > + .replace('IPv61(dst=3D"ABAB:910B= :6666:3457:8295:3333:18 > 00:2929",src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")') > + .replace('IPv61(src=3D"ABAB:910B= :6666:3457:8295:3333:18 > 00:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")', > 'IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")') > + .replace('ipv4 / tcp / end', 'ip= v6 / tcp / > end').replace('types ipv4-tcp', 'types ipv6-tcp') > + .replace('ipv4_tcp_symmetric', '= ipv6_tcp_symmetric') > + ) > + > +mac_ipv4_gtpu_ipv4_udp_basic =3D > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1", > src=3D"192.168.0.2")/UDP(sport=3D22,dport=3D23)/("X"*480)' > +mac_ipv4_gtpu_ipv4_udp_unmatch =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1", src=3D"192.168.0.2")/UDP(sport= =3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1", > src=3D"192.168.0.2")/TCP(sport=3D22,dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22,dport=3D23)/("X"= * > 480)' > +] > +mac_ipv4_gtpu_ipv4_udp_l3dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss types ipv4-udp l3-dst-only end key_len 0 queues end / end= ', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168= .0.1', > '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168= .0.2', > '192.168.1.2'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv4_udp_l3src =3D eval(str(mac_ipv4_gtpu_ipv4_udp_l3dst) > + .replace('mac_ipv4_gtpu_ipv4_udp_l3d= st', > 'mac_ipv4_gtpu_ipv4_udp_l3src') > + .replace('l3-dst-only', 'l3-src-only= ') > + .replace('check_hash_same', 'hash_ch= eck_different') > + .replace('check_hash_different', 'ch= eck_hash_same') > + .replace('hash_check_different', 'ch= eck_hash_different')) > + > +mac_ipv4_gtpu_ipv4_udp_l3src_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3src_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss types ipv4-udp l3-src-only l4-src-only end key_len 0 queu= es > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168= .0.2', > '192.168.1.2'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport= =3D22', > 'sport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport= =3D23', > 'dport=3D33').replace('192.168.0.1', '192.168.1.1'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv4_udp_l3src_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3src_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss types ipv4-udp l3-src-only l4-dst-only end key_len 0 queu= es > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168= .0.2', > '192.168.1.2'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport= =3D23', > 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport= =3D22', > 'sport=3D32').replace('192.168.0.1', '192.168.1.1'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv4_udp_l3dst_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3dst_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss types ipv4-udp l3-dst-only l4-src-only end key_len 0 queu= es > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168= .0.1', > '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport= =3D22', > 'sport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport= =3D23', > 'dport=3D33').replace('192.168.0.2', '192.168.1.2'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv4_udp_l3dst_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l3dst_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss types ipv4-udp l3-dst-only l4-dst-only end key_len 0 queu= es > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168= .0.1', > '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport= =3D23', > 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport= =3D22', > 'sport=3D32').replace('192.168.0.2', '192.168.1.2'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_ipv4_udp_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / end= ', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport= =3D23', > 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport= =3D22', > 'sport=3D32') > + .replace('192.168= .0', '192.168.1'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_ipv4_udp_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss types ipv4-udp l4-src-only end key_len 0 queues end / end= ', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport= =3D22', > 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport= =3D23', > 'dport=3D32') > + .replace('192.168= .0', '192.168.1'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv4_udp_all =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_all', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss types ipv4-udp end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('sport= =3D22', > 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('dport= =3D23', > 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168= .0.1', > '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168= .0.2', > '192.168.1.2'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_ipv4_udp_basic.replace('teid=3D0x123456', 'teid=3D0x12345')= , > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv4_udp_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / > end actions rss types gtpu end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic.replace('192.168= .0', > '192.168.1') > + .replace('sport= =3D22', 'sport=3D32') > + .replace('dport= =3D23', 'dport=3D33'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_ipv4_udp_basic.replace('teid=3D0x123456', 'teid=3D0x12345')= , > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > + > +mac_ipv4_gtpu_ipv4_udp_toeplitz =3D [mac_ipv4_gtpu_ipv4_udp_l3dst, > mac_ipv4_gtpu_ipv4_udp_l3src, > + mac_ipv4_gtpu_ipv4_udp_l3dst_l4src, > mac_ipv4_gtpu_ipv4_udp_l3dst_l4dst, > + mac_ipv4_gtpu_ipv4_udp_l3src_l4src, > mac_ipv4_gtpu_ipv4_udp_l3src_l4dst, > + mac_ipv4_gtpu_ipv4_udp_l4src, > mac_ipv4_gtpu_ipv4_udp_l4dst, > + mac_ipv4_gtpu_ipv4_udp_all, > mac_ipv4_gtpu_ipv4_udp_gtpu] > + > +mac_ipv4_gtpu_ipv4_tcp_toeplitz =3D [eval(str(element).replace('TCP', > 'TCP1').replace('udp', 'tcp') > + .replace('UDP(sport', 'TCP(sport= ').replace('TCP1', 'UDP') > + .replace('ipv4 / tcp / gtpu', 'i= pv4 / udp / gtpu')) > + for element in mac_ipv4_gtpu_ipv4_udp= _toeplitz] > + > +mac_ipv4_gtpu_ipv6_basic =3D { > + 'ipv6-nonfrag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + 'ipv6-frag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*48 > 0)', > + 'ipv6-icmp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)', > + 'ipv6-udp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP()/("X"*480)', > +} > + > +mac_ipv4_gtpu_ipv6_l3src_changed_pkt =3D > eval(str(mac_ipv4_gtpu_ipv6_basic).replace('ABAB', '1212')) > +mac_ipv4_gtpu_ipv6_l3dst_changed_pkt =3D > eval(str(mac_ipv4_gtpu_ipv6_basic).replace('CDCD', '3434')) > +mac_ipv4_gtpu_ipv6_unmatched_pkt =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")/= ("X"*480)', > +] > +mac_ipv4_gtpu_ipv6_l3dst_only =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / end > actions rss types ipv6 l3-dst-only end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6- > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6- > nonfrag'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-fr= ag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-fr= ag'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-ic= mp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-ic= mp'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-ud= p'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-ud= p'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'], > + mac_ipv4_gtpu_ipv6_basic['ipv6-frag'], > + mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'], > + mac_ipv4_gtpu_ipv6_basic['ipv6-udp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_l3src_only =3D eval(str(mac_ipv4_gtpu_ipv6_l3dst_only= ) > + .replace('mac_ipv4_gtpu_ipv6_l3dst'= , > 'mac_ipv4_gtpu_ipv6_l3src') > + .replace('l3-dst-only', 'l3-src-onl= y') > + .replace('check_hash_same', 'hash_c= heck_different') > + .replace('check_hash_different', 'c= heck_hash_same') > + .replace('hash_check_different', 'c= heck_hash_different')) > +mac_ipv4_gtpu_ipv6_all =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_all', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / end > actions rss types ipv6 end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6- > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6- > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6- > nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-fr= ag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-fr= ag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'].replace= ('ABAB', > '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-ic= mp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-ic= mp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'].replace= ('ABAB', > '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3dst_changed_pkt['ipv6-ud= p'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_l3src_changed_pkt['ipv6-ud= p'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'].replace(= 'ABAB', > '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'], > + mac_ipv4_gtpu_ipv6_basic['ipv6-frag'], > + mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'], > + mac_ipv4_gtpu_ipv6_basic['ipv6-udp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / end > actions rss types gtpu end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6- > nonfrag'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6- > nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6- > frag'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-frag'].replace= ('ABAB', > '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6- > icmp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'].replace= ('ABAB', > '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6- > udp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_basic['ipv6-udp'].replace(= 'ABAB', > '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_ipv6_basic['ipv6-nonfrag'], > + mac_ipv4_gtpu_ipv6_basic['ipv6-frag'], > + mac_ipv4_gtpu_ipv6_basic['ipv6-icmp'], > + mac_ipv4_gtpu_ipv6_basic['ipv6-udp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_toeplitz =3D [mac_ipv4_gtpu_ipv6_l3dst_only, > mac_ipv4_gtpu_ipv6_l3src_only, > + mac_ipv4_gtpu_ipv6_all, mac_ipv4_gtpu_ipv= 6_gtpu] > + > +mac_ipv4_gtpu_ipv6_udp_basic =3D > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22,dport=3D23)/("X"= * > 480)' > +mac_ipv4_gtpu_ipv6_udp_unmatch =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(src=3D"192.168.0.1", > dst=3D"192.168.0.2")/UDP(sport=3D22,dport=3D23)/("X"*480)' > +] > +mac_ipv4_gtpu_ipv6_udp_l3dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / udp / > end actions rss types ipv6-udp l3-dst-only end key_len 0 queues end / end= ', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('CDCD', > '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', > '1212'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_udp_l3src =3D eval(str(mac_ipv4_gtpu_ipv6_udp_l3dst) > + .replace('mac_ipv4_gtpu_ipv6_udp_l3d= st', > 'mac_ipv4_gtpu_ipv6_udp_l3src') > + .replace('l3-dst-only', 'l3-src-only= ') > + .replace('check_hash_same', 'hash_ch= eck_different') > + .replace('check_hash_different', 'ch= eck_hash_same') > + .replace('hash_check_different', 'ch= eck_hash_different')) > + > +mac_ipv4_gtpu_ipv6_udp_l3src_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3src_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / udp / > end actions rss types ipv6-udp l3-src-only l4-src-only end key_len 0 queu= es > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', > '1212'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport= =3D22', > 'sport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport= =3D23', > 'dport=3D33').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_udp_l3src_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3src_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / udp / > end actions rss types ipv6-udp l3-src-only l4-dst-only end key_len 0 queu= es > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', > '1212'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport= =3D23', > 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport= =3D22', > 'sport=3D32').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_udp_l3dst_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3dst_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / udp / > end actions rss types ipv6-udp l3-dst-only l4-src-only end key_len 0 queu= es > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('CDCD', > '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport= =3D22', > 'sport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport= =3D23', > 'dport=3D33').replace('ABAB', '1212'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_udp_l3dst_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l3dst_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / udp / > end actions rss types ipv6-udp l3-dst-only l4-dst-only end key_len 0 queu= es > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('CDCD', > '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport= =3D23', > 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport= =3D22', > 'sport=3D32').replace('ABAB', '1212'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_ipv6_udp_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / udp / > end actions rss types ipv6-udp l4-dst-only end key_len 0 queues end / end= ', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport= =3D23', > 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport= =3D22', > 'sport=3D32') > + .replace('ABAB', = '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_ipv6_udp_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / udp / > end actions rss types ipv6-udp l4-src-only end key_len 0 queues end / end= ', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport= =3D22', > 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport= =3D23', > 'dport=3D32') > + .replace('ABAB', = '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_udp_all =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_all', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / udp / > end actions rss types ipv6-udp end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('sport= =3D22', > 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('dport= =3D23', > 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('CDCD', > '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', > '1212'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_ipv6_udp_basic.replace('teid=3D0x123456', 'teid=3D0x12345')= , > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_udp_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv6_udp_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 6 / udp / > end actions rss types gtpu end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic.replace('ABAB', > '1212').replace('CDCD', '3434') > + .replace('sport= =3D22', 'sport=3D32') > + .replace('dport= =3D23', 'dport=3D33'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_ipv6_udp_basic.replace('teid=3D0x123456', 'teid=3D0x12345')= , > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_ipv6_udp_toeplitz =3D [mac_ipv4_gtpu_ipv6_udp_l3dst, > mac_ipv4_gtpu_ipv6_udp_l3src, > + mac_ipv4_gtpu_ipv6_udp_l3dst_l4src, > mac_ipv4_gtpu_ipv6_udp_l3dst_l4dst, > + mac_ipv4_gtpu_ipv6_udp_l3src_l4src, > mac_ipv4_gtpu_ipv6_udp_l3src_l4dst, > + mac_ipv4_gtpu_ipv6_udp_l4src, > mac_ipv4_gtpu_ipv6_udp_l4dst, > + mac_ipv4_gtpu_ipv6_udp_all, > mac_ipv4_gtpu_ipv6_udp_gtpu] > + > +mac_ipv4_gtpu_ipv6_tcp_toeplitz =3D [eval(str(element).replace('TCP', > 'TCP1').replace('udp', 'tcp') > + .replace('UDP(sport', 'TCP(sport= ').replace('TCP1', 'UDP') > + .replace('ipv4 / tcp / gtpu', 'i= pv4 / udp / gtpu')) > + for element in mac_ipv4_gtpu_ipv6_udp= _toeplitz] > + > +mac_ipv4_gtpu_eh_dl_ipv4_basic =3D { > + 'ipv4-nonfrag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'ipv4-frag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", frag=3D6)/("= X"*480)', > + 'ipv4-icmp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'ipv4-udp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP()/("X"*4= 80)', > + 'ipv4-tcp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP()/("X"*4= 80)', > + > +} > + > +mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv4_basic).replace('192.168.0.2', > '192.168.1.2')) > +mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv4_basic).replace('192.168.0.1', > '192.168.1.1')) > +mac_ipv4_gtpu_eh_ipv4_unmatched_pkt =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1", src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > +] > + > +mac_ipv4_gtpu_eh_dl_ipv4_l3dst_only =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 = queues > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'= ], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > nonfrag'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > frag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > frag'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > icmp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > icmp'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > udp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > udp'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > tcp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > tcp'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4_l3src_only =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv4_l3dst_only) > + .replace('eh_dl_ipv4_l3dst', = 'eh_ul_ipv4_l3src') > + .replace('l3-dst-only', 'l3-s= rc-only') > + .replace('check_hash_same', '= hash_check_different') > + .replace('check_hash_differen= t', 'check_hash_same') > + .replace('hash_check_differen= t', > 'check_hash_different')) > +mac_ipv4_gtpu_eh_dl_ipv4_all =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_all', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / end actions rss types ipv4 end key_len 0 queues end /= end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'= ], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > nonfrag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > nonfrag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > frag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > frag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > frag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > frag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > icmp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > icmp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > icmp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > icmp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > udp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > udp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > udp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > udp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3dst_changed_pkt['ipv4= - > tcp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_l3src_changed_pkt['ipv4= - > tcp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > tcp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > tcp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / end actions rss types gtpu end key_len 0 queues end /= end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'= ], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > nonfrag'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > nonfrag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > frag'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > frag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > icmp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > icmp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > udp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > udp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > tcp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4- > tcp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_ipv4_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-nonfrag'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-frag'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-icmp'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-udp'], > + mac_ipv4_gtpu_eh_dl_ipv4_basic['ipv4-tcp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4 =3D [mac_ipv4_gtpu_eh_dl_ipv4_l3dst_only, > mac_ipv4_gtpu_eh_dl_ipv4_l3src_only, > + mac_ipv4_gtpu_eh_dl_ipv4_all, > mac_ipv4_gtpu_eh_dl_ipv4_gtpu] > + > +mac_ipv4_gtpu_eh_ul_ipv4 =3D [eval(str(element).replace('pdu_type=3D1', > 'pdu_type=3D2') > + .replace('pdu_type=3D0', 'pdu_type=3D1').rep= lace('pdu_type=3D2', > 'pdu_type=3D0') > + .replace('gtp_psc pdu_t is 0', 'gtp_psc pdu_= t is 1') > + .replace('eh_dl', 'eh_ul')) > + for element in mac_ipv4_gtpu_eh_dl_ipv4] > + > +mac_ipv4_gtpu_eh_ipv4_toeplitz =3D mac_ipv4_gtpu_eh_dl_ipv4 + > mac_ipv4_gtpu_eh_ul_ipv4 > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic =3D { > + 'ipv4-nonfrag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'ipv4-nonfrag_ul': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'ipv4-frag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2", frag=3D6)/("= X"*480)', > + 'ipv4-icmp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'ipv4-udp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP()/("X"*4= 80)', > + > +} > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt =3D > eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic).replace('192.168.0.2'= , > '192.168.1.2')) > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt =3D > eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic).replace('192.168.0.1'= , > '192.168.1.1')) > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_unmatched_pkt =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1", > src=3D"192.168.0.2")/("X"*480)', > +] > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_only =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4- > nonfrag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag_ul'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4- > nonfrag_ul'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4- > nonfrag_ul'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-frag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4- > frag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-icmp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4- > icmp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-udp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4- > udp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'= ], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_= ul'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_only =3D > eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_only) > + .replace('ul_dl_ipv4_l3dst', = 'ul_dl_ipv4_l3src') > + .replace('l3-dst-only', 'l3-s= rc-only') > + .replace('dst=3D"192.168.0.1"= ,src=3D"192.168.1.2"', > 'dst=3D"192.168.0.1",src=3D"192.168.1.3"') > + .replace('dst=3D"192.168.1.1"= ,src=3D"192.168.0.2"', > 'dst=3D"192.168.0.1",src=3D"192.168.1.2"') > + .replace('dst=3D"192.168.0.1"= ,src=3D"192.168.1.3"', > 'dst=3D"192.168.1.1",src=3D"192.168.0.2"') > + ) > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_all =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_all', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / end actions rss types ipv4 end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag_ul'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4- > nonfrag_ul'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4- > nonfrag_ul'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag_ul'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag_ul'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-frag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-frag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > frag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > frag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-icmp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-icmp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > icmp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > icmp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_changed_pkt['ipv4-udp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3src_changed_pkt['ipv4-udp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > udp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > udp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'= ], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_= ul'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / end actions rss types gtpu end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag_ul'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag_ul'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > nonfrag_ul'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > frag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > frag'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > icmp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > icmp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > udp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ip= v4- > udp'].replace('192.168.0.', '192.168.1.'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag'= ], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-nonfrag_= ul'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-frag'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-icmp'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_basic['ipv4-udp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz =3D > [mac_ipv4_gtpu_eh_without_ul_dl_ipv4_l3dst_only, > + mac_ipv4_gtpu_eh_without= _ul_dl_ipv4_l3src_only, > + mac_ipv4_gtpu_eh_without= _ul_dl_ipv4_all, > + mac_ipv4_gtpu_eh_without= _ul_dl_ipv4_gtpu] > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic =3D { > + 'dl': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'ul': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > +} > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > +] > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_only =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / udp / end actions rss types ipv4-udp l3-dst-only end key_len 0 queues e= nd > / end', > + 'test': [ > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.1'= , > '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.2'= , > '192.168.1.2') > + = .replace('sport=3D22, dport=3D23', > 'sport=3D32, dport=3D33') > + = .replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_only =3D > eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_only) > + .replace('ul_dl_ip= v4_udp_l3dst', > 'ul_dl_ipv4_udp_l3src') > + .replace('l3-dst-o= nly', 'l3-src-only') > + .replace('dst=3D"1= 92.168.0.1",src=3D"192.168.1.2"', > 'dst=3D"192.168.0.1",src=3D"192.168.1.3"') > + .replace('dst=3D"1= 92.168.1.1",src=3D"192.168.0.2"', > 'dst=3D"192.168.0.1",src=3D"192.168.1.2"') > + .replace('dst=3D"1= 92.168.0.1",src=3D"192.168.1.3"', > 'dst=3D"192.168.1.1",src=3D"192.168.0.2"') > + ) > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src =3D { > + 'sub_casename': > 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / udp / end actions rss types ipv4-udp l3-src-only l4-src-only end key_le= n 0 > queues end / end', > + 'test': [ > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'].replace('sport=3D22', > 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.2'= , > '192.168.1.2'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.1'= , > '192.168.1.1') > + .replace('dport=3D23', 'dport=3D33') > + .replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'].replace('192.168.0.1'= , > '192.168.1.1') > + .replace('dport=3D23', 'dport=3D33') > + .replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4dst =3D > eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src) > + .replace('udp= _l3src_l4src', 'udp_l3src_l4dst') > + .replace('l4-= src-only', 'l4-dst-only') > + .replace('spo= rt=3D32, dport=3D23', 'sport=3D22, > dport=3D34') > + .replace('spo= rt=3D22, dport=3D33', 'sport=3D32, > dport=3D23') > + ) > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4src =3D > eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4src) > + .replace('udp= _l3src_l4src', 'udp_l3dst_l4src') > + .replace('l3-= src-only', 'l3-dst-only') > + .replace('dst= =3D"192.168.0.1",src=3D"192.168.1.2"', > 'dst=3D"192.168.0.1",src=3D"192.168.1.3"') > + .replace('dst= =3D"192.168.1.1",src=3D"192.168.0.2"', > 'dst=3D"192.168.0.1",src=3D"192.168.1.2"') > + .replace('dst= =3D"192.168.0.1",src=3D"192.168.1.3"', > 'dst=3D"192.168.1.1",src=3D"192.168.0.2"') > + ) > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4dst =3D > eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4src) > + .replace('udp= _l3dst_l4src', 'udp_l3dst_l4dst') > + .replace('l3-= src-only', 'l3-dst-only') > + .replace('l4-= src-only', 'l4-dst-only') > + .replace('spo= rt=3D32, dport=3D23', 'sport=3D22, > dport=3D34') > + .replace('spo= rt=3D22, dport=3D33', 'sport=3D32, > dport=3D23') > + ) > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only =3D { > + 'sub_casename': > 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / udp / end actions rss types ipv4-udp l4-src-only end key_len 0 queues e= nd / > end', > + 'test': [ > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'].replace('sport=3D22', > 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0', > '192.168.1') > + .replace('dport=3D23', 'dport=3D33') > + .replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'].replace('192.168.0', > '192.168.1') > + .replace('dport=3D23', 'dport=3D33') > + .replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4dst_only =3D > eval(str(mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only) > + .replace('udp_= l4src_only', 'udp_l4dst_only') > + .replace('l4-s= rc-only', 'l4-dst-only') > + .replace('spor= t=3D32, dport=3D23', 'sport=3D22, > dport=3D34') > + .replace('spor= t=3D22, dport=3D33', 'sport=3D32, > dport=3D23') > + ) > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / udp / end actions rss types ipv4-udp end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('sport=3D22', > 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('dport=3D23', > 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.1'= , > '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('192.168.0.2'= , > '192.168.1.2'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('0x123456', > '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / udp / end actions rss types gtpu end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'] > + .replace('192.168.0.', '192.168.1.') > + .replace('sport=3D22, dport=3D23', 'sport=3D32, dport=3D33')= , > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'] > + .replace('192.168.0.', '192.168.1.') > + .replace('sport=3D22, dport=3D23', 'sport=3D32, dport=3D33')= , > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'].replace('0x123456', > '0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['dl'], > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_basic['ul'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz =3D [ > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_only, > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_only, > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3src_l4dst, > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4src, > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l3dst_l4dst, > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4src_only, > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_l4dst_only, > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp, > + mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_gtpu, > +] > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz =3D > [eval(str(element).replace('TCP', 'TCP1').replace('udp', 'tcp') > + .replace('UDP(sport', 'TCP(sp= ort').replace('TCP1', 'UDP') > + .replace('ipv4 / tcp / gtpu',= 'ipv4 / udp / gtpu')) > + for element in > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz] > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv6_toeplitz =3D > [eval(str(element).replace('gtp_psc / ipv4', 'gtp_psc / ipv6') > + .replace('types ipv= 4', 'types ipv6') > + .replace('ul_dl_ipv= 4', 'ul_dl_ipv6') > + .replace(', frag=3D= 6)', ')/IPv6ExtHdrFragment()') > + .replace('IPv6(src= =3D"ABAB:910B:6666:3457:8295:33 > 33:1800:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(dst=3D= "192 > .168.0.3", src=3D"192.168.0.3"',) > + .replace('IP(dst=3D= "192.168.0.1",src=3D"192.168.0.2"', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D= "192.168.1.1",src=3D"192.168.0.2"', > 'IPv6(dst=3D"1212:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22: > 5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D= "192.168.0.1",src=3D"192.168.1.2"', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"3434:910A:22= 22: > 5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D= "192.168.1.1",src=3D"192.168.1.2"', > 'IPv6(dst=3D"1212:910B:6666:3457:8295:3333:1800:2929",src=3D"3434:910A:22= 22:5 > 498:8475:1111:3900:2020"') > + .replace('IP(dst=3D= "192.168.0.3",src=3D"192.168.0.3"', > 'IP(dst=3D"192.168.0.1",src=3D"192.168.0.2"')) > + for element in > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_toeplitz] > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv6_udp_toeplitz =3D > [eval(str(element).replace('gtp_psc / ipv4', 'gtp_psc / ipv6') > + .replace('ipv4-= udp', 'ipv6-udp') > + .replace('ul_dl= _ipv4_udp', 'ul_dl_ipv6_udp') > + .replace('IP(ds= t=3D"192.168.0.1",src=3D"192.168.0.2" > ', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(ds= t=3D"192.168.1.1",src=3D"192.168.0.2" > ', > 'IPv6(dst=3D"1212:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22: > 5498:8475:1111:3900:2020"') > + .replace('IP(ds= t=3D"192.168.0.1",src=3D"192.168.1.2" > ', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"3434:910A:22= 22: > 5498:8475:1111:3900:2020"') > + .replace('IP(ds= t=3D"192.168.1.1",src=3D"192.168.1.2" > ', > 'IPv6(dst=3D"1212:910B:6666:3457:8295:3333:1800:2929",src=3D"3434:910A:22= 22:5 > 498:8475:1111:3900:2020"')) > + for element in > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_udp_toeplitz] > + > +mac_ipv4_gtpu_eh_without_ul_dl_ipv6_tcp_toeplitz =3D > [eval(str(element).replace('gtp_psc / ipv4', 'gtp_psc / ipv6') > + .replace('ipv4 = / tcp', 'ipv6 / tcp') > + .replace('ipv4-= tcp', 'ipv6-tcp') > + .replace('ul_dl= _ipv4_tcp', 'ul_dl_ipv6_tcp') > + .replace('IP(ds= t=3D"192.168.0.1",src=3D"192.168.0.2" > ', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(ds= t=3D"192.168.1.1",src=3D"192.168.0.2" > ', > 'IPv6(dst=3D"1212:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22: > 5498:8475:1111:3900:2020"') > + .replace('IP(ds= t=3D"192.168.0.1",src=3D"192.168.1.2" > ', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"3434:910A:22= 22: > 5498:8475:1111:3900:2020"') > + .replace('IP(ds= t=3D"192.168.1.1",src=3D"192.168.1.2" > ', > 'IPv6(dst=3D"1212:910B:6666:3457:8295:3333:1800:2929",src=3D"3434:910A:22= 22:5 > 498:8475:1111:3900:2020"')) > + for element in > mac_ipv4_gtpu_eh_without_ul_dl_ipv4_tcp_toeplitz] > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_basic =3D > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1", > src=3D"192.168.0.2")/UDP(sport=3D22,dport=3D23)/("X"*480)' > +mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1", src=3D"192.168.0.2")/UDP(sport= =3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1", src=3D"192.168.0.2")/TCP(sport= =3D22, > dport=3D23)/("X"*480)', > +] > +mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only end > key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst) > + .replace('mac_ipv4_gtpu_eh_dl_= ipv4_udp_l3dst', > 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src') > + .replace('l3-dst-only', 'l3-sr= c-only') > + .replace('check_hash_same', 'h= ash_check_different') > + .replace('check_hash_different= ', 'check_hash_same') > + .replace('hash_check_different= ', > 'check_hash_different')) > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-s= rc-only > end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=3D22', 'sport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=3D23', > 'dport=3D33').replace('192.168.0.1', '192.168.1.1'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-src-only l4-d= st-only > end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=3D23', 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=3D22', > 'sport=3D32').replace('192.168.0.1', '192.168.1.1'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-s= rc-only > end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=3D22', 'sport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=3D23', > 'dport=3D33').replace('192.168.0.2', '192.168.1.2'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-dst-only l4-d= st-only > end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=3D23', 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=3D22', 'sport=3D32') > + .replace('1= 92.168.0.2', '192.168.1.2'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_eh_dl_ipv4_udp_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end > key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=3D23', 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=3D22', 'sport=3D32') > + .replace('1= 92.168.0', '192.168.1'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_eh_dl_ipv4_udp_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l4-src-only end > key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=3D22', 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=3D23', 'dport=3D32') > + .replace('1= 92.168.0', '192.168.1'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_all =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_all', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 qu= eues > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('sport=3D22', 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('dport=3D23', 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.1', '192.168.1.1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0.2', '192.168.1.2'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('teid=3D0x123456', > 'teid=3D0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv4_udp_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv4 / udp / end actions rss types gtpu end key_len 0 queues= end > / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('192.168.0', '192.168.1') > + .replace('s= port=3D22', 'sport=3D32') > + .replace('d= port=3D23', 'dport=3D33'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv4_udp_basic.replace('teid=3D0x123456', > 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv4_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv4_udp_toeplitz =3D > [mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst, > mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src, > + mac_ipv4_gtpu_eh_dl_ipv4_udp_l3= dst_l4src, > mac_ipv4_gtpu_eh_dl_ipv4_udp_l3dst_l4dst, > + mac_ipv4_gtpu_eh_dl_ipv4_udp_l3= src_l4src, > mac_ipv4_gtpu_eh_dl_ipv4_udp_l3src_l4dst, > + mac_ipv4_gtpu_eh_dl_ipv4_udp_l4= src, > mac_ipv4_gtpu_eh_dl_ipv4_udp_l4dst, > + mac_ipv4_gtpu_eh_dl_ipv4_udp_al= l, > mac_ipv4_gtpu_eh_dl_ipv4_udp_gtpu] > + > +mac_ipv4_gtpu_eh_ul_ipv4_udp_toeplitz =3D > [eval(str(element).replace('pdu_type=3D1', 'pdu_type=3D2') > + .replace('pdu_= type=3D0', > 'pdu_type=3D1').replace('pdu_type=3D2', 'pdu_type=3D0') > + .replace('gtp_= psc pdu_t is 0', 'gtp_psc pdu_t is > 1') > + .replace('eh_d= l', 'eh_ul')) > + for element in > mac_ipv4_gtpu_eh_dl_ipv4_udp_toeplitz] > + > +mac_ipv4_gtpu_eh_ipv4_udp_toeplitz =3D > mac_ipv4_gtpu_eh_dl_ipv4_udp_toeplitz + > mac_ipv4_gtpu_eh_ul_ipv4_udp_toeplitz > + > +mac_ipv4_gtpu_eh_ipv4_tcp_toeplitz =3D [eval(str(element).replace('TCP', > 'TCP1').replace('udp', 'tcp') > + .replace('UDP(spo= rt', 'TCP(sport').replace('TCP1', > 'UDP') > + .replace('ipv4 / = tcp / gtpu', 'ipv4 / udp / gtpu')) > + for element in mac_ipv4_gtpu_eh_ip= v4_udp_toeplitz] > + > +mac_ipv4_gtpu_eh_dl_ipv6_basic =3D { > + 'ipv6-nonfrag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + 'ipv6-frag': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/IPv6ExtHdrFragment()/("X"*48 > 0)', > + 'ipv6-icmp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/ICMP()/("X"*480)', > + 'ipv6-udp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP()/("X"*480)', > + 'ipv6-tcp': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP()/("X"*480)', > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv6_basic).replace('ABAB', '1212')) > +mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv6_basic).replace('CDCD', '3434')) > +mac_ipv4_gtpu_eh_dl_ipv6_unmatched_pkt =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")/("X"*480)', > +] > +mac_ipv4_gtpu_eh_dl_ipv6_l3dst_only =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 = queues > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'= ], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > nonfrag'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > frag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > frag'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > icmp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > icmp'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > udp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > udp'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > tcp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > tcp'], > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_l3src_only =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv6_l3dst_only) > + .replace('mac_ipv4_gtpu_eh_dl_ipv6_= l3dst', > 'mac_ipv4_gtpu_eh_dl_ipv6_l3src') > + .replace('l3-dst-only', 'l3-src-onl= y') > + .replace('check_hash_same', 'hash_c= heck_different') > + .replace('check_hash_different', 'c= heck_hash_same') > + .replace('hash_check_different', 'c= heck_hash_different')) > +mac_ipv4_gtpu_eh_dl_ipv6_all =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_all', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / end actions rss types ipv6 end key_len 0 queues end /= end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'= ], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > nonfrag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > nonfrag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > frag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > frag'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > frag'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > frag'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > icmp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > icmp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > icmp'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > icmp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > udp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > udp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > udp'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > udp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3dst_changed_pkt['i= pv6- > tcp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_l3src_changed_pkt['i= pv6- > tcp'], > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > tcp'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > tcp'].replace('0x123456', '0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / end actions rss types gtpu end key_len 0 queues end /= end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'= ], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > nonfrag'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > nonfrag'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > frag'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > frag'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > icmp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > icmp'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > udp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > udp'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'], > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > tcp'].replace('teid=3D0x123456', 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6- > tcp'].replace('ABAB', '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_unmatched_pkt, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': [ > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-nonfrag'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-frag'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-icmp'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-udp'], > + mac_ipv4_gtpu_eh_dl_ipv6_basic['ipv6-tcp'], > + ], > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_toeplitz =3D > [mac_ipv4_gtpu_eh_dl_ipv6_l3dst_only, > mac_ipv4_gtpu_eh_dl_ipv6_l3src_only, > + mac_ipv4_gtpu_eh_dl_ipv6_all, > mac_ipv4_gtpu_eh_dl_ipv6_gtpu] > + > +mac_ipv4_gtpu_eh_ul_ipv6_toeplitz =3D > [eval(str(element).replace('pdu_type=3D1', 'pdu_type=3D2') > + .replace('pdu_type= =3D0', > 'pdu_type=3D1').replace('pdu_type=3D2', 'pdu_type=3D0') > + .replace('gtp_psc = pdu_t is 0', 'gtp_psc pdu_t is 1') > + .replace('eh_dl', = 'eh_ul')) > + for element in mac_ipv4_gtpu_eh_dl_= ipv6_toeplitz] > + > +mac_ipv4_gtpu_eh_ipv6_toeplitz =3D mac_ipv4_gtpu_eh_dl_ipv6_toeplitz + > mac_ipv4_gtpu_eh_ul_ipv6_toeplitz > + > +mac_ipv4_gtpu_eh_dl_ipv6_udp_basic =3D > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22,dport=3D23)/("X"= * > 480)' > +mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22, > dport=3D23)/("X"*480)', > +] > +mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only end > key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('C= DCD', > '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('A= BAB', > '1212'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src =3D > eval(str(mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst) > + .replace('mac_ipv4_gtpu_eh_dl_= ipv6_udp_l3dst', > 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src') > + .replace('l3-dst-only', 'l3-sr= c-only') > + .replace('check_hash_same', 'h= ash_check_different') > + .replace('check_hash_different= ', 'check_hash_same') > + .replace('hash_check_different= ', > 'check_hash_different')) > + > +mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-s= rc-only > end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('A= BAB', > '1212'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=3D22', 'sport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=3D23', > 'dport=3D33').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-src-only l4-d= st-only > end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('A= BAB', > '1212'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=3D23', 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=3D22', > 'sport=3D32').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-s= rc-only > end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('C= DCD', > '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=3D22', 'sport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=3D23', > 'dport=3D33').replace('ABAB', '1212'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l3-dst-only l4-d= st-only > end key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('C= DCD', > '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=3D23', 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=3D22', > 'sport=3D32').replace('ABAB', '1212'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_eh_dl_ipv6_udp_l4dst =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l4dst', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l4-dst-only end > key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=3D23', 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=3D22', 'sport=3D32') > + .replace('ABAB', = '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > +mac_ipv4_gtpu_eh_dl_ipv6_udp_l4src =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_l4src', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp l4-src-only end > key_len 0 queues end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=3D22', 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=3D23', 'dport=3D32') > + .replace('ABAB', = '1212').replace('CDCD', '3434'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_udp_all =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_all', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 qu= eues > end / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('sport=3D22', 'sport=3D32'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('dport=3D23', 'dport=3D33'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('C= DCD', > '3434'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('A= BAB', > '1212'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('teid=3D0x123456', > 'teid=3D0x12345'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_udp_gtpu =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_dl_ipv6_udp_gtpu', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc > pdu_t is 0 / ipv6 / udp / end actions rss types gtpu end key_len 0 queues= end > / end', > + 'test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('A= BAB', > '1212').replace('CDCD', '3434') > + .replace('sport= =3D22', 'sport=3D32') > + .replace('dport= =3D23', 'dport=3D33'), > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > mac_ipv4_gtpu_eh_dl_ipv6_udp_basic.replace('teid=3D0x123456', > 'teid=3D0x12345'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_unmatch, > + 'action': 'check_no_hash', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': mac_ipv4_gtpu_eh_dl_ipv6_udp_basic, > + 'action': 'check_no_hash', > + }, > + ] > +} > + > +mac_ipv4_gtpu_eh_dl_ipv6_udp_toeplitz =3D > [mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst, > mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src, > + mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4= src, > mac_ipv4_gtpu_eh_dl_ipv6_udp_l3dst_l4dst, > + mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4= src, > mac_ipv4_gtpu_eh_dl_ipv6_udp_l3src_l4dst, > + mac_ipv4_gtpu_eh_dl_ipv6_udp_l4src, > mac_ipv4_gtpu_eh_dl_ipv6_udp_l4dst, > + mac_ipv4_gtpu_eh_dl_ipv6_udp_all, > mac_ipv4_gtpu_eh_dl_ipv6_udp_gtpu] > +mac_ipv4_gtpu_eh_ul_ipv6_udp_toeplitz =3D > [eval(str(element).replace('pdu_type=3D1', 'pdu_type=3D2') > + .replace('pdu_= type=3D0', > 'pdu_type=3D1').replace('pdu_type=3D2', 'pdu_type=3D0') > + .replace('gtp_= psc pdu_t is 0', 'gtp_psc pdu_t is > 1') > + .replace('eh_d= l', 'eh_ul')) > + for element in > mac_ipv4_gtpu_eh_dl_ipv6_udp_toeplitz] > +mac_ipv4_gtpu_eh_ipv6_udp_toeplitz =3D > mac_ipv4_gtpu_eh_dl_ipv6_udp_toeplitz + > mac_ipv4_gtpu_eh_ul_ipv6_udp_toeplitz > + > +mac_ipv4_gtpu_eh_ipv6_tcp_toeplitz =3D [eval(str(element).replace('TCP', > 'TCP1').replace('udp', 'tcp') > + .replace('UDP(spo= rt', 'TCP(sport').replace('TCP1', > 'UDP') > + .replace('ipv4 / = tcp / gtpu', 'ipv4 / udp / gtpu')) > + for element in mac_ipv4_gtpu_eh_ip= v6_udp_toeplitz] > + > +default_pattern_ipv4_gtpu_eh_dl_ipv4_src =3D > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1", src=3D"192.168.0.2")/("X"*480)' > +default_pattern_ipv4_gtpu_eh_dl_ipv4_dst =3D > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2", src=3D"192.168.0.1")/("X"*480)' > +default_pattern_ipv4_gtpu_eh_dl_ipv6_src =3D > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)' > +default_pattern_ipv4_gtpu_eh_dl_ipv6_dst =3D > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)' > +default_pattern_support_ipv4 =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_gtpu', > + 'port_id': 0, > + 'rule': '', > + 'test': [ > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst, > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv4_src.replace('pdu_type=3D0', > 'pdu_type=3D1'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('pdu_type=3D0', > 'pdu_type=3D1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv4_src.replace('/("X"', > '/UDP(sport=3D22,dport=3D23)/("X"'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('/("X"', > '/UDP(sport=3D22,dport=3D23)/("X"'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src > + .replace('/("X"', '/UDP(sport=3D22,dport=3D23)/("X"') > + .replace('pdu_type=3D0', 'pdu_type=3D1'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/("X"', '/UDP(sport=3D22,dport=3D23)/("X"') > + .replace('pdu_type=3D0', 'pdu_type=3D1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv4_src.replace('/("X"', > '/TCP(sport=3D22,dport=3D23)/("X"'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('/("X"', > '/TCP(sport=3D22,dport=3D23)/("X"'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src > + .replace('/("X"', '/TCP(sport=3D22,dport=3D23)/("X"') > + .replace('pdu_type=3D0', 'pdu_type=3D1'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/("X"', '/TCP(sport=3D22,dport=3D23)/("X"') > + .replace('pdu_type=3D0', 'pdu_type=3D1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src > + .replace('/("X"', '/UDP(sport=3D22,dport=3D23)/("X"') > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/("X"', '/UDP(sport=3D22,dport=3D23)/("X"') > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_src > + .replace('/("X"', '/TCP(sport=3D22,dport=3D23)/("X"') > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/("X"', '/TCP(sport=3D22,dport=3D23)/("X"') > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src, > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst, > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv6_src.replace('pdu_type=3D0', > 'pdu_type=3D1'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('pdu_type=3D0', > 'pdu_type=3D1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv6_src.replace('/("X"', > '/UDP(sport=3D22,dport=3D23)/("X"'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('/("X"', > '/UDP(sport=3D22,dport=3D23)/("X"'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src > + .replace('/("X"', '/UDP(sport=3D22,dport=3D23)/("X"') > + .replace('pdu_type=3D0', 'pdu_type=3D1'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/("X"', '/UDP(sport=3D22,dport=3D23)/("X"') > + .replace('pdu_type=3D0', 'pdu_type=3D1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv6_src.replace('/("X"', > '/TCP(sport=3D22,dport=3D23)/("X"'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > default_pattern_ipv4_gtpu_eh_dl_ipv4_dst.replace('/("X"', > '/TCP(sport=3D22,dport=3D23)/("X"'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src > + .replace('/("X"', '/TCP(sport=3D22,dport=3D23)/("X"') > + .replace('pdu_type=3D0', 'pdu_type=3D1'), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/("X"', '/TCP(sport=3D22,dport=3D23)/("X"') > + .replace('pdu_type=3D0', 'pdu_type=3D1'), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src > + .replace('/("X"', '/UDP(sport=3D22,dport=3D23)/("X"') > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/("X"', '/UDP(sport=3D22,dport=3D23)/("X"') > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv6_src > + .replace('/("X"', '/TCP(sport=3D22,dport=3D23)/("X"') > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'save_hash', > + }, > + { > + 'send_packet': default_pattern_ipv4_gtpu_eh_dl_ipv4_dst > + .replace('/("X"', '/TCP(sport=3D22,dport=3D23)/("X"') > + .replace('/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)', ''), > + 'action': 'check_hash_different', > + }, > + ], > +} > + > +inner_l4_mac_ipv4_gtpu_ipv4_udp_tcp =3D { > + 'sub_casename': 'mac_ipv4_gtpu_ipv4_udp_tcp', > + 'port_id': 0, > + 'rule': [ > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / u= dp / end > actions rss types ipv4-udp end key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv4 / t= cp / end > actions rss types ipv4-tcp end key_len 0 queues end / end', > + ], > + 'test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:ca:a3:28:94")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22,dport > =3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:ca:a3:28:94")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dport > =3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:ca:a3:28:94")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22,dport > =3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:ca:a3:28:94")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dport > =3D23)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + ] > +} > +inner_l4_mac_ipv6_gtpu_ipv4_udp_tcp =3D > eval(str(inner_l4_mac_ipv4_gtpu_ipv4_udp_tcp) > + .replace('eth / ipv4', 'eth /= ipv6') > + .replace('gtpu / ipv4', 'gtpu= / gtp_psc / ipv4') > + .replace('IP()', 'IPv6()') > + .replace('teid=3D0x123456)', > 'teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)') > + .replace('mac_ipv4', 'mac_ipv= 6')) > +inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_ipv6_udp_tcp', > + 'port_id': 0, > + 'rule': [ > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc= pdu_t is 0 > / ipv6 / udp / end actions rss types ipv6-udp end key_len 0 queues end / = end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc= pdu_t is 0 > / ipv6 / tcp / end actions rss types ipv6-tcp end key_len 0 queues end / = end', > + ], > + 'test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22,dport=3D23)/("X"= * > 480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + 'action': 'check_hash_different', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22,dport=3D23)/("X"= * > 480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + 'action': 'check_hash_same', > + }, > + ] > +} > +inner_l4_mac_ipv6_gtpu_eh_ipv6_udp_tcp =3D > eval(str(inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp) > + .replace('eth / ipv4', 'et= h / ipv6') > + .replace('pdu_t is 0', 'pd= u_t is 1') > + .replace('pdu_type=3D0', '= pdu_type=3D1') > + .replace('IP()', 'IPv6()') > + .replace('mac_ipv4', 'mac_= ipv6')) > +inner_l4_protocal_hash =3D [inner_l4_mac_ipv4_gtpu_ipv4_udp_tcp, > inner_l4_mac_ipv6_gtpu_ipv4_udp_tcp, > + inner_l4_mac_ipv4_gtpu_eh_ipv6_udp_tcp, > inner_l4_mac_ipv6_gtpu_eh_ipv6_udp_tcp] > + > +mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric =3D { > + 'sub_casename': 'mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / end actions rss func symmetric_toeplitz types ipv4 end key_len 0 queues > end / end', > + 'pre-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2",frag=3D6)/("X= "*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1",frag=3D6)/("X= "*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/ICMP()/("X"*= 480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'action': {'save_hash': 'ipv4-nonfrag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2",frag=3D6)/("X= "*480)', > + 'action': {'save_hash': 'ipv4-frag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1",frag=3D6)/("X= "*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': {'save_hash': 'ipv4-icmp'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/ICMP()/("X"*= 480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/= ("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/= ("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + 'action': {'check_no_hash_or_different': 'ipv4-nonfrag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2",frag=3D6)/("X= "*480)', > + 'action': {'check_no_hash_or_different': 'ipv4-frag'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/ICMP()/("X"*= 480)', > + 'action': {'check_no_hash_or_different': 'ipv4-icmp'}, > + }, > + ], > +} > + > +mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric =3D > eval(str(mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric) > + .replace('gtp_psc /= ipv4', 'gtp_psc / ipv6') > + .replace('types ipv= 4', 'types ipv6') > + .replace('gtpu_eh_i= pv4', 'gtpu_eh_ipv6') > + .replace(',frag=3D6= )', ')/IPv6ExtHdrFragment()') > + .replace('IPv6(dst= =3D"ABAB:910B:6666:3457:8295:33 > 33:1800:2929",src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(dst=3D= "192. > 168.1.1", src=3D"192.168.1.2"',) > + .replace('IPv6(src= =3D"ABAB:910B:6666:3457:8295:33 > 33:1800:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(src=3D= "192. > 168.1.1", dst=3D"192.168.1.2"',) > + .replace('IP(dst=3D= "192.168.0.1",src=3D"192.168.0.2"', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(dst=3D= "192.168.0.2",src=3D"192.168.0.1"', > 'IPv6(dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",src=3D"ABAB:910B:66= 66 > :3457:8295:3333:1800:2929"') > + ) > + > +mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric =3D { > + 'sub_casename': > 'mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / udp / end actions rss func symmetric_toeplitz types ipv4-udp end key_le= n 0 > queues end / end', > + 'pre-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'save_hash', 'udp-dl'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'save_hash', 'udp-ul'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'check_hash_different', 'udp-dl'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'check_hash_different', 'udp-ul'}, > + }, > + ], > +} > +mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric =3D > eval(str(mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric) > + .replace('gtp_p= sc / ipv4', 'gtp_psc / ipv6') > + .replace('types= ipv4', 'types ipv6') > + .replace('gtpu_= eh_ipv4', 'gtpu_eh_ipv6') > + .replace('IPv6(= dst=3D"ABAB:910B:6666:3457:8295: > 3333:1800:2929",src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(dst= =3D"1 > 92.168.1.1", src=3D"192.168.1.2"',) > + .replace('IPv6(= src=3D"ABAB:910B:6666:3457:8295: > 3333:1800:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(src= =3D"1 > 92.168.1.1", dst=3D"192.168.1.2"',) > + .replace('IP(ds= t=3D"192.168.0.1",src=3D"192.168.0.2" > ', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(ds= t=3D"192.168.0.2",src=3D"192.168.0.1" > ', > 'IPv6(dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",src=3D"ABAB:910B:66= 66 > :3457:8295:3333:1800:2929"') > + ) > + > +mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric =3D { > + 'sub_casename': > 'mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric', > + 'port_id': 0, > + 'rule': 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 > / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp end key_le= n 0 > queues end / end', > + 'pre-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'save_hash', 'udp-dl'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'save_hash', 'udp-ul'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_same', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/UDP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22, > dport=3D23)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': 'save_hash', > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + 'action': 'check_hash_different', > + }, > + ], > + 'post-test': [ > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'check_hash_different', 'udp-dl'}, > + }, > + { > + 'send_packet': > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + 'action': {'check_hash_different', 'udp-ul'}, > + }, > + ], > +} > + > +mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric =3D > eval(str(mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric) > + .replace('gtp_p= sc / ipv4', 'gtp_psc / ipv6') > + .replace('types= ipv4', 'types ipv6') > + .replace('gtpu_= eh_ipv4', 'gtpu_eh_ipv6') > + .replace('IPv6(= dst=3D"ABAB:910B:6666:3457:8295: > 3333:1800:2929",src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(dst= =3D"1 > 92.168.1.1", src=3D"192.168.1.2"',) > + .replace('IPv6(= src=3D"ABAB:910B:6666:3457:8295: > 3333:1800:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020"','IP(src= =3D"1 > 92.168.1.1", dst=3D"192.168.1.2"',) > + .replace('IP(ds= t=3D"192.168.0.1",src=3D"192.168.0.2" > ', > 'IPv6(dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",src=3D"CDCD:910A:22= 22 > :5498:8475:1111:3900:2020"') > + .replace('IP(ds= t=3D"192.168.0.2",src=3D"192.168.0.1" > ', > 'IPv6(dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",src=3D"ABAB:910B:66= 66 > :3457:8295:3333:1800:2929"') > + ) > + > + > +class TestCVLAdvancedRSSGTPU(TestCase): > + > + def set_up_all(self): > + """ > + Run at the start of each test suite. > + prerequisites. > + """ > + # Based on h/w type, choose how many ports to use > + self.dut_ports =3D self.dut.get_ports(self.nic) > + self.verify(len(self.dut_ports) >=3D 2, "Insufficient ports for = testing") > + # Verify that enough threads are available > + cores =3D self.dut.get_core_list("1S/4C/1T") > + self.verify(cores is not None, "Insufficient cores for speed tes= ting") > + self.ports_socket =3D self.dut.get_numa_id(self.dut_ports[0]) > + self.tester_port0 =3D self.tester.get_local_port(self.dut_ports[= 0]) > + self.tester_port1 =3D self.tester.get_local_port(self.dut_ports[= 1]) > + self.tester_iface0 =3D self.tester.get_interface(self.tester_por= t0) > + self.tester_iface1 =3D self.tester.get_interface(self.tester_por= t1) > + self.pci0 =3D self.dut.ports_info[self.dut_ports[0]]['pci'] > + self.pci1 =3D self.dut.ports_info[self.dut_ports[1]]['pci'] > + self.pass_flag =3D 'passed' > + self.fail_flag =3D 'failed' > + > + self.pkt =3D Packet() > + self.pmd_output =3D PmdOutput(self.dut) > + self.launch_testpmd() > + self.symmetric =3D False > + self.rxq =3D 64 > + self.rssprocess =3D RssProcessing(self, self.pmd_output, > [self.tester_iface0, self.tester_iface1], self.rxq) > + self.logger.info('rssprocess.tester_ifaces: > {}'.format(self.rssprocess.tester_ifaces)) > + self.logger.info('rssprocess.test_case: > {}'.format(self.rssprocess.test_case)) > + > + def set_up(self): > + """ > + Run before each test case. > + """ > + > + # check pkg version match > + > + if self.symmetric: > + self.pmd_output.execute_cmd("port config all rss all") > + self.pmd_output.execute_cmd("start") > + > + def launch_testpmd(self, symmetric=3DFalse): > + if symmetric: > + param =3D "--rxq=3D64 --txq=3D64" > + else: > + param =3D "--rxq=3D64 --txq=3D64 --disable-rss --rxd=3D384 = --txd=3D384" > + self.pmd_output.start_testpmd(cores=3D"1S/4C/1T", param=3Dparam, > + eal_param=3Df"-w {self.pci0}= ", socket=3Dself.ports_socket) > + self.symmetric =3D symmetric > + if symmetric is True: > + ''' > + symmetric may be False/True/2(any other not negative value) > + False: disable rss > + True: enable rss and execute port config all rss > + 2: enable rss and do not execute port config all rss > + ''' > + # Need config rss in setup > + self.pmd_output.execute_cmd("port config all rss all") > + self.pmd_output.execute_cmd("set fwd rxonly") > + self.pmd_output.execute_cmd("set verbose 1") > + res =3D self.pmd_output.wait_link_status_up('all', timeout=3D15) > + self.verify(res is True, 'there have port link is down') > + > + def switch_testpmd(self, symmetric=3DTrue): > + if symmetric !=3D self.symmetric: > + self.pmd_output.quit() > + self.launch_testpmd(symmetric=3Dsymmetric) > + self.pmd_output.execute_cmd("start") > + > + def test_mac_ipv4_gtpu_ipv4(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 4_toeplitz) > + > + def test_mac_ipv4_gtpu_ipv4_udp(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 4_udp_toeplitz) > + > + def test_mac_ipv4_gtpu_ipv4_tcp(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 4_tcp_toeplitz) > + > + def test_mac_ipv4_gtpu_ipv6(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 6_toeplitz) > + > + def test_mac_ipv4_gtpu_ipv6_udp(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 6_udp_toeplitz) > + > + def test_mac_ipv4_gtpu_ipv6_tcp(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 6_tcp_toeplitz) > + > + def test_mac_ipv6_gtpu_ipv4(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_toeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv4_udp(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_udp_toep > litz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv4_tcp(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_tcp_toepli > tz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv6(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_toeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv6_udp(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_udp_toep > litz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv6_tcp(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_tcp_toepli > tz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv4_gtpu_eh_ipv4(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv4_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv4_udp(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv4_udp_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv4_tcp(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv4_tcp_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv6(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv6_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv6_udp(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv6_udp_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv6_tcp(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv6_tcp_toeplitz) > + > + def test_mac_ipv6_gtpu_eh_ipv4(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_toepli > tz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv4_udp(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_udp_t > oeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv4_tcp(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_t > oeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_toepli > tz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_udp(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_udp_t > oeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_tcp(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_tcp_t > oeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv4_gtpu_eh_ipv4_without_ul_dl(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _without_ul_dl_ipv4_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _without_ul_dl_ipv4_udp_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _without_ul_dl_ipv4_tcp_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv6_without_ul_dl(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _without_ul_dl_ipv6_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _without_ul_dl_ipv6_udp_toeplitz) > + > + def test_mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl(self): > + self.switch_testpmd(symmetric=3DFalse) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _without_ul_dl_ipv6_tcp_toeplitz) > + > + def test_mac_ipv6_gtpu_eh_ipv4_without_ul_dl(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul > _dl_ipv4_toeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv4_udp_without_ul_dl(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul > _dl_ipv4_udp_toeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv4_tcp_without_ul_dl(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul > _dl_ipv4_tcp_toeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_without_ul_dl(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul > _dl_ipv6_toeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_udp_without_ul_dl(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul > _dl_ipv6_udp_toeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_tcp_without_ul_dl(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_without_ul > _dl_ipv6_tcp_toeplitz) > + self.switch_testpmd(symmetric=3DFalse) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv4_gtpu_ipv4_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 4_symmetric) > + > + def test_mac_ipv4_gtpu_ipv4_udp_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 4_udp_symmetric) > + > + def test_mac_ipv4_gtpu_ipv4_tcp_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 4_tcp_symmetric) > + > + def test_mac_ipv4_gtpu_ipv6_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 6_symmetric) > + > + def test_mac_ipv4_gtpu_ipv6_udp_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 6_udp_symmetric) > + > + def test_mac_ipv4_gtpu_ipv6_tcp_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_ip= v > 6_tcp_symmetric) > + > + def test_mac_ipv6_gtpu_ipv4_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_symmetri > c) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv4_udp_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_udp_sym > metric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv4_tcp_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv4_tcp_sym > metric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv6_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_symmetri > c) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv6_udp_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_udp_sym > metric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_ipv6_tcp_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_ipv6_tcp_sym > metric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv4_gtpu_eh_ipv4_symmetric(self): > + self.switch_testpmd(symmetric=3D2) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv4_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv4_udp_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv4_udp_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv4_tcp_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv4_tcp_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv6_symmetric(self): > + self.switch_testpmd(symmetric=3D2) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv6_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv6_udp_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv6_udp_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv6_tcp_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv6_tcp_symmetric) > + > + def test_mac_ipv6_gtpu_eh_ipv4_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_symm > etric) > + self.switch_testpmd(symmetric=3D2) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv4_udp_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_s > ymmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv4_tcp_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_s > ymmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_symm > etric) > + self.switch_testpmd(symmetric=3D2) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_udp_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_udp_s > ymmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_tcp_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_tcp_s > ymmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv4_gtpu_eh_ipv4_without_ul_dl_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv4_without_ul_dl_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv4_udp_without_ul_dl_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv4_udp_without_ul_dl_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv4_tcp_without_ul_dl_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv6_without_ul_dl_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv6_without_ul_dl_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv6_udp_without_ul_dl_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv6_udp_without_ul_dl_symmetric) > + > + def test_mac_ipv4_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric(self): > + self.switch_testpmd(symmetric=3DTrue) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dmac_ipv4_gtpu_eh > _ipv6_tcp_without_ul_dl_symmetric) > + > + def test_mac_ipv6_gtpu_eh_ipv4_without_ul_dl_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_witho > ut_ul_dl_symmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv4_udp_without_ul_dl_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_udp_ > without_ul_dl_symmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv4_tcp_without_ul_dl_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv4_tcp_w > ithout_ul_dl_symmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_without_ul_dl_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_witho > ut_ul_dl_symmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_udp_without_ul_dl_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_udp_ > without_ul_dl_symmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_mac_ipv6_gtpu_eh_ipv6_tcp_without_ul_dl_symmetric(self): > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(mac_ipv4_gtpu_eh_ipv6_tcp_w > ithout_ul_dl_symmetric) > + self.switch_testpmd(symmetric=3DTrue) > + self.rssprocess.handle_rss_distribute_cases(cases_info=3Dipv6_te= mplate) > + > + def test_inner_l4_protocal_hash(self): > + self.switch_testpmd(2) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3Dinner_l4_protoca= l_ > hash) > + > + def test_default_pattern_support(self): > + self.switch_testpmd(symmetric=3DTrue) > + ipv6_template =3D > self.rssprocess.get_ipv6_template_by_ipv4(default_pattern_support_ipv4) > + > self.rssprocess.handle_rss_distribute_cases(cases_info=3D[default_pattern= _s > upport_ipv4] + ipv6_template) > + > + def test_negative_cases(self): > + negative_rules =3D [ > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / end > actions rss types ipv4-tcp end key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / end > actions rss types ipv6-udp end key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / end > actions rss types ipv4 end key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / udp / end > actions rss types udp end key_len 0 queues end / end'] > + self.rssprocess.create_rule(rule=3Dnegative_rules, check_stats= =3DFalse, > msg=3D"Invalid input pattern: Invalid argument") > + > + def test_symmetric_negative_cases(self): > + rules =3D [ > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 0 / ipv4 / end actions rss func symmetric_toeplitz types gtpu end key_len= 0 > queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4 l3-dst-only= end > key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 0 / ipv4 / end actions rss func symmetric_toeplitz types ipv4-udp end key= _len > 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-udp e= nd > key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4 end > key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv6-tcp e= nd > key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types tcp end ke= y_len > 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp l= 3-src- > only end key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / tcp / end > actions rss func symmetric_toeplitz types ipv4-tcp l4-dst-only end key_le= n 0 > queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 1 / ipv4 / tcp / end actions rss func symmetric_toeplitz types ipv4-tcp l= 3-dst- > only l4-src-only end key_len 0 queues end / end'] > + self.rssprocess.create_rule(rule=3Drules, check_stats=3DFalse) > + > + def test_global_simple_xor(self): > + self.switch_testpmd() > + rule1 =3D 'flow create 0 ingress pattern end actions rss func si= mple_xor > key_len 0 queues end / end' > + rule_li1 =3D self.rssprocess.create_rule(rule=3Drule1) > + pkts1 =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.2",src=3D"192.168.0.1")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IPv6(src=3D"CDCD:910A:2222:5498:8475:1111:3900:2020",dst= =3D" > ABAB:910B:6666:3457:8295:3333:1800:2929")/TCP(sport=3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:ca:a3:28:94")/IP(src=3D"1.1.4.1",dst=3D"2.2.2.3")/("X= "*480)', > + > 'Ether(dst=3D"68:05:ca:a3:28:94")/IP(src=3D"2.2.2.3",dst=3D"1.1.4.1")/("X= "*480)', > + > 'Ether(dst=3D"68:05:ca:a3:28:94")/IPv6(src=3D"CDCD:910A:2222:5498:8475:11= 11:39 > 00:2020",dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929")/("X" * 80)', > + > 'Ether(dst=3D"68:05:ca:a3:28:94")/IPv6(src=3D"ABAB:910B:6666:3457:8295:33= 33:18 > 00:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")/("X" * 80)', > + > 'Ether(dst=3D"68:05:ca:a3:28:94")/IPv6(src=3D"CDCD:910A:2222:5498:8475:11= 11:39 > 00:2020",dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=3D22, > dport=3D23)/("X" * 80)', > + > 'Ether(dst=3D"68:05:ca:a3:28:94")/IPv6(src=3D"ABAB:910B:6666:3457:8295:33= 33:18 > 00:2929",dst=3D"CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=3D22, > dport=3D23)/("X" * 80)', ] > + output =3D self.rssprocess.send_pkt_get_output(pkts=3Dpkts1) > + hash_values, rss_distribute =3D > self.rssprocess.get_hash_verify_rss_distribute(output) > + for i in range(0, len(hash_values), 2): > + self.verify(hash_values[i] =3D=3D hash_values[i + 1], > + 'the pair of packets with switched l3 address sh= ould have same > hash value') > + rule2 =3D [ > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / tcp / end > actions rss types ipv4-tcp end key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv6 / udp / end actio= ns rss types > ipv6-udp end key_len 0 queues end / end'] > + rule_li2 =3D self.rssprocess.create_rule(rule=3Drule2) > + pkts2 =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/TCP(sport=3D= 23, > dport=3D22)/("X"*480)', > + > 'Ether(dst=3D"68:05:ca:a3:28:94")/IPv6(src=3D"CDCD:910A:2222:5498:8475:11= 11:39 > 00:2020",dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=3D22, > dport=3D23)/("X" * 80)', > + > 'Ether(dst=3D"68:05:ca:a3:28:94")/IPv6(src=3D"CDCD:910A:2222:5498:8475:11= 11:39 > 00:2020",dst=3D"ABAB:910B:6666:3457:8295:3333:1800:2929")/UDP(sport=3D23, > dport=3D22)/("X" * 80)', ] > + output =3D self.rssprocess.send_pkt_get_output(pkts=3Dpkts2) > + hash_values, rss_distribute =3D > self.rssprocess.get_hash_verify_rss_distribute(output) > + for i in range(0, len(hash_values), 2): > + self.verify(hash_values[i] !=3D hash_values[i + 1], > + 'the packets with switched l4 port should have d= ifferent hash > values.') > + self.pmd_output.execute_cmd('flow destroy 0 rule 0') > + output =3D self.rssprocess.send_pkt_get_output(pkts=3Dpkts1) > + hash_values, rss_distribute =3D > self.rssprocess.get_hash_verify_rss_distribute(output) > + for i in range(0, len(hash_values), 2): > + self.verify(hash_values[i] !=3D hash_values[i + 1], > + 'the pair of packets with switched l3 address sh= ould have > defferent hash value') > + output =3D self.rssprocess.send_pkt_get_output(pkts=3Dpkts2) > + hash_values, rss_distribute =3D > self.rssprocess.get_hash_verify_rss_distribute(output) > + for i in range(0, len(hash_values), 2): > + self.verify(hash_values[i] !=3D hash_values[i + 1], > + 'the packets with switched l4 port should have d= ifferent hash > values.') > + self.pmd_output.execute_cmd('flow flush 0') > + output =3D self.rssprocess.send_pkt_get_output(pkts=3Dpkts1) > + hash_values, rss_distribute =3D > self.rssprocess.get_hash_verify_rss_distribute(output) > + for i in range(0, len(hash_values), 2): > + self.verify(hash_values[i] !=3D hash_values[i + 1], > + 'the pair of packets with switched l3 address sh= ould have > defferent hash value') > + output =3D self.rssprocess.send_pkt_get_output(pkts=3Dpkts2) > + hash_values, rss_distribute =3D > self.rssprocess.get_hash_verify_rss_distribute(output) > + for i in range(0, len(hash_values), 2): > + self.verify(hash_values[i] =3D=3D hash_values[i + 1], > + 'the packets with switched l4 port should have s= ame hash > values.') > + > + def test_rss_function_when_disable_rss(self): > + self.switch_testpmd(False) > + rule =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu = / gtp_psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp end key_len 0 qu= eues > end / end' > + self.rssprocess.create_rule(rule=3Drule) > + pkt =3D > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3DRandIP(),src=3DRandIP())/UDP(sport=3DRandShort(= ),dpo > rt=3DRandShort())/("X"*480)' > + output =3D self.rssprocess.send_pkt_get_output(pkts=3Dpkt, count= =3D1280) > + hashes, rss_distribute =3D > self.rssprocess.get_hash_verify_rss_distribute(output) > + self.verify(len(hashes) =3D=3D 1280, > + 'all the packets should have hash value and distribu= ted to all > queues by RSS.') > + self.verify(rss_distribute, 'the packet do not distribute by rss= ') > + > + def test_stress_cases(self): > + # Subcase: add/delete IPV4_GTPU_UL_IPV4_TCP rules > + self.switch_testpmd(2) > + rule1 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= / gtp_psc > pdu_t is 1 / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l4-s= rc-only > end key_len 0 queues end / end' > + for _ in range(100): > + self.pmd_output.execute_cmd(rule1) > + self.pmd_output.execute_cmd('flow destroy 0 rule 0') > + rule_li =3D self.rssprocess.create_rule(rule=3Drule1) > + out =3D self.pmd_output.execute_cmd('flow list 0') > + 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(result =3D=3D rule_li, 'should only rule 0 existed') > + pkts1 =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.0.2")/TCP(sport= =3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(src=3D"192.168.1.1", dst=3D"192.168.0.2")/TCP(sport= =3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.0.2")/TCP(sport= =3D32, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.1.2")/TCP(sport= =3D22, > dport=3D33)/("X"*480)', ] > + output =3D self.rssprocess.send_pkt_get_output(pkts=3Dpkts1) > + hash_values1, rss_distribute =3D > self.rssprocess.get_hash_verify_rss_distribute(output) > + self.verify(hash_values1[1] !=3D hash_values1[0] and hash_values= 1[2] !=3D > hash_values1[0] and hash_values1[3] =3D=3D > + hash_values1[0], > + 'packet 2 and packet 3 should have different hash va= lue with > packet 1, packet 4 should has same hash value with packet 1.') > + self.pmd_output.execute_cmd('flow flush 0') > + # Subcase: add/delete IPV4_GTPU_DL_IPV4 rules > + rule2 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= / gtp_psc > pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 = queues > end / end' > + for _ in range(100): > + self.pmd_output.execute_cmd(rule2) > + self.pmd_output.execute_cmd('flow destroy 0 rule 0') > + rule_li =3D self.rssprocess.create_rule(rule=3Drule2) > + out =3D self.pmd_output.execute_cmd('flow list 0') > + 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(result =3D=3D rule_li, 'should only rule 0 existed') > + pkts2 =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x12345)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.1.1", dst=3D"192.168.0.2")/("X"*480)',= ] > + output =3D self.rssprocess.send_pkt_get_output(pkts=3Dpkts2) > + hash_values2, rss_distribute =3D > self.rssprocess.get_hash_verify_rss_distribute(output) > + self.verify(hash_values2[1] !=3D hash_values2[0] and hash_values= 2[2] =3D=3D > hash_values2[0], > + 'packet 2 should has different hash value with packe= t 1, packet 3 > should has same hash value with packet 1.') > + > + def test_ipv4_gtpu_ipv4_ipv4_gtpu_eh_ipv4(self): > + self.switch_testpmd(2) > + rules =3D [ > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / ipv= 4 / end > actions rss types ipv4 l3-dst-only end key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 / > end actions rss types ipv4 l3-src-only end key_len 0 queues end / end' > + ] > + pkts1 =3D [ > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/= ("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/= ("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ], > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ], > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', = ] > + ] > + > + pkts2 =3D [ > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/= ("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/= ("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ], > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ], > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ] > + ] > + rule_li1 =3D self.rssprocess.create_rule(rule=3Drules[0]) > + hash_value1, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1[0]) > + self.verify(hash_value1[0] =3D=3D hash_value1[1] and hash_value1= [0] !=3D > hash_value1[2], > + 'got wrong hash, expect 1st hash equal to 2nd and di= fferent with > 3rd') > + hash_value2, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1[1]) > + self.verify(len(set(hash_value2)) =3D=3D len(pkts1[1]), 'hash wr= ong, expect > all hash value are different') > + hash_value3, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1[2]) > + self.verify(len(set(hash_value3)) =3D=3D len(pkts1[2]), 'hash wr= ong, expect > all hash value are different') > + > + rule_li2 =3D self.rssprocess.create_rule(rule=3Drules[1]) > + hash_value1, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[0]) > + self.verify(hash_value1[0] =3D=3D hash_value1[1] and hash_value1= [0] !=3D > hash_value1[2], > + 'got wrong hash, expect 1st hash equal to 2nd and di= fferent with > 3rd') > + hash_value2, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[1]) > + self.verify(hash_value2[0] !=3D hash_value2[1] and hash_value2[0= ] =3D=3D > hash_value2[2], > + 'got wrong hash, expect 1st hash equal to 3rd and di= fferent with > 2nd') > + hash_value3, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[2]) > + self.verify(hash_value3[0] !=3D hash_value3[1] and hash_value3[0= ] =3D=3D > hash_value3[2], > + 'got wrong hash, expect 1st hash equal to 3rd and di= fferent with > 2nd') > + > + self.rssprocess.destroy_rule(port_id=3D0, rule_id=3Drule_li1) > + hash_value1, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[0]) > + self.verify(all([i =3D=3D '0' for i in hash_value1]), > + 'got wrong hash, expect not got rss hash and distrib= ute to queue > 0') > + hash_value2, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[1]) > + self.verify(hash_value2[0] !=3D hash_value2[1] and hash_value2[0= ] =3D=3D > hash_value2[2], > + 'got wrong hash, expect 1st hash equal to 3rd and di= fferent with > 2nd') > + hash_value3, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[2]) > + self.verify(hash_value3[0] !=3D hash_value3[1] and hash_value3[0= ] =3D=3D > hash_value3[2], > + 'got wrong hash, expect 1st hash equal to 3rd and di= fferent with > 2nd') > + > + self.rssprocess.create_rule(rule=3Drules[0]) > + hash_value1, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[0]) > + self.verify(hash_value1[0] =3D=3D hash_value1[1] and hash_value1= [0] !=3D > hash_value1[2], > + 'got wrong hash, expect 1st hash equal to 2nd and di= fferent with > 3rd') > + hash_value2, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[1]) > + self.verify(hash_value2[0] !=3D hash_value2[1] and hash_value2[0= ] =3D=3D > hash_value2[2], > + 'got wrong hash, expect 1st hash equal to 3rd and di= fferent with > 2nd') > + hash_value3, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[2]) > + self.verify(hash_value3[0] !=3D hash_value3[1] and hash_value3[0= ] =3D=3D > hash_value3[2], > + 'got wrong hash, expect 1st hash equal to 3rd and di= fferent with > 2nd') > + > + self.rssprocess.destroy_rule(port_id=3D0, rule_id=3Drule_li2) > + hash_value1, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[0]) > + self.verify(hash_value1[0] =3D=3D hash_value1[1] and hash_value1= [0] !=3D > hash_value1[2], > + 'got wrong hash, expect 1st hash equal to 2nd and di= fferent with > 3rd') > + hash_value2, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[1] + pkts2[2]) > + self.verify(all([i =3D=3D '0' for i in hash_value2]), > + 'got wrong hash, expect not got rss hash and distrib= ute to queue > 0') > + > + def test_ipv4_gtpu_eh_ipv4_with_without_ul_dl(self): > + self.switch_testpmd(2) > + rules =3D [ > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 0 / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues en= d / > end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 / > end actions rss types ipv4 l3-src-only end key_len 0 queues end / end'] > + pkts1 =3D [ > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', > + ], > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', > + ] > + ] > + > + pkts2 =3D [ > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ], > + [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ] > + ] > + rule_li1 =3D self.rssprocess.create_rule(rule=3Drules[0]) > + hash_value1, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1[0]) > + self.verify(hash_value1[0] =3D=3D hash_value1[1] and hash_value1= [0] !=3D > hash_value1[2], > + 'got wrong hash, expect 1st hash equal to 2nd and di= fferent with > 3rd') > + hash_value2, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts1[1]) > + self.verify(len(set(hash_value2)) =3D=3D len(pkts1[1]), 'hash wr= ong, expect > all hash value are different') > + > + rule_li2 =3D self.rssprocess.create_rule(rule=3Drules[1]) > + hash_value1, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[0]) > + self.verify(hash_value1[0] !=3D hash_value1[1] and hash_value1[0= ] =3D=3D > hash_value1[2], > + 'got wrong hash, expect 1st hash equal to 3rd and di= fferent with > 2nd') > + hash_value2, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts2[1]) > + self.verify(hash_value2[0] !=3D hash_value2[1] and hash_value2[0= ] =3D=3D > hash_value2[2], > + 'got wrong hash, expect 1st hash equal to 3rd and di= fferent with > 2nd') > + > + self.rssprocess.destroy_rule(port_id=3D0, rule_id=3Drule_li2) > + hash_value1, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts2[0] + pkts2[1]) > + self.verify(all([i =3D=3D '0' for i in hash_value1]), > + 'got wrong hash, expect not got rss hash and distrib= ute to queue > 0') > + > + def test_ipv4_gtpu_eh_ipv4_without_with_ul_dl(self): > + self.switch_testpmd(2) > + rules =3D [ > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 / > end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc pdu_t is > 1 / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues en= d / > end', > + 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp= _psc / ipv4 / > end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end'] > + pkts1 =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ] > + rule0 =3D self.rssprocess.create_rule(rules[0]) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], 'packet 2 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0], 'packet 3 should= has > different hash value with packet 1') > + self.verify(hash_values[4] =3D=3D hash_values[3], 'packet 5 shou= ld has > same hash value with packet 4') > + self.verify(hash_values[5] !=3D hash_values[3], 'packet 6 should= has > different hash value with packet 4') > + > + rule1 =3D self.rssprocess.create_rule(rules[1]) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], 'packet 2 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0], 'packet 3 should= has > different hash value with packet 1') > + self.verify(hash_values[4] !=3D hash_values[3], 'packet 5 should= has > different hash value with packet 4') > + self.verify(hash_values[5] =3D=3D hash_values[3], 'packet 6 shou= ld has > same hash value with packet 4') > + > + self.rssprocess.destroy_rule(port_id=3D0, rule_id=3Drule0) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts1[3:]) > + self.verify(hash_values[1] !=3D hash_values[0], 'should get diff= erent hash > values') > + self.verify(hash_values[2] =3D=3D hash_values[0], 'should get sa= me hash > values') > + > + rule2 =3D self.rssprocess.create_rule(rules[0]) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], 'packet 2 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0], 'packet 3 should= has > different hash value with packet 1') > + self.verify(hash_values[4] =3D=3D hash_values[3], 'packet 5 shou= ld has > same hash value with packet 4') > + self.verify(hash_values[5] !=3D hash_values[3], 'packet 6 should= has > different hash value with packet 4') > + > + self.rssprocess.destroy_rule(port_id=3D0, rule_id=3Drule2) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts1) > + self.verify(all([i =3D=3D '0' for i in hash_values]), 'all pkts = should has no hash > value and distribute to queue 0') > + > + def test_ipv4_gtpu_eh_ipv4_and_ipv4_gtpu_eh_ipv4_udp_tcp(self): > + self.switch_testpmd(2) > + pkts1 =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dpor > t=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dpor > t=3D33)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dpor > t=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dpor > t=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dpor > t=3D33)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dpor > t=3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ] > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], 'packet 2 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0], 'packet 3 should= has > different hash value with packet 1') > + self.verify(hash_values[4] =3D=3D hash_values[3], 'packet 5 shou= ld has > same hash value with packet 4') > + self.verify(hash_values[5] !=3D hash_values[3], 'packet 6 should= has > different hash value with packet 4') > + self.verify(hash_values[7] !=3D hash_values[6], 'packet 8 should= has > different hash value to packet 7') > + self.verify(hash_values[8] !=3D hash_values[6] and hash_values[8= ] !=3D > hash_values[7], > + 'packet 9 should have different hash value to packet= 7 and 8') > + self.verify(hash_values[10] !=3D hash_values[9], 'packet 11 shou= ld has > different hash value to packet 10') > + self.verify(hash_values[11] !=3D hash_values[9] and hash_values[= 11] !=3D > hash_values[10], > + 'packet 12 have different hash value to packet 10 an= d 11') > + rule1 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= / gtp_psc > pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l4-dst-only end > key_len 0 queues end / end' > + rule_li1 =3D self.rssprocess.create_rule(rule=3Drule1) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], 'packet 2 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0], 'packet 3 should= has > different hash value with packet 1') > + self.verify(hash_values[4] !=3D hash_values[3], 'packet 5 should= has > different hash value with packet 4') > + self.verify(hash_values[5] =3D=3D hash_values[3], 'packet 6 shou= ld has > same hash value with packet 4') > + self.verify(hash_values[7] !=3D hash_values[6], 'packet 8 should= has > different hash value to packet 7') > + self.verify(hash_values[8] !=3D hash_values[6] and hash_values[8= ] !=3D > hash_values[7], > + 'packet 9 should have different hash value to packet= 7 and 8') > + self.verify(hash_values[10] !=3D hash_values[9], 'packet 11 shou= ld has > different hash value to packet 10') > + self.verify(hash_values[11] !=3D hash_values[9] and hash_values[= 11] !=3D > hash_values[10], > + 'packet 12 have different hash value to packet 10 an= d 11') > + rule2 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= / gtp_psc > pdu_t is 1 / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 = queues > end / end' > + rule_li2 =3D self.rssprocess.create_rule(rule=3Drule2) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], 'packet 2 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[2] =3D=3D hash_values[0], 'packet 3 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[4] !=3D hash_values[3], 'packet 5 should= has > different hash value with packet 4') > + self.verify(hash_values[5] =3D=3D hash_values[3], 'packet 6 shou= ld has > same hash value with packet 4') > + self.verify(hash_values[7] !=3D hash_values[6], 'packet 8 should= has > different hash value to packet 7') > + self.verify(hash_values[8] !=3D hash_values[6] and hash_values[8= ] !=3D > hash_values[7], > + 'packet 9 should have different hash value to packet= 7 and 8') > + self.verify(hash_values[10] !=3D hash_values[9], 'packet 11 shou= ld has > different hash value to packet 10') > + self.verify(hash_values[11] =3D=3D hash_values[9], > + 'packet 12 have same hash value to packet 10') > + > + def test_ipv6_gtpu_eh_ipv6_and_ipv6_gtpu_eh_ipv6_udp_tcp(self): > + self.switch_testpmd(2) > + pkts1 =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D33)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D33)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2928",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2928",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)', ] > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], 'packet 2 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0], 'packet 3 should= has > different hash value with packet 1') > + self.verify(hash_values[4] =3D=3D hash_values[3], 'packet 5 shou= ld has > same hash value with packet 4') > + self.verify(hash_values[5] !=3D hash_values[3], 'packet 6 should= has > different hash value with packet 4') > + self.verify(hash_values[7] !=3D hash_values[6], 'packet 8 should= has > different hash value to packet 7') > + self.verify(hash_values[8] !=3D hash_values[6] and hash_values[8= ] !=3D > hash_values[7], > + 'packet 9 should have different hash value to packet= 7 and 8') > + self.verify(hash_values[10] !=3D hash_values[9], 'packet 11 shou= ld has > different hash value to packet 10') > + self.verify(hash_values[11] !=3D hash_values[9] and hash_values[= 11] !=3D > hash_values[10], > + 'packet 12 have different hash value to packet 10 an= d 11') > + rule1 =3D 'flow create 0 ingress pattern eth / ipv6 / udp / gtpu= / gtp_psc > pdu_t is 0 / ipv6 / tcp / end actions rss types ipv6-tcp l4-dst-only end = key_len > 0 queues end / end' > + rule_li1 =3D self.rssprocess.create_rule(rule=3Drule1) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] !=3D hash_values[0], 'packet 2 should= has > different hash value with packet 1') > + self.verify(hash_values[2] =3D=3D hash_values[0], 'packet 3 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[4] =3D=3D hash_values[3], 'packet 5 shou= ld has > same hash value with packet 4') > + self.verify(hash_values[5] !=3D hash_values[3], 'packet 6 should= has > different hash value with packet 4') > + self.verify(hash_values[7] !=3D hash_values[6], 'packet 8 should= has > different hash value to packet 7') > + self.verify(hash_values[8] !=3D hash_values[6] and hash_values[8= ] !=3D > hash_values[7], > + 'packet 9 should have different hash value to packet= 7 and 8') > + self.verify(hash_values[10] !=3D hash_values[9], 'packet 11 shou= ld has > different hash value to packet 10') > + self.verify(hash_values[11] !=3D hash_values[9] and hash_values[= 11] !=3D > hash_values[10], > + 'packet 12 have different hash value to packet 10 an= d 11') > + rule2 =3D 'flow create 0 ingress pattern eth / ipv6 / udp / gtpu= / gtp_psc > pdu_t is 0 / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 = queues > end / end' > + rule_li2 =3D self.rssprocess.create_rule(rule=3Drule2) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], 'packet 2 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0], 'packet 3 should= has > different hash value with packet 1') > + self.verify(hash_values[4] =3D=3D hash_values[3], 'packet 5 shou= ld has > same hash value with packet 4') > + self.verify(hash_values[5] !=3D hash_values[3], 'packet 6 should= has > different hash value with packet 4') > + self.verify(hash_values[7] =3D=3D hash_values[6], 'packet 8 shou= ld has > same hash value to packet 7') > + self.verify(hash_values[8] !=3D hash_values[6], > + 'packet 9 should have different hash value to packet= 7') > + self.verify(hash_values[10] !=3D hash_values[9], 'packet 11 shou= ld has > different hash value to packet 10') > + self.verify(hash_values[11] !=3D hash_values[9] and hash_values[= 11] !=3D > hash_values[10], > + 'packet 12 have different hash value to packet 10 an= d 11') > + > + def > test_ipv4_gtpu_eh_ipv6_and_ipv4_gtpu_eh_ipv6_udp_tcp_without_ul_dl( > self): > + self.switch_testpmd(2) > + pkts1 =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D33)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2928",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2021")/TCP(sport=3D22,dport=3D23)/("X"= *4 > 80)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2928",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2020")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"ABAB:910B:6666:3457:8295:3333:1800:2929",dst= =3D" > CDCD:910A:2222:5498:8475:1111:3900:2021")/("X"*480)', ] > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], 'packet 2 shou= ld has > same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0] and hash_values[3= ] !=3D > hash_values[0], > + 'packet 3 and packet 4 should have different hash va= lue to packet > 1.') > + self.verify(len({hash_values[4], hash_values[5], hash_values[6]}= ) =3D=3D 3, > + 'packet 5 and packet 6 and packet 7 have different h= ash value.') > + rule1 =3D 'flow create 0 ingress pattern eth / ipv4 / udp / gtpu= / gtp_psc / > ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / = end' > + self.rssprocess.create_rule(rule=3Drule1) > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0] and hash_values= [2] =3D=3D > hash_values[0], > + 'packet 2 should has same hash value with packet 1, = packet 3 > should has same hash value to packet 1') > + self.verify(hash_values[3] !=3D hash_values[0], 'packet 4 should= have > different hash value to packet 1.') > + self.verify(hash_values[5] =3D=3D hash_values[4], 'packet 6 shou= ld has > same hash value to packet 5.') > + self.verify(hash_values[6] !=3D hash_values[4], 'packet 7 should= has > differnt hash value to packet 5.') > + > + def test_ipv6_gtpu_ipv4_and_ipv6_gtpu_ipv4_udp_tcp(self): > + self.switch_testpmd(2) > + pkts1 =3D [ > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dport > =3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dport > =3D33)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/UDP(sport=3D= 22,dport > =3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/UDP(sport=3D= 22,dport > =3D23)/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.0.1",src=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"68:05:CA:BB:26:E0")/IPv6()/UDP(dport=3D2152)/GTP_U_Header(g= t > p_type=3D255, > teid=3D0x123456)/IP(dst=3D"192.168.1.1",src=3D"192.168.0.2")/("X"*480)', = ] > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], > + 'packet 2 should has same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0] and hash_values[3= ] !=3D > hash_values[0], > + 'packet 3 and packet 4 should have different hash va= lue to packet > 1.') > + self.verify(len({hash_values[4], hash_values[5], hash_values[6]}= ) =3D=3D 3, > + 'packet 5 and packet 6 and packet 7 have different h= ash value.') > + self.rssprocess.create_rule( > + rule=3D'flow create 0 ingress pattern eth / ipv6 / udp / gtp= u / ipv4 / udp > / end actions rss types ipv4-udp l4-dst-only end key_len 0 queues end / e= nd') > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] !=3D hash_values[0], > + 'packet 2 should has defferent hash value with packe= t 1') > + self.verify(hash_values[2] =3D=3D hash_values[0] and hash_values= [3] =3D=3D > hash_values[0], > + 'packet 3 and packet 4 should have same hash value t= o packet 1.') > + self.verify(len({hash_values[4], hash_values[5], hash_values[6]}= ) =3D=3D 3, > + 'packet 5 and packet 6 and packet 7 have different h= ash value.') > + self.rssprocess.create_rule( > + rule=3D'flow create 0 ingress pattern eth / ipv6 / udp / gtp= u / ipv4 / end > actions rss types ipv4 l3-dst-only end key_len 0 queues end / end') > + hash_values, queues =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts1) > + self.verify(hash_values[1] =3D=3D hash_values[0], > + 'packet 2 should has same hash value with packet 1') > + self.verify(hash_values[2] !=3D hash_values[0], 'packet 3 should= has > different hash value to packet 1.') > + self.verify(hash_values[3] =3D=3D hash_values[0], > + 'packet 4 should has same hash value with packet 1') > + self.verify(hash_values[5] =3D=3D hash_values[4], > + 'packet 6 should has same hash value with packet 5') > + self.verify(hash_values[6] !=3D hash_values[4], 'packet 7 should= has > different hash value to packet 5.') > + > + def test_toeplitz_symmetric_combination(self): > + self.switch_testpmd(False) > + self.logger.info('Subcase: toeplitz/symmetric with same pattern'= ) > + # step 1 > + rule_toeplitz =3D 'flow create 0 ingress pattern eth / ipv4 / ud= p / gtpu / > gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end ke= y_len > 0 queues end / end' > + rule_id_toeplitz =3D self.rssprocess.create_rule(rule=3Drule_toe= plitz) > + self.rssprocess.check_rule(rule_list=3Drule_id_toeplitz) > + pkts_toeplitz =3D > ['Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gt= p_ > type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.1.1", dst=3D"192.168.0.2")/("X"*480)'] > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(hash_value[1] !=3D hash_value[0], 'second packet sho= uld hash > value different from the first packet') > + self.verify(hash_value[2] =3D=3D hash_value[0], 'third packet sh= ould hash > value same with the first packet') > + # step 2 > + rule_symmetric =3D 'flow create 0 ingress pattern eth / ipv4 / u= dp / gtpu / > gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types= ipv4 > end key_len 0 queues end / end' > + rule_id_symmetric =3D self.rssprocess.create_rule(rule=3Drule_sy= mmetric) > + pkts_symmetric > =3D['Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header= (gtp > _type=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0= , > qos_flow=3D0x34)/IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.2",dst=3D"192.168.0.1")/("X"*480)'] > + self.rssprocess.check_rule(rule_list=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + # step 3 > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + for temp in range(len(hash_value)): > + self.verify(len(hash_value[temp]) !=3D 0, 'all the toeplitz = packet should > have hash value') > + #step 4 > + self.rssprocess.destroy_rule(rule_id=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(len(hash_value) =3D=3D 0, 'all the toeplitz packet s= hould have no > hash value') > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(len(hash_value) =3D=3D 0, 'all the symmetric packet = should have > no hash value') > + self.pmd_output.execute_cmd('flow flush 0') > + > + self.logger.info('Subcase: toeplitz/symmetric with same pattern > (switched rule order)') > + # step 1 > + rule_id_symmetric =3D self.rssprocess.create_rule(rule=3Drule_sy= mmetric) > + self.rssprocess.check_rule(rule_list=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + rule_id_toeplitz =3D self.rssprocess.create_rule(rule=3Drule_toe= plitz) > + self.rssprocess.check_rule(rule_list=3Drule_id_toeplitz) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(hash_value[1] !=3D hash_value[0], 'second packet sho= uld hash > value different from the first packet') > + self.verify(hash_value[2] =3D=3D hash_value[0], 'third packet sh= ould hash > value same with the first packet') > + # step 2 > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + for temp in range(len(hash_value)): > + self.verify(len(hash_value[temp]) !=3D 0, 'all the toeplitz = packet should > have hash value') > + # step 3 > + self.rssprocess.destroy_rule(rule_id=3Drule_id_toeplitz) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(len(hash_value) =3D=3D 0, 'all the toeplitz packet s= hould have no > hash value') > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(len(hash_value) =3D=3D 0, 'all the symmetric packet = should have > no hash value') > + self.pmd_output.execute_cmd('flow flush 0') > + > + self.logger.info('Subcase: toeplitz/symmetric with different pat= tern > (different UL/DL)') > + # step 1 > + rule_toeplitz =3D 'flow create 0 ingress pattern eth / ipv4 / ud= p / gtpu / > gtp_psc pdu_t is 0 / ipv4 / end actions rss types ipv4 l3-dst-only end ke= y_len > 0 queues end / end' > + pkts_toeplitz =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.1.1", dst=3D"192.168.0.2")/("X"*480)' > + ] > + rule_symmetric =3D 'flow create 0 ingress pattern eth / ipv4 / u= dp / gtpu / > gtp_psc pdu_t is 1 / ipv4 / end actions rss func symmetric_toeplitz types= ipv4 > end key_len 0 queues end / end' > + pkts_symmetric =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(src=3D"192.168.0.2",dst=3D"192.168.0.1")/("X"*480)' > + ] > + rule_id_toeplitz =3D self.rssprocess.create_rule(rule=3Drule_toe= plitz) > + self.rssprocess.check_rule(rule_list=3Drule_id_toeplitz) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(hash_value[1] !=3D hash_value[0], 'second packet sho= uld hash > value different from the first packet') > + self.verify(hash_value[2] =3D=3D hash_value[0], 'third packet sh= ould hash > value same with the first packet') > + rule_id_symmetric =3D self.rssprocess.create_rule(rule=3Drule_sy= mmetric) > + self.rssprocess.check_rule(rule_list=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + # step 2 > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(hash_value[1] !=3D hash_value[0], 'second packet sho= uld hash > value different from the first packet') > + self.verify(hash_value[2] =3D=3D hash_value[0], 'third packet sh= ould hash > value same with the first packet') > + # step 3 > + self.rssprocess.destroy_rule(rule_id=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(len(hash_value) =3D=3D 0, 'all the symmetric packet = should have > no hash value') > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(hash_value[1] !=3D hash_value[0], 'second packet sho= uld hash > value different from the first packet') > + self.verify(hash_value[2] =3D=3D hash_value[0], 'third packet sh= ould hash > value same with the first packet') > + rule_id_symmetric =3D self.rssprocess.create_rule(rule=3Drule_sy= mmetric) > + self.rssprocess.check_rule(rule_list=3Drule_id_symmetric) > + self.rssprocess.destroy_rule(rule_id=3Drule_id_toeplitz) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(len(hash_value) =3D=3D 0, 'third packet should hash = value same > with the first packet') > + self.pmd_output.execute_cmd('flow flush 0') > + > + self.logger.info('Subcase: toeplitz/symmetric with different pat= tern > (with/without UL/DL)') > + # step 1 > + rule_toeplitz =3D 'flow create 0 ingress pattern eth / ipv4 / ud= p / gtpu / > gtp_psc / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 que= ues > end / end' > + pkts_toeplitz =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.1.1", dst=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.1.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IP(src=3D"192.168.1.1", dst=3D"192.168.0.2")/("X"*480)' > + ] > + rule_symmetric =3D 'flow create 0 ingress pattern eth / ipv4 / u= dp / gtpu / > gtp_psc pdu_t is 0 / ipv4 / end actions rss func symmetric_toeplitz types= ipv4 > end key_len 0 queues end / end' > + pkts_symmetric =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1",dst=3D"192.168.0.2")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.2",dst=3D"192.168.0.1")/("X"*480)' > + ] > + rule_id_toeplitz =3D self.rssprocess.create_rule(rule=3Drule_toe= plitz) > + self.rssprocess.check_rule(rule_list=3Drule_id_toeplitz) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(hash_value[1] !=3D hash_value[0], 'hash_value[1] sho= uld hash > value different from hash_value[0]') > + self.verify(hash_value[2] =3D=3D hash_value[0], 'hash_value[2] s= hould hash > value same with hash_value[0]') > + self.verify(hash_value[4] !=3D hash_value[3], 'hash_value[4] sho= uld hash > value different from hash_value[3]') > + self.verify(hash_value[5] =3D=3D hash_value[3], 'hash_value[5] s= hould hash > value same with hash_value[3]') > + rule_id_symmetric =3D self.rssprocess.create_rule(rule=3Drule_sy= mmetric) > + self.rssprocess.check_rule(rule_list=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + # step 2 > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + for temp in range(len(hash_value)): > + self.verify(len(hash_value[temp]) !=3D 0, 'all the toeplitz = packet should > have hash value') > + # step 3 > + self.rssprocess.destroy_rule(rule_id=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(len(hash_value) =3D=3D 0, 'all the symmetric packet = should have > no hash value') > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + for temp in range(len(hash_value)): > + if temp < 3: > + self.verify(len(hash_value) =3D=3D 0, 'all the toeplitz = DL packet should > have no hash value') > + else: > + self.verify(len(hash_value[temp]) !=3D 0, 'all the toepl= itz UL packet > should have hash value') > + # step 4 > + rule_id_symmetric =3D self.rssprocess.create_rule(rule=3Drule_sy= mmetric) > + self.rssprocess.check_rule(rule_list=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + # step 5 > + self.rssprocess.destroy_rule(rule_id=3Drule_id_toeplitz) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + for temp in range(len(hash_value)): > + if temp > 2: > + self.verify(len(hash_value) =3D=3D 0, 'all the toeplitz = UL packet should > have no hash value') > + self.pmd_output.execute_cmd('flow flush 0') > + > + self.logger.info('Subcase: toeplitz/symmetric with different pat= tern') > + # step 1 > + rule_toeplitz =3D 'flow create 0 ingress pattern eth / ipv4 / ud= p / gtpu / > gtp_psc pdu_t is 0 / ipv4 / udp / end actions rss types ipv4-udp l3-src-o= nly l4- > src-only end key_len 0 queues end / end' > + pkts_toeplitz =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.0.2")/UDP(sport= =3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.1.1", dst=3D"192.168.0.2")/UDP(sport= =3D22, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.0.2")/UDP(sport= =3D32, > dport=3D23)/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D0, > qos_flow=3D0x34)/IP(src=3D"192.168.0.1", dst=3D"192.168.1.2")/UDP(sport= =3D22, > dport=3D33)/("X"*480)' > + ] > + rule_symmetric =3D 'flow create 0 ingress pattern eth / ipv4 / u= dp / gtpu / > gtp_psc pdu_t is 1 / ipv6 / end actions rss func symmetric_toeplitz types= ipv6 > end key_len 0 queues end / end' > + pkts_symmetric =3D [ > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"1111:2222:3333:4444:5555:6666:7777:8888",dst= =3D"2 > 222:3333:4444:5555:6666:7777:8888:9999")/("X"*480)', > + > 'Ether(dst=3D"00:11:22:33:44:55")/IP()/UDP(dport=3D2152)/GTP_U_Header(gtp= _t > ype=3D255, teid=3D0x123456)/GTP_PDUSession_ExtensionHeader(pdu_type=3D1, > qos_flow=3D0x34)/IPv6(src=3D"2222:3333:4444:5555:6666:7777:8888:9999",dst= =3D"1 > 111:2222:3333:4444:5555:6666:7777:8888")/("X"*480)' > + ] > + rule_id_toeplitz =3D self.rssprocess.create_rule(rule=3Drule_toe= plitz) > + self.rssprocess.check_rule(rule_list=3Drule_id_toeplitz) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(hash_value[1] !=3D hash_value[0], 'hash_value[1] sho= uld hash > value different from hash_value[0]') > + self.verify(hash_value[2] !=3D hash_value[0], 'hash_value[2] sho= uld hash > value different with hash_value[0]') > + self.verify(hash_value[3] =3D=3D hash_value[0], 'hash_value[3] s= hould hash > value same from hash_value[0]') > + rule_id_symmetric =3D self.rssprocess.create_rule(rule=3Drule_sy= mmetric) > + self.rssprocess.check_rule(rule_list=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + # step 2 > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + for temp in range(len(hash_value)): > + self.verify(len(hash_value[temp]) !=3D 0, 'all the toeplitz = packet should > have hash value') > + # step 3 > + self.rssprocess.destroy_rule(rule_id=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(len(hash_value) =3D=3D 0, 'all the symmetric packet = should have > no hash value') > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(hash_value[1] !=3D hash_value[0], 'hash_value[1] sho= uld hash > value different from hash_value[0]') > + self.verify(hash_value[2] !=3D hash_value[0], 'hash_value[2] sho= uld hash > value different with hash_value[0]') > + self.verify(hash_value[3] =3D=3D hash_value[0], 'hash_value[3] s= hould hash > value same from hash_value[0]') > + # step 4 > + rule_id_symmetric =3D self.rssprocess.create_rule(rule=3Drule_sy= mmetric) > + self.rssprocess.check_rule(rule_list=3Drule_id_symmetric) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + self.rssprocess.destroy_rule(rule_id=3Drule_id_toeplitz) > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_symmetric) > + self.verify(hash_value[0] =3D=3D hash_value[1], 'second packet s= hould hash > value same with the first packet') > + hash_value, _ =3D > self.rssprocess.send_pkt_get_hash_queues(pkts=3Dpkts_toeplitz) > + self.verify(len(hash_value) =3D=3D 0, 'all the symmetric packet = should have > no hash value') > + self.pmd_output.execute_cmd('flow flush 0') > + > + def tear_down(self): > + # destroy all flow rule on port 0 > + self.dut.send_command("flow flush 0", timeout=3D1) > + self.dut.send_command("clear port stats all", timeout=3D1) > + self.pmd_output.execute_cmd("stop") > + > + def tear_down_all(self): > + self.dut.kill_all() > -- > 2.17.1 --_002_CY4PR1101MB2263FB2B7C8F9CCAF111AB74F41F0CY4PR1101MB2263_ Content-Type: application/octet-stream; name="TestCVLAdvancedRSSGTPU.log" Content-Description: TestCVLAdvancedRSSGTPU.log Content-Disposition: attachment; filename="TestCVLAdvancedRSSGTPU.log"; size=49406; creation-date="Tue, 20 Oct 2020 06:10:34 GMT"; modification-date="Tue, 20 Oct 2020 06:10:34 GMT" Content-Transfer-Encoding: base64 MjAvMTAvMjAyMCAxNDowODoxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdHM6IApURVNU IFNVSVRFIDogVGVzdENWTEFkdmFuY2VkUlNTR1RQVQoyMC8xMC8yMDIwIDE0OjA4OjEwICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGR0czogTklDIDogICAgICAgIGNvbHVtYmlhdmlsbGVfMTAw ZwoyMC8xMC8yMDIwIDE0OjA4OjEwICAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4My42MjogCjIw LzEwLzIwMjAgMTQ6MDg6MTAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGVyOiAKMjAvMTAv MjAyMCAxNDowODoxMCAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6IHg4Nl82NC1uYXRp dmUtbGludXhhcHAtZ2NjL2FwcC9kcGRrLXRlc3RwbWQgIC1sIDMyLDMzLDM0LDM1IC1uIDQgLXcg MDAwMDphZjowMC4wICAtLWZpbGUtcHJlZml4PWRwZGtfOTc3Nl8yMDIwMTAyMDE0MDc1MiAgICAt LSAtaSAtLXJ4cT02NCAtLXR4cT02NCAtLWRpc2FibGUtcnNzICAtLXJ4ZD0zODQgLS10eGQ9Mzg0 CjIwLzEwLzIwMjAgMTQ6MDg6MTIgICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiBFQUw6 IERldGVjdGVkIDcyIGxjb3JlKHMpDQpFQUw6IERldGVjdGVkIDIgTlVNQSBub2Rlcw0KRUFMOiBN dWx0aS1wcm9jZXNzIHNvY2tldCAvdmFyL3J1bi9kcGRrL2RwZGtfOTc3Nl8yMDIwMTAyMDE0MDc1 Mi9tcF9zb2NrZXQNCkVBTDogU2VsZWN0ZWQgSU9WQSBtb2RlICdWQScNCkVBTDogMTAyNCBodWdl cGFnZXMgb2Ygc2l6ZSAyMDk3MTUyIHJlc2VydmVkLCBidXQgbm8gbW91bnRlZCBodWdldGxiZnMg Zm91bmQgZm9yIHRoYXQgc2l6ZQ0KRUFMOiBQcm9iaW5nIFZGSU8gc3VwcG9ydC4uLg0KRUFMOiBW RklPIHN1cHBvcnQgaW5pdGlhbGl6ZWQNCkVBTDogICB1c2luZyBJT01NVSB0eXBlIDEgKFR5cGUg MSkNCkVBTDogUHJvYmUgUENJIGRyaXZlcjogbmV0X2ljZSAoODA4NjoxNTkyKSBkZXZpY2U6IDAw MDA6YWY6MDAuMCAoc29ja2V0IDEpDQppY2VfbG9hZF9wa2dfdHlwZSgpOiBBY3RpdmUgcGFja2Fn ZSBpczogMS4zLjIxLjAsIElDRSBDT01NUyBQYWNrYWdlDQpJbnRlcmFjdGl2ZS1tb2RlIHNlbGVj dGVkDQp0ZXN0cG1kOiBjcmVhdGUgYSBuZXcgbWJ1ZiBwb29sIDxtYl9wb29sXzE+OiBuPTE3MTQ1 Niwgc2l6ZT0yMTc2LCBzb2NrZXQ9MQ0KdGVzdHBtZDogcHJlZmVycmVkIG1lbXBvb2wgb3BzIHNl bGVjdGVkOiByaW5nX21wX21jDQoNCldhcm5pbmchIHBvcnQtdG9wb2xvZ3k9cGFpcmVkIGFuZCBv ZGQgZm9yd2FyZCBwb3J0cyBudW1iZXIsIHRoZSBsYXN0IHBvcnQgd2lsbCBwYWlyIHdpdGggaXRz ZWxmLg0KDQpDb25maWd1cmluZyBQb3J0IDAgKHNvY2tldCAxKQ0KUG9ydCAwOiA2ODpBNjpCNzow Qjo2RjozOA0KQ2hlY2tpbmcgbGluayBzdGF0dXNlcy4uLg0KRG9uZQoyMC8xMC8yMDIwIDE0OjA4 OjIyICAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4My42Mjogc2V0IGZ3ZCByeG9ubHkKMjAvMTAv MjAyMCAxNDowODoyMiAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6IA0NClNldCByeG9u bHkgcGFja2V0IGZvcndhcmRpbmcgbW9kZQoyMC8xMC8yMDIwIDE0OjA4OjIyICAgICAgICAgICAg ICBkdXQuMTAuMjQwLjE4My42Mjogc2V0IHZlcmJvc2UgMQoyMC8xMC8yMDIwIDE0OjA4OjIyICAg ICAgICAgICAgICBkdXQuMTAuMjQwLjE4My42MjogDQ0KQ2hhbmdlIHZlcmJvc2UgbGV2ZWwgZnJv bSAwIHRvIDEKMjAvMTAvMjAyMCAxNDowODoyMiAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMu NjI6IHNob3cgcG9ydCBpbmZvIGFsbAoyMC8xMC8yMDIwIDE0OjA4OjIyICAgICAgICAgICAgICBk dXQuMTAuMjQwLjE4My42MjogDQ0KDQoqKioqKioqKioqKioqKioqKioqKiogSW5mb3MgZm9yIHBv cnQgMCAgKioqKioqKioqKioqKioqKioqKioqDQpNQUMgYWRkcmVzczogNjg6QTY6Qjc6MEI6NkY6 MzgNCkRldmljZSBuYW1lOiAwMDAwOmFmOjAwLjANCkRyaXZlciBuYW1lOiBuZXRfaWNlDQpGaXJt d2FyZS12ZXJzaW9uOiAyLjIwIDB4ODAwMDQ4ZDMgMS4yODMyLjANCkRldmFyZ3M6IA0KQ29ubmVj dCB0byBzb2NrZXQ6IDENCm1lbW9yeSBhbGxvY2F0aW9uIG9uIHRoZSBzb2NrZXQ6IDENCkxpbmsg c3RhdHVzOiB1cA0KTGluayBzcGVlZDogMTAgR2Jwcw0KTGluayBkdXBsZXg6IGZ1bGwtZHVwbGV4 DQpNVFU6IDE1MDANClByb21pc2N1b3VzIG1vZGU6IGVuYWJsZWQNCkFsbG11bHRpY2FzdCBtb2Rl OiBkaXNhYmxlZA0KTWF4aW11bSBudW1iZXIgb2YgTUFDIGFkZHJlc3NlczogNjQNCk1heGltdW0g bnVtYmVyIG9mIE1BQyBhZGRyZXNzZXMgb2YgaGFzaCBmaWx0ZXJpbmc6IDANClZMQU4gb2ZmbG9h ZDogDQogIHN0cmlwIG9mZiwgZmlsdGVyIG9mZiwgZXh0ZW5kIG9mZiwgcWlucSBzdHJpcCBvZmYN Ckhhc2gga2V5IHNpemUgaW4gYnl0ZXM6IDUyDQpSZWRpcmVjdGlvbiB0YWJsZSBzaXplOiA1MTIN ClN1cHBvcnRlZCBSU1Mgb2ZmbG9hZCBmbG93IHR5cGVzOg0KICBpcHY0DQogIGlwdjQtZnJhZw0K ICBpcHY0LXRjcA0KICBpcHY0LXVkcA0KICBpcHY0LXNjdHANCiAgaXB2NC1vdGhlcg0KICBpcHY2 DQogIGlwdjYtZnJhZw0KICBpcHY2LXRjcA0KICBpcHY2LXVkcA0KICBpcHY2LXNjdHANCiAgaXB2 Ni1vdGhlcg0KICBsMl9wYXlsb2FkDQpNaW5pbXVtIHNpemUgb2YgUlggYnVmZmVyOiAxMDI0DQpN YXhpbXVtIGNvbmZpZ3VyYWJsZSBsZW5ndGggb2YgUlggcGFja2V0OiA5NzI4DQpNYXhpbXVtIGNv bmZpZ3VyYWJsZSBzaXplIG9mIExSTyBhZ2dyZWdhdGVkIHBhY2tldDogMA0KQ3VycmVudCBudW1i ZXIgb2YgUlggcXVldWVzOiA2NA0KTWF4IHBvc3NpYmxlIFJYIHF1ZXVlczogNjQNCk1heCBwb3Nz aWJsZSBudW1iZXIgb2YgUlhEcyBwZXIgcXVldWU6IDQwOTYNCk1pbiBwb3NzaWJsZSBudW1iZXIg b2YgUlhEcyBwZXIgcXVldWU6IDY0DQpSWERzIG51bWJlciBhbGlnbm1lbnQ6IDMyDQpDdXJyZW50 IG51bWJlciBvZiBUWCBxdWV1ZXM6IDY0DQpNYXggcG9zc2libGUgVFggcXVldWVzOiA2NA0KTWF4 IHBvc3NpYmxlIG51bWJlciBvZiBUWERzIHBlciBxdWV1ZTogNDA5Ng0KTWluIHBvc3NpYmxlIG51 bWJlciBvZiBUWERzIHBlciBxdWV1ZTogNjQNClRYRHMgbnVtYmVyIGFsaWdubWVudDogMzINCk1h eCBzZWdtZW50IG51bWJlciBwZXIgcGFja2V0OiAwDQpNYXggc2VnbWVudCBudW1iZXIgcGVyIE1U VS9UU086IDAKMjAvMTAvMjAyMCAxNDowODoyMiAgICAgICAgIFRlc3RDVkxBZHZhbmNlZFJTU0dU UFU6IHJzc3Byb2Nlc3MudGVzdGVyX2lmYWNlczogWydlbnMxOTJmMCcsICdlbnMxOTJmMSddCjIw LzEwLzIwMjAgMTQ6MDg6MjIgICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRSU1NHVFBVOiByc3Nwcm9j ZXNzLnRlc3RfY2FzZTogPFRlc3RTdWl0ZV9jdmxfYWR2YW5jZWRfcnNzX2d0cHUuVGVzdENWTEFk dmFuY2VkUlNTR1RQVSBvYmplY3QgYXQgMHg3ZmIwYjkwZWI0MDA+CjIwLzEwLzIwMjAgMTQ6MDg6 MjIgICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRSU1NHVFBVOiBUZXN0IENhc2UgdGVzdF9pcHY0X2d0 cHVfaXB2NF9pcHY0X2d0cHVfZWhfaXB2NCBCZWdpbgoyMC8xMC8yMDIwIDE0OjA4OjIyICAgICAg ICAgICAgICBkdXQuMTAuMjQwLjE4My42MjogCjIwLzEwLzIwMjAgMTQ6MDg6MjIgICAgICAgICAg ICAgICAgICAgICAgICAgdGVzdGVyOiAKMjAvMTAvMjAyMCAxNDowODoyMiAgICAgICAgICAgICAg ZHV0LjEwLjI0MC4xODMuNjI6IHN0YXJ0CjIwLzEwLzIwMjAgMTQ6MDg6MjIgICAgICAgICAgICAg IGR1dC4xMC4yNDAuMTgzLjYyOiANDQpyeG9ubHkgcGFja2V0IGZvcndhcmRpbmcgLSBwb3J0cz0x IC0gY29yZXM9MSAtIHN0cmVhbXM9NjQgLSBOVU1BIHN1cHBvcnQgZW5hYmxlZCwgTVAgYWxsb2Nh dGlvbiBtb2RlOiBuYXRpdmUNCkxvZ2ljYWwgQ29yZSAzMyAoc29ja2V0IDEpIGZvcndhcmRzIHBh Y2tldHMgb24gNjQgc3RyZWFtczoNCiAgUlggUD0wL1E9MCAoc29ja2V0IDEpIC0+IFRYIFA9MC9R PTAgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTEgKHNvY2tl dCAxKSAtPiBUWCBQPTAvUT0xIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBS WCBQPTAvUT0yIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MiAoc29ja2V0IDEpIHBlZXI9MDI6MDA6 MDA6MDA6MDA6MDANCiAgUlggUD0wL1E9MyAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTMgKHNvY2tl dCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTQgKHNvY2tldCAxKSAtPiBU WCBQPTAvUT00IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT01 IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NSAoc29ja2V0IDEpIHBlZXI9MDI6MDA6MDA6MDA6MDA6 MDANCiAgUlggUD0wL1E9NiAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTYgKHNvY2tldCAxKSBwZWVy PTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTcgKHNvY2tldCAxKSAtPiBUWCBQPTAvUT03 IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT04IChzb2NrZXQg MSkgLT4gVFggUD0wL1E9OCAoc29ja2V0IDEpIHBlZXI9MDI6MDA6MDA6MDA6MDA6MDANCiAgUlgg UD0wL1E9OSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTkgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAw OjAwOjAwOjAwDQogIFJYIFA9MC9RPTEwIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MTAgKHNvY2tl dCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTExIChzb2NrZXQgMSkgLT4g VFggUD0wL1E9MTEgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9R PTEyIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MTIgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAw OjAwOjAwDQogIFJYIFA9MC9RPTEzIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MTMgKHNvY2tldCAx KSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTE0IChzb2NrZXQgMSkgLT4gVFgg UD0wL1E9MTQgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTE1 IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MTUgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAw OjAwDQogIFJYIFA9MC9RPTE2IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MTYgKHNvY2tldCAxKSBw ZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTE3IChzb2NrZXQgMSkgLT4gVFggUD0w L1E9MTcgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTE4IChz b2NrZXQgMSkgLT4gVFggUD0wL1E9MTggKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAw DQogIFJYIFA9MC9RPTE5IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MTkgKHNvY2tldCAxKSBwZWVy PTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTIwIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9 MjAgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTIxIChzb2Nr ZXQgMSkgLT4gVFggUD0wL1E9MjEgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQog IFJYIFA9MC9RPTIyIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MjIgKHNvY2tldCAxKSBwZWVyPTAy OjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTIzIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MjMg KHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTI0IChzb2NrZXQg MSkgLT4gVFggUD0wL1E9MjQgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJY IFA9MC9RPTI1IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MjUgKHNvY2tldCAxKSBwZWVyPTAyOjAw OjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTI2IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MjYgKHNv Y2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTI3IChzb2NrZXQgMSkg LT4gVFggUD0wL1E9MjcgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9 MC9RPTI4IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MjggKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAw OjAwOjAwOjAwDQogIFJYIFA9MC9RPTI5IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MjkgKHNvY2tl dCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTMwIChzb2NrZXQgMSkgLT4g VFggUD0wL1E9MzAgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9R PTMxIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MzEgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAw OjAwOjAwDQogIFJYIFA9MC9RPTMyIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MzIgKHNvY2tldCAx KSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTMzIChzb2NrZXQgMSkgLT4gVFgg UD0wL1E9MzMgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTM0 IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MzQgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAw OjAwDQogIFJYIFA9MC9RPTM1IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MzUgKHNvY2tldCAxKSBw ZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTM2IChzb2NrZXQgMSkgLT4gVFggUD0w L1E9MzYgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTM3IChz b2NrZXQgMSkgLT4gVFggUD0wL1E9MzcgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAw DQogIFJYIFA9MC9RPTM4IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MzggKHNvY2tldCAxKSBwZWVy PTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTM5IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9 MzkgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTQwIChzb2Nr ZXQgMSkgLT4gVFggUD0wL1E9NDAgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQog IFJYIFA9MC9RPTQxIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NDEgKHNvY2tldCAxKSBwZWVyPTAy OjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTQyIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NDIg KHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTQzIChzb2NrZXQg MSkgLT4gVFggUD0wL1E9NDMgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJY IFA9MC9RPTQ0IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NDQgKHNvY2tldCAxKSBwZWVyPTAyOjAw OjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTQ1IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NDUgKHNv Y2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTQ2IChzb2NrZXQgMSkg LT4gVFggUD0wL1E9NDYgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9 MC9RPTQ3IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NDcgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAw OjAwOjAwOjAwDQogIFJYIFA9MC9RPTQ4IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NDggKHNvY2tl dCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTQ5IChzb2NrZXQgMSkgLT4g VFggUD0wL1E9NDkgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9R PTUwIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NTAgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAw OjAwOjAwDQogIFJYIFA9MC9RPTUxIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NTEgKHNvY2tldCAx KSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTUyIChzb2NrZXQgMSkgLT4gVFgg UD0wL1E9NTIgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTUz IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NTMgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAw OjAwDQogIFJYIFA9MC9RPTU0IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NTQgKHNvY2tldCAxKSBw ZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTU1IChzb2NrZXQgMSkgLT4gVFggUD0w L1E9NTUgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTU2IChz b2NrZXQgMSkgLT4gVFggUD0wL1E9NTYgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAw DQogIFJYIFA9MC9RPTU3IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NTcgKHNvY2tldCAxKSBwZWVy PTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTU4IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9 NTggKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTU5IChzb2Nr ZXQgMSkgLT4gVFggUD0wL1E9NTkgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQog IFJYIFA9MC9RPTYwIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NjAgKHNvY2tldCAxKSBwZWVyPTAy OjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTYxIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NjEg KHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTYyIChzb2NrZXQg MSkgLT4gVFggUD0wL1E9NjIgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAwDQogIFJY IFA9MC9RPTYzIChzb2NrZXQgMSkgLT4gVFggUD0wL1E9NjMgKHNvY2tldCAxKSBwZWVyPTAyOjAw OjAwOjAwOjAwOjAwDQoNCiAgcnhvbmx5IHBhY2tldCBmb3J3YXJkaW5nIHBhY2tldHMvYnVyc3Q9 MzINCiAgbmIgZm9yd2FyZGluZyBjb3Jlcz0xIC0gbmIgZm9yd2FyZGluZyBwb3J0cz0xDQogIHBv cnQgMDogUlggcXVldWUgbnVtYmVyOiA2NCBUeCBxdWV1ZSBudW1iZXI6IDY0DQogICAgUnggb2Zm bG9hZHM9MHgwIFR4IG9mZmxvYWRzPTB4MTAwMDANCiAgICBSWCBxdWV1ZTogMA0KICAgICAgUlgg ZGVzYz0zODQgLSBSWCBmcmVlIHRocmVzaG9sZD0zMg0KICAgICAgUlggdGhyZXNob2xkIHJlZ2lz dGVyczogcHRocmVzaD0wIGh0aHJlc2g9MCAgd3RocmVzaD0wDQogICAgICBSWCBPZmZsb2Fkcz0w eDANCiAgICBUWCBxdWV1ZTogMA0KICAgICAgVFggZGVzYz0zODQgLSBUWCBmcmVlIHRocmVzaG9s ZD0zMg0KICAgICAgVFggdGhyZXNob2xkIHJlZ2lzdGVyczogcHRocmVzaD0zMiBodGhyZXNoPTAg IHd0aHJlc2g9MA0KICAgICAgVFggb2ZmbG9hZHM9MHgxMDAwMCAtIFRYIFJTIGJpdCB0aHJlc2hv bGQ9MzIKMjAvMTAvMjAyMCAxNDowODoyMiAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6 IHF1aXQKMjAvMTAvMjAyMCAxNDowODoyMyAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6 IA0NClRlbGxpbmcgY29yZXMgdG8gc3RvcC4uLg0KV2FpdGluZyBmb3IgbGNvcmVzIHRvIGZpbmlz aC4uLg0KDQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9yd2FyZCBzdGF0aXN0aWNzIGZvciBw b3J0IDAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgUlgtcGFja2V0czogMCAgICAgICAgICAg ICAgUlgtZHJvcHBlZDogMCAgICAgICAgICAgICBSWC10b3RhbDogMA0KICBUWC1wYWNrZXRzOiAw ICAgICAgICAgICAgICBUWC1kcm9wcGVkOiAwICAgICAgICAgICAgIFRYLXRvdGFsOiAwDQogIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCg0KICArKysrKysrKysrKysrKysgQWNjdW11bGF0ZWQgZm9yd2Fy ZCBzdGF0aXN0aWNzIGZvciBhbGwgcG9ydHMrKysrKysrKysrKysrKysNCiAgUlgtcGFja2V0czog MCAgICAgICAgICAgICAgUlgtZHJvcHBlZDogMCAgICAgICAgICAgICBSWC10b3RhbDogMA0KICBU WC1wYWNrZXRzOiAwICAgICAgICAgICAgICBUWC1kcm9wcGVkOiAwICAgICAgICAgICAgIFRYLXRv dGFsOiAwDQogICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCg0KRG9uZS4NCg0KU3RvcHBpbmcgcG9ydCAw Li4uDQpTdG9wcGluZyBwb3J0cy4uLg0KRG9uZQ0KDQpTaHV0dGluZyBkb3duIHBvcnQgMC4uLg0K Q2xvc2luZyBwb3J0cy4uLg0KUG9ydCAwIGlzIGNsb3NlZA0KRG9uZQ0KDQpCeWUuLi4KMjAvMTAv MjAyMCAxNDowODoyMyAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6IHg4Nl82NC1uYXRp dmUtbGludXhhcHAtZ2NjL2FwcC9kcGRrLXRlc3RwbWQgIC1sIDMyLDMzLDM0LDM1IC1uIDQgLXcg MDAwMDphZjowMC4wICAtLWZpbGUtcHJlZml4PWRwZGtfOTc3Nl8yMDIwMTAyMDE0MDc1MiAgICAt LSAtaSAtLXJ4cT02NCAtLXR4cT02NAoyMC8xMC8yMDIwIDE0OjA4OjI0ICAgICAgICAgICAgICBk dXQuMTAuMjQwLjE4My42MjogRUFMOiBEZXRlY3RlZCA3MiBsY29yZShzKQ0KRUFMOiBEZXRlY3Rl ZCAyIE5VTUEgbm9kZXMNCkVBTDogTXVsdGktcHJvY2VzcyBzb2NrZXQgL3Zhci9ydW4vZHBkay9k cGRrXzk3NzZfMjAyMDEwMjAxNDA3NTIvbXBfc29ja2V0DQpFQUw6IFNlbGVjdGVkIElPVkEgbW9k ZSAnVkEnDQpFQUw6IDEwMjQgaHVnZXBhZ2VzIG9mIHNpemUgMjA5NzE1MiByZXNlcnZlZCwgYnV0 IG5vIG1vdW50ZWQgaHVnZXRsYmZzIGZvdW5kIGZvciB0aGF0IHNpemUNCkVBTDogUHJvYmluZyBW RklPIHN1cHBvcnQuLi4NCkVBTDogVkZJTyBzdXBwb3J0IGluaXRpYWxpemVkDQpFQUw6ICAgdXNp bmcgSU9NTVUgdHlwZSAxIChUeXBlIDEpDQpFQUw6IFByb2JlIFBDSSBkcml2ZXI6IG5ldF9pY2Ug KDgwODY6MTU5MikgZGV2aWNlOiAwMDAwOmFmOjAwLjAgKHNvY2tldCAxKQ0KaWNlX2xvYWRfcGtn X3R5cGUoKTogQWN0aXZlIHBhY2thZ2UgaXM6IDEuMy4yMS4wLCBJQ0UgQ09NTVMgUGFja2FnZQ0K SW50ZXJhY3RpdmUtbW9kZSBzZWxlY3RlZA0KdGVzdHBtZDogY3JlYXRlIGEgbmV3IG1idWYgcG9v bCA8bWJfcG9vbF8xPjogbj0xNzE0NTYsIHNpemU9MjE3Niwgc29ja2V0PTENCnRlc3RwbWQ6IHBy ZWZlcnJlZCBtZW1wb29sIG9wcyBzZWxlY3RlZDogcmluZ19tcF9tYw0KDQpXYXJuaW5nISBwb3J0 LXRvcG9sb2d5PXBhaXJlZCBhbmQgb2RkIGZvcndhcmQgcG9ydHMgbnVtYmVyLCB0aGUgbGFzdCBw b3J0IHdpbGwgcGFpciB3aXRoIGl0c2VsZi4NCg0KQ29uZmlndXJpbmcgUG9ydCAwIChzb2NrZXQg MSkNClBvcnQgMDogNjg6QTY6Qjc6MEI6NkY6MzgNCkNoZWNraW5nIGxpbmsgc3RhdHVzZXMuLi4N CkRvbmUKMjAvMTAvMjAyMCAxNDowODozNCAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6 IHNldCBmd2Qgcnhvbmx5CjIwLzEwLzIwMjAgMTQ6MDg6MzQgICAgICAgICAgICAgIGR1dC4xMC4y NDAuMTgzLjYyOiANDQpTZXQgcnhvbmx5IHBhY2tldCBmb3J3YXJkaW5nIG1vZGUKMjAvMTAvMjAy MCAxNDowODozNCAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6IHNldCB2ZXJib3NlIDEK MjAvMTAvMjAyMCAxNDowODozNCAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6IA0NCkNo YW5nZSB2ZXJib3NlIGxldmVsIGZyb20gMCB0byAxCjIwLzEwLzIwMjAgMTQ6MDg6MzQgICAgICAg ICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiBzaG93IHBvcnQgaW5mbyBhbGwKMjAvMTAvMjAyMCAx NDowODozNSAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6IA0NCg0KKioqKioqKioqKioq KioqKioqKioqIEluZm9zIGZvciBwb3J0IDAgICoqKioqKioqKioqKioqKioqKioqKg0KTUFDIGFk ZHJlc3M6IDY4OkE2OkI3OjBCOjZGOjM4DQpEZXZpY2UgbmFtZTogMDAwMDphZjowMC4wDQpEcml2 ZXIgbmFtZTogbmV0X2ljZQ0KRmlybXdhcmUtdmVyc2lvbjogMi4yMCAweDgwMDA0OGQzIDEuMjgz Mi4wDQpEZXZhcmdzOiANCkNvbm5lY3QgdG8gc29ja2V0OiAxDQptZW1vcnkgYWxsb2NhdGlvbiBv biB0aGUgc29ja2V0OiAxDQpMaW5rIHN0YXR1czogdXANCkxpbmsgc3BlZWQ6IDEwIEdicHMNCkxp bmsgZHVwbGV4OiBmdWxsLWR1cGxleA0KTVRVOiAxNTAwDQpQcm9taXNjdW91cyBtb2RlOiBlbmFi bGVkDQpBbGxtdWx0aWNhc3QgbW9kZTogZGlzYWJsZWQNCk1heGltdW0gbnVtYmVyIG9mIE1BQyBh ZGRyZXNzZXM6IDY0DQpNYXhpbXVtIG51bWJlciBvZiBNQUMgYWRkcmVzc2VzIG9mIGhhc2ggZmls dGVyaW5nOiAwDQpWTEFOIG9mZmxvYWQ6IA0KICBzdHJpcCBvZmYsIGZpbHRlciBvZmYsIGV4dGVu ZCBvZmYsIHFpbnEgc3RyaXAgb2ZmDQpIYXNoIGtleSBzaXplIGluIGJ5dGVzOiA1Mg0KUmVkaXJl Y3Rpb24gdGFibGUgc2l6ZTogNTEyDQpTdXBwb3J0ZWQgUlNTIG9mZmxvYWQgZmxvdyB0eXBlczoN CiAgaXB2NA0KICBpcHY0LWZyYWcNCiAgaXB2NC10Y3ANCiAgaXB2NC11ZHANCiAgaXB2NC1zY3Rw DQogIGlwdjQtb3RoZXINCiAgaXB2Ng0KICBpcHY2LWZyYWcNCiAgaXB2Ni10Y3ANCiAgaXB2Ni11 ZHANCiAgaXB2Ni1zY3RwDQogIGlwdjYtb3RoZXINCiAgbDJfcGF5bG9hZA0KTWluaW11bSBzaXpl IG9mIFJYIGJ1ZmZlcjogMTAyNA0KTWF4aW11bSBjb25maWd1cmFibGUgbGVuZ3RoIG9mIFJYIHBh Y2tldDogOTcyOA0KTWF4aW11bSBjb25maWd1cmFibGUgc2l6ZSBvZiBMUk8gYWdncmVnYXRlZCBw YWNrZXQ6IDANCkN1cnJlbnQgbnVtYmVyIG9mIFJYIHF1ZXVlczogNjQNCk1heCBwb3NzaWJsZSBS WCBxdWV1ZXM6IDY0DQpNYXggcG9zc2libGUgbnVtYmVyIG9mIFJYRHMgcGVyIHF1ZXVlOiA0MDk2 DQpNaW4gcG9zc2libGUgbnVtYmVyIG9mIFJYRHMgcGVyIHF1ZXVlOiA2NA0KUlhEcyBudW1iZXIg YWxpZ25tZW50OiAzMg0KQ3VycmVudCBudW1iZXIgb2YgVFggcXVldWVzOiA2NA0KTWF4IHBvc3Np YmxlIFRYIHF1ZXVlczogNjQNCk1heCBwb3NzaWJsZSBudW1iZXIgb2YgVFhEcyBwZXIgcXVldWU6 IDQwOTYNCk1pbiBwb3NzaWJsZSBudW1iZXIgb2YgVFhEcyBwZXIgcXVldWU6IDY0DQpUWERzIG51 bWJlciBhbGlnbm1lbnQ6IDMyDQpNYXggc2VnbWVudCBudW1iZXIgcGVyIHBhY2tldDogMA0KTWF4 IHNlZ21lbnQgbnVtYmVyIHBlciBNVFUvVFNPOiAwCjIwLzEwLzIwMjAgMTQ6MDg6MzUgICAgICAg ICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiBzdGFydAoyMC8xMC8yMDIwIDE0OjA4OjM1ICAgICAg ICAgICAgICBkdXQuMTAuMjQwLjE4My42MjogDQ0Kcnhvbmx5IHBhY2tldCBmb3J3YXJkaW5nIC0g cG9ydHM9MSAtIGNvcmVzPTEgLSBzdHJlYW1zPTY0IC0gTlVNQSBzdXBwb3J0IGVuYWJsZWQsIE1Q IGFsbG9jYXRpb24gbW9kZTogbmF0aXZlDQpMb2dpY2FsIENvcmUgMzMgKHNvY2tldCAxKSBmb3J3 YXJkcyBwYWNrZXRzIG9uIDY0IHN0cmVhbXM6DQogIFJYIFA9MC9RPTAgKHNvY2tldCAxKSAtPiBU WCBQPTAvUT0wIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0x IChzb2NrZXQgMSkgLT4gVFggUD0wL1E9MSAoc29ja2V0IDEpIHBlZXI9MDI6MDA6MDA6MDA6MDA6 MDANCiAgUlggUD0wL1E9MiAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTIgKHNvY2tldCAxKSBwZWVy PTAyOjAwOjAwOjAwOjAwOjAwDQogIFJYIFA9MC9RPTMgKHNvY2tldCAxKSAtPiBUWCBQPTAvUT0z IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT00IChzb2NrZXQg MSkgLT4gVFggUD0wL1E9NCAoc29ja2V0IDEpIHBlZXI9MDI6MDA6MDA6MDA6MDA6MDANCiAgUlgg UD0wL1E9NSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTUgKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAw OjAwOjAwOjAwDQogIFJYIFA9MC9RPTYgKHNvY2tldCAxKSAtPiBUWCBQPTAvUT02IChzb2NrZXQg MSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT03IChzb2NrZXQgMSkgLT4gVFgg UD0wL1E9NyAoc29ja2V0IDEpIHBlZXI9MDI6MDA6MDA6MDA6MDA6MDANCiAgUlggUD0wL1E9OCAo c29ja2V0IDEpIC0+IFRYIFA9MC9RPTggKHNvY2tldCAxKSBwZWVyPTAyOjAwOjAwOjAwOjAwOjAw DQogIFJYIFA9MC9RPTkgKHNvY2tldCAxKSAtPiBUWCBQPTAvUT05IChzb2NrZXQgMSkgcGVlcj0w MjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0xMCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTEw IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0xMSAoc29ja2V0 IDEpIC0+IFRYIFA9MC9RPTExIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBS WCBQPTAvUT0xMiAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTEyIChzb2NrZXQgMSkgcGVlcj0wMjow MDowMDowMDowMDowMA0KICBSWCBQPTAvUT0xMyAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTEzIChz b2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0xNCAoc29ja2V0IDEp IC0+IFRYIFA9MC9RPTE0IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQ PTAvUT0xNSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTE1IChzb2NrZXQgMSkgcGVlcj0wMjowMDow MDowMDowMDowMA0KICBSWCBQPTAvUT0xNiAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTE2IChzb2Nr ZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0xNyAoc29ja2V0IDEpIC0+ IFRYIFA9MC9RPTE3IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAv UT0xOCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTE4IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDow MDowMDowMA0KICBSWCBQPTAvUT0xOSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTE5IChzb2NrZXQg MSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0yMCAoc29ja2V0IDEpIC0+IFRY IFA9MC9RPTIwIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0y MSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTIxIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDow MDowMA0KICBSWCBQPTAvUT0yMiAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTIyIChzb2NrZXQgMSkg cGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0yMyAoc29ja2V0IDEpIC0+IFRYIFA9 MC9RPTIzIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0yNCAo c29ja2V0IDEpIC0+IFRYIFA9MC9RPTI0IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDow MA0KICBSWCBQPTAvUT0yNSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTI1IChzb2NrZXQgMSkgcGVl cj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0yNiAoc29ja2V0IDEpIC0+IFRYIFA9MC9R PTI2IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0yNyAoc29j a2V0IDEpIC0+IFRYIFA9MC9RPTI3IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0K ICBSWCBQPTAvUT0yOCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTI4IChzb2NrZXQgMSkgcGVlcj0w MjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0yOSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTI5 IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0zMCAoc29ja2V0 IDEpIC0+IFRYIFA9MC9RPTMwIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBS WCBQPTAvUT0zMSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTMxIChzb2NrZXQgMSkgcGVlcj0wMjow MDowMDowMDowMDowMA0KICBSWCBQPTAvUT0zMiAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTMyIChz b2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0zMyAoc29ja2V0IDEp IC0+IFRYIFA9MC9RPTMzIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQ PTAvUT0zNCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTM0IChzb2NrZXQgMSkgcGVlcj0wMjowMDow MDowMDowMDowMA0KICBSWCBQPTAvUT0zNSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTM1IChzb2Nr ZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0zNiAoc29ja2V0IDEpIC0+ IFRYIFA9MC9RPTM2IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAv UT0zNyAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTM3IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDow MDowMDowMA0KICBSWCBQPTAvUT0zOCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTM4IChzb2NrZXQg MSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT0zOSAoc29ja2V0IDEpIC0+IFRY IFA9MC9RPTM5IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT00 MCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTQwIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDow MDowMA0KICBSWCBQPTAvUT00MSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTQxIChzb2NrZXQgMSkg cGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT00MiAoc29ja2V0IDEpIC0+IFRYIFA9 MC9RPTQyIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT00MyAo c29ja2V0IDEpIC0+IFRYIFA9MC9RPTQzIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDow MA0KICBSWCBQPTAvUT00NCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTQ0IChzb2NrZXQgMSkgcGVl cj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT00NSAoc29ja2V0IDEpIC0+IFRYIFA9MC9R PTQ1IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT00NiAoc29j a2V0IDEpIC0+IFRYIFA9MC9RPTQ2IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0K ICBSWCBQPTAvUT00NyAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTQ3IChzb2NrZXQgMSkgcGVlcj0w MjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT00OCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTQ4 IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT00OSAoc29ja2V0 IDEpIC0+IFRYIFA9MC9RPTQ5IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBS WCBQPTAvUT01MCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTUwIChzb2NrZXQgMSkgcGVlcj0wMjow MDowMDowMDowMDowMA0KICBSWCBQPTAvUT01MSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTUxIChz b2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT01MiAoc29ja2V0IDEp IC0+IFRYIFA9MC9RPTUyIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQ PTAvUT01MyAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTUzIChzb2NrZXQgMSkgcGVlcj0wMjowMDow MDowMDowMDowMA0KICBSWCBQPTAvUT01NCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTU0IChzb2Nr ZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT01NSAoc29ja2V0IDEpIC0+ IFRYIFA9MC9RPTU1IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAv UT01NiAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTU2IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDow MDowMDowMA0KICBSWCBQPTAvUT01NyAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTU3IChzb2NrZXQg MSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT01OCAoc29ja2V0IDEpIC0+IFRY IFA9MC9RPTU4IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT01 OSAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTU5IChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDow MDowMA0KICBSWCBQPTAvUT02MCAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTYwIChzb2NrZXQgMSkg cGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT02MSAoc29ja2V0IDEpIC0+IFRYIFA9 MC9RPTYxIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDowMA0KICBSWCBQPTAvUT02MiAo c29ja2V0IDEpIC0+IFRYIFA9MC9RPTYyIChzb2NrZXQgMSkgcGVlcj0wMjowMDowMDowMDowMDow MA0KICBSWCBQPTAvUT02MyAoc29ja2V0IDEpIC0+IFRYIFA9MC9RPTYzIChzb2NrZXQgMSkgcGVl cj0wMjowMDowMDowMDowMDowMA0KDQogIHJ4b25seSBwYWNrZXQgZm9yd2FyZGluZyBwYWNrZXRz L2J1cnN0PTMyDQogIG5iIGZvcndhcmRpbmcgY29yZXM9MSAtIG5iIGZvcndhcmRpbmcgcG9ydHM9 MQ0KICBwb3J0IDA6IFJYIHF1ZXVlIG51bWJlcjogNjQgVHggcXVldWUgbnVtYmVyOiA2NA0KICAg IFJ4IG9mZmxvYWRzPTB4MCBUeCBvZmZsb2Fkcz0weDEwMDAwDQogICAgUlggcXVldWU6IDANCiAg ICAgIFJYIGRlc2M9MTAyNCAtIFJYIGZyZWUgdGhyZXNob2xkPTMyDQogICAgICBSWCB0aHJlc2hv bGQgcmVnaXN0ZXJzOiBwdGhyZXNoPTAgaHRocmVzaD0wICB3dGhyZXNoPTANCiAgICAgIFJYIE9m ZmxvYWRzPTB4MA0KICAgIFRYIHF1ZXVlOiAwDQogICAgICBUWCBkZXNjPTEwMjQgLSBUWCBmcmVl IHRocmVzaG9sZD0zMg0KICAgICAgVFggdGhyZXNob2xkIHJlZ2lzdGVyczogcHRocmVzaD0zMiBo dGhyZXNoPTAgIHd0aHJlc2g9MA0KICAgICAgVFggb2ZmbG9hZHM9MHgxMDAwMCAtIFRYIFJTIGJp dCB0aHJlc2hvbGQ9MzIKMjAvMTAvMjAyMCAxNDowODozNSAgICAgICAgICAgICAgZHV0LjEwLjI0 MC4xODMuNjI6IGZsb3cgY3JlYXRlIDAgaW5ncmVzcyBwYXR0ZXJuIGV0aCAvIGlwdjQgLyB1ZHAg LyBndHB1IC8gaXB2NCAvIGVuZCBhY3Rpb25zIHJzcyB0eXBlcyBpcHY0IGwzLWRzdC1vbmx5IGVu ZCBrZXlfbGVuIDAgcXVldWVzIGVuZCAvIGVuZAoyMC8xMC8yMDIwIDE0OjA4OjM1ICAgICAgICAg ICAgICBkdXQuMTAuMjQwLjE4My42MjogDQ0KRmxvdyBydWxlICMwIGNyZWF0ZWQKMjAvMTAvMjAy MCAxNDowODozNSAgICAgICAgIFRlc3RDVkxBZHZhbmNlZFJTU0dUUFU6IC0tLS0tLS0tLS1zZW5k IHBhY2tldC0tLS0tLS0tLS0tLS0KMjAvMTAvMjAyMCAxNDowODozNiAgICAgICAgICAgICAgZHV0 LjEwLjI0MC4xODMuNjI6IHBvcnQgMC9xdWV1ZSAzMjogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNy Yz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAw IC0gbGVuZ3RoPTU1MCAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4N2FiMmNjYTAgLSBSU1MgcXVl dWU9MHgyMCAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9H VFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlw ZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRf bGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQ IHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MjANCiAgb2xfZmxhZ3M6 IFBLVF9SWF9SU1NfSEFTSCBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09P RCBQS1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9XTiANCnBvcnQgMC9xdWV1ZSAzMjogcmVjZWl2 ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoy NjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU1MCAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4 N2FiMmNjYTAgLSBSU1MgcXVldWU9MHgyMCAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VY VF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRf Tk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0 IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkx MywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVl PTB4MjANCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1NfSEFTSCBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQ S1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9XTiANCnBvcnQg MC9xdWV1ZSA1MTogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDowMDowMCAt IGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU1MCAtIG5iX3Nl Z3M9MSAtIFJTUyBoYXNoPTB4NmVmZWM1MzMgLSBSU1MgcXVldWU9MHgzMyAtIGh3IHB0eXBlOiBM Ml9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhU X1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBM NF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6 IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2 NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MzMNCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1NfSEFTSCBQS1Rf UlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJfTDRfQ0tT VU1fVU5LTk9XTiANCgoyMC8xMC8yMDIwIDE0OjA4OjM2ICAgICAgICAgVGVzdENWTEFkdmFuY2Vk UlNTR1RQVTogaGFzaF9pbmZvczogWygnMHg3YWIyY2NhMCcsICcweDIwJyksICgnMHg3YWIyY2Nh MCcsICcweDIwJyksICgnMHg2ZWZlYzUzMycsICcweDMzJyldCjIwLzEwLzIwMjAgMTQ6MDg6MzYg ICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRSU1NHVFBVOiAtLS0tLS0tLS0tc2VuZCBwYWNrZXQtLS0t LS0tLS0tLS0tCjIwLzEwLzIwMjAgMTQ6MDg6MzcgICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgz LjYyOiBwb3J0IDAvcXVldWUgMjE6IHJlY2VpdmVkIDEgcGFja2V0cw0KICBzcmM9MDA6MDA6MDA6 MDA6MDA6MDAgLSBkc3Q9Njg6MDU6Q0E6QkI6MjY6RTAgLSB0eXBlPTB4MDgwMCAtIGxlbmd0aD01 NjIgLSBuYl9zZWdzPTEgLSBSU1MgaGFzaD0weGJmODU0Yjk1IC0gUlNTIHF1ZXVlPTB4MTUgLSBo dyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNF9FWFRfVU5LTk9XTiBUVU5ORUxfR1RQVSBJTk5FUl9M M19JUFY0X0VYVF9VTktOT1dOIElOTkVSX0w0X05PTkZSQUcgIC0gc3cgcHR5cGU6IEwyX0VUSEVS IEwzX0lQVjQgTDRfVURQICAtIGwyX2xlbj0xNCAtIGwzX2xlbj0yMCAtIGw0X2xlbj04IC0gVlhM QU4gcGFja2V0OiBwYWNrZXQgdHlwZSA9MzI5MTMsIERlc3RpbmF0aW9uIFVEUCBwb3J0ID0yMTUy LCBWTkkgPSA0NjYwIC0gUmVjZWl2ZSBxdWV1ZT0weDE1DQogIG9sX2ZsYWdzOiBQS1RfUlhfUlNT X0hBU0ggUEtUX1JYX0w0X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JYX09V VEVSX0w0X0NLU1VNX1VOS05PV04gDQpwb3J0IDAvcXVldWUgNjogcmVjZWl2ZWQgMSBwYWNrZXRz DQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9 MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4YWJjOTQyMDYgLSBS U1MgcXVldWU9MHg2IC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VOS05PV04gVFVO TkVMX0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5FUl9MNF9OT05GUkFHICAtIHN3 IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBsM19sZW49MjAg LSBsNF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUgPTMyOTEzLCBEZXN0aW5hdGlv biBVRFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUgcXVldWU9MHg2DQogIG9sX2Zs YWdzOiBQS1RfUlhfUlNTX0hBU0ggUEtUX1JYX0w0X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NLU1VN X0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VOS05PV04gDQpwb3J0IDAvcXVldWUgNDc6IHJl Y2VpdmVkIDEgcGFja2V0cw0KICBzcmM9MDA6MDA6MDA6MDA6MDA6MDAgLSBkc3Q9Njg6MDU6Q0E6 QkI6MjY6RTAgLSB0eXBlPTB4MDgwMCAtIGxlbmd0aD01NjIgLSBuYl9zZWdzPTEgLSBSU1MgaGFz aD0weDFmZWY4YTZmIC0gUlNTIHF1ZXVlPTB4MmYgLSBodyBwdHlwZTogTDJfRVRIRVIgTDNfSVBW NF9FWFRfVU5LTk9XTiBUVU5ORUxfR1RQVSBJTk5FUl9MM19JUFY0X0VYVF9VTktOT1dOIElOTkVS X0w0X05PTkZSQUcgIC0gc3cgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjQgTDRfVURQICAtIGwyX2xl bj0xNCAtIGwzX2xlbj0yMCAtIGw0X2xlbj04IC0gVlhMQU4gcGFja2V0OiBwYWNrZXQgdHlwZSA9 MzI5MTMsIERlc3RpbmF0aW9uIFVEUCBwb3J0ID0yMTUyLCBWTkkgPSA0NjYwIC0gUmVjZWl2ZSBx dWV1ZT0weDJmDQogIG9sX2ZsYWdzOiBQS1RfUlhfUlNTX0hBU0ggUEtUX1JYX0w0X0NLU1VNX0dP T0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VOS05PV04gDQoK MjAvMTAvMjAyMCAxNDowODozNyAgICAgICAgIFRlc3RDVkxBZHZhbmNlZFJTU0dUUFU6IGhhc2hf aW5mb3M6IFsoJzB4YmY4NTRiOTUnLCAnMHgxNScpLCAoJzB4YWJjOTQyMDYnLCAnMHg2JyksICgn MHgxZmVmOGE2ZicsICcweDJmJyldCjIwLzEwLzIwMjAgMTQ6MDg6MzcgICAgICAgICBUZXN0Q1ZM QWR2YW5jZWRSU1NHVFBVOiAtLS0tLS0tLS0tc2VuZCBwYWNrZXQtLS0tLS0tLS0tLS0tCjIwLzEw LzIwMjAgMTQ6MDg6MzggICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiBwb3J0IDAvcXVl dWUgMjE6IHJlY2VpdmVkIDEgcGFja2V0cw0KICBzcmM9MDA6MDA6MDA6MDA6MDA6MDAgLSBkc3Q9 Njg6MDU6Q0E6QkI6MjY6RTAgLSB0eXBlPTB4MDgwMCAtIGxlbmd0aD01NjIgLSBuYl9zZWdzPTEg LSBSU1MgaGFzaD0weGJmODU0Yjk1IC0gUlNTIHF1ZXVlPTB4MTUgLSBodyBwdHlwZTogTDJfRVRI RVIgTDNfSVBWNF9FWFRfVU5LTk9XTiBUVU5ORUxfR1RQVSBJTk5FUl9MM19JUFY0X0VYVF9VTktO T1dOIElOTkVSX0w0X05PTkZSQUcgIC0gc3cgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjQgTDRfVURQ ICAtIGwyX2xlbj0xNCAtIGwzX2xlbj0yMCAtIGw0X2xlbj04IC0gVlhMQU4gcGFja2V0OiBwYWNr ZXQgdHlwZSA9MzI5MTMsIERlc3RpbmF0aW9uIFVEUCBwb3J0ID0yMTUyLCBWTkkgPSA0NjYwIC0g UmVjZWl2ZSBxdWV1ZT0weDE1DQogIG9sX2ZsYWdzOiBQS1RfUlhfUlNTX0hBU0ggUEtUX1JYX0w0 X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VO S05PV04gDQpwb3J0IDAvcXVldWUgNDc6IHJlY2VpdmVkIDEgcGFja2V0cw0KICBzcmM9MDA6MDA6 MDA6MDA6MDA6MDAgLSBkc3Q9Njg6MDU6Q0E6QkI6MjY6RTAgLSB0eXBlPTB4MDgwMCAtIGxlbmd0 aD01NjIgLSBuYl9zZWdzPTEgLSBSU1MgaGFzaD0weDFmZWY4YTZmIC0gUlNTIHF1ZXVlPTB4MmYg LSBodyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNF9FWFRfVU5LTk9XTiBUVU5ORUxfR1RQVSBJTk5F Ul9MM19JUFY0X0VYVF9VTktOT1dOIElOTkVSX0w0X05PTkZSQUcgIC0gc3cgcHR5cGU6IEwyX0VU SEVSIEwzX0lQVjQgTDRfVURQICAtIGwyX2xlbj0xNCAtIGwzX2xlbj0yMCAtIGw0X2xlbj04IC0g VlhMQU4gcGFja2V0OiBwYWNrZXQgdHlwZSA9MzI5MTMsIERlc3RpbmF0aW9uIFVEUCBwb3J0ID0y MTUyLCBWTkkgPSA0NjYwIC0gUmVjZWl2ZSBxdWV1ZT0weDJmDQogIG9sX2ZsYWdzOiBQS1RfUlhf UlNTX0hBU0ggUEtUX1JYX0w0X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JY X09VVEVSX0w0X0NLU1VNX1VOS05PV04gDQpwb3J0IDAvcXVldWUgNjogcmVjZWl2ZWQgMSBwYWNr ZXRzDQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5 cGU9MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4YWJjOTQyMDYg LSBSU1MgcXVldWU9MHg2IC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VOS05PV04g VFVOTkVMX0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5FUl9MNF9OT05GUkFHICAt IHN3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBsM19sZW49 MjAgLSBsNF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUgPTMyOTEzLCBEZXN0aW5h dGlvbiBVRFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUgcXVldWU9MHg2DQogIG9s X2ZsYWdzOiBQS1RfUlhfUlNTX0hBU0ggUEtUX1JYX0w0X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NL U1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VOS05PV04gDQoKMjAvMTAvMjAyMCAxNDow ODozOCAgICAgICAgIFRlc3RDVkxBZHZhbmNlZFJTU0dUUFU6IGhhc2hfaW5mb3M6IFsoJzB4YmY4 NTRiOTUnLCAnMHgxNScpLCAoJzB4MWZlZjhhNmYnLCAnMHgyZicpLCAoJzB4YWJjOTQyMDYnLCAn MHg2JyldCjIwLzEwLzIwMjAgMTQ6MDg6MzggICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjYy OiBmbG93IGNyZWF0ZSAwIGluZ3Jlc3MgcGF0dGVybiBldGggLyBpcHY0IC8gdWRwIC8gZ3RwdSAv IGd0cF9wc2MgLyBpcHY0IC8gZW5kIGFjdGlvbnMgcnNzIHR5cGVzIGlwdjQgbDMtc3JjLW9ubHkg ZW5kIGtleV9sZW4gMCBxdWV1ZXMgZW5kIC8gZW5kCjIwLzEwLzIwMjAgMTQ6MDg6MzggICAgICAg ICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiANDQpGbG93IHJ1bGUgIzEgY3JlYXRlZAoyMC8xMC8y MDIwIDE0OjA4OjM4ICAgICAgICAgVGVzdENWTEFkdmFuY2VkUlNTR1RQVTogLS0tLS0tLS0tLXNl bmQgcGFja2V0LS0tLS0tLS0tLS0tLQoyMC8xMC8yMDIwIDE0OjA4OjM5ICAgICAgICAgICAgICBk dXQuMTAuMjQwLjE4My42MjogcG9ydCAwL3F1ZXVlIDMyOiByZWNlaXZlZCAxIHBhY2tldHMNCiAg c3JjPTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlwZT0weDA4 MDAgLSBsZW5ndGg9NTUwIC0gbmJfc2Vncz0xIC0gUlNTIGhhc2g9MHg3YWIyY2NhMCAtIFJTUyBx dWV1ZT0weDIwIC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VOS05PV04gVFVOTkVM X0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5FUl9MNF9OT05GUkFHICAtIHN3IHB0 eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBsM19sZW49MjAgLSBs NF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUgPTMyOTEzLCBEZXN0aW5hdGlvbiBV RFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUgcXVldWU9MHgyMA0KICBvbF9mbGFn czogUEtUX1JYX1JTU19IQVNIIFBLVF9SWF9MNF9DS1NVTV9HT09EIFBLVF9SWF9JUF9DS1NVTV9H T09EIFBLVF9SWF9PVVRFUl9MNF9DS1NVTV9VTktOT1dOIA0KcG9ydCAwL3F1ZXVlIDMyOiByZWNl aXZlZCAxIHBhY2tldHMNCiAgc3JjPTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJC OjI2OkUwIC0gdHlwZT0weDA4MDAgLSBsZW5ndGg9NTUwIC0gbmJfc2Vncz0xIC0gUlNTIGhhc2g9 MHg3YWIyY2NhMCAtIFJTUyBxdWV1ZT0weDIwIC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjRf RVhUX1VOS05PV04gVFVOTkVMX0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5FUl9M NF9OT05GUkFHICAtIHN3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9sZW49 MTQgLSBsM19sZW49MjAgLSBsNF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUgPTMy OTEzLCBEZXN0aW5hdGlvbiBVRFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUgcXVl dWU9MHgyMA0KICBvbF9mbGFnczogUEtUX1JYX1JTU19IQVNIIFBLVF9SWF9MNF9DS1NVTV9HT09E IFBLVF9SWF9JUF9DS1NVTV9HT09EIFBLVF9SWF9PVVRFUl9MNF9DS1NVTV9VTktOT1dOIA0KcG9y dCAwL3F1ZXVlIDUxOiByZWNlaXZlZCAxIHBhY2tldHMNCiAgc3JjPTAwOjAwOjAwOjAwOjAwOjAw IC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlwZT0weDA4MDAgLSBsZW5ndGg9NTUwIC0gbmJf c2Vncz0xIC0gUlNTIGhhc2g9MHg2ZWZlYzUzMyAtIFJTUyBxdWV1ZT0weDMzIC0gaHcgcHR5cGU6 IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VOS05PV04gVFVOTkVMX0dUUFUgSU5ORVJfTDNfSVBWNF9F WFRfVU5LTk9XTiBJTk5FUl9MNF9OT05GUkFHICAtIHN3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0 IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBsM19sZW49MjAgLSBsNF9sZW49OCAtIFZYTEFOIHBhY2tl dDogcGFja2V0IHR5cGUgPTMyOTEzLCBEZXN0aW5hdGlvbiBVRFAgcG9ydCA9MjE1MiwgVk5JID0g NDY2MCAtIFJlY2VpdmUgcXVldWU9MHgzMw0KICBvbF9mbGFnczogUEtUX1JYX1JTU19IQVNIIFBL VF9SWF9MNF9DS1NVTV9HT09EIFBLVF9SWF9JUF9DS1NVTV9HT09EIFBLVF9SWF9PVVRFUl9MNF9D S1NVTV9VTktOT1dOIA0KCjIwLzEwLzIwMjAgMTQ6MDg6MzkgICAgICAgICBUZXN0Q1ZMQWR2YW5j ZWRSU1NHVFBVOiBoYXNoX2luZm9zOiBbKCcweDdhYjJjY2EwJywgJzB4MjAnKSwgKCcweDdhYjJj Y2EwJywgJzB4MjAnKSwgKCcweDZlZmVjNTMzJywgJzB4MzMnKV0KMjAvMTAvMjAyMCAxNDowODoz OSAgICAgICAgIFRlc3RDVkxBZHZhbmNlZFJTU0dUUFU6IC0tLS0tLS0tLS1zZW5kIHBhY2tldC0t LS0tLS0tLS0tLS0KMjAvMTAvMjAyMCAxNDowODo0MCAgICAgICAgICAgICAgZHV0LjEwLjI0MC4x ODMuNjI6IHBvcnQgMC9xdWV1ZSAxNjogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDow MDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3Ro PTU2MiAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4MTBiZjk2ZDAgLSBSU1MgcXVldWU9MHgxMCAt IGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVS X0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRI RVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBW WExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIx NTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MTANCiAgb2xfZmxhZ3M6IFBLVF9SWF9S U1NfSEFTSCBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhf T1VURVJfTDRfQ0tTVU1fVU5LTk9XTiANCnBvcnQgMC9xdWV1ZSAzOiByZWNlaXZlZCAxIHBhY2tl dHMNCiAgc3JjPTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlw ZT0weDA4MDAgLSBsZW5ndGg9NTYyIC0gbmJfc2Vncz0xIC0gUlNTIGhhc2g9MHg0ZjM5ZjQzIC0g UlNTIHF1ZXVlPTB4MyAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRV Tk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBz dyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIw IC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRp b24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4Mw0KICBvbF9m bGFnczogUEtUX1JYX1JTU19IQVNIIFBLVF9SWF9MNF9DS1NVTV9HT09EIFBLVF9SWF9JUF9DS1NV TV9HT09EIFBLVF9SWF9PVVRFUl9MNF9DS1NVTV9VTktOT1dOIA0KcG9ydCAwL3F1ZXVlIDE2OiBy ZWNlaXZlZCAxIHBhY2tldHMNCiAgc3JjPTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNB OkJCOjI2OkUwIC0gdHlwZT0weDA4MDAgLSBsZW5ndGg9NTYyIC0gbmJfc2Vncz0xIC0gUlNTIGhh c2g9MHgxMGJmOTZkMCAtIFJTUyBxdWV1ZT0weDEwIC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQ VjRfRVhUX1VOS05PV04gVFVOTkVMX0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5F Ul9MNF9OT05GUkFHICAtIHN3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9s ZW49MTQgLSBsM19sZW49MjAgLSBsNF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUg PTMyOTEzLCBEZXN0aW5hdGlvbiBVRFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUg cXVldWU9MHgxMA0KICBvbF9mbGFnczogUEtUX1JYX1JTU19IQVNIIFBLVF9SWF9MNF9DS1NVTV9H T09EIFBLVF9SWF9JUF9DS1NVTV9HT09EIFBLVF9SWF9PVVRFUl9MNF9DS1NVTV9VTktOT1dOIA0K CjIwLzEwLzIwMjAgMTQ6MDg6NDAgICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRSU1NHVFBVOiBoYXNo X2luZm9zOiBbKCcweDEwYmY5NmQwJywgJzB4MTAnKSwgKCcweDRmMzlmNDMnLCAnMHgzJyksICgn MHgxMGJmOTZkMCcsICcweDEwJyldCjIwLzEwLzIwMjAgMTQ6MDg6NDAgICAgICAgICBUZXN0Q1ZM QWR2YW5jZWRSU1NHVFBVOiAtLS0tLS0tLS0tc2VuZCBwYWNrZXQtLS0tLS0tLS0tLS0tCjIwLzEw LzIwMjAgMTQ6MDg6NDEgICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiBwb3J0IDAvcXVl dWUgMTY6IHJlY2VpdmVkIDEgcGFja2V0cw0KICBzcmM9MDA6MDA6MDA6MDA6MDA6MDAgLSBkc3Q9 Njg6MDU6Q0E6QkI6MjY6RTAgLSB0eXBlPTB4MDgwMCAtIGxlbmd0aD01NjIgLSBuYl9zZWdzPTEg LSBSU1MgaGFzaD0weDEwYmY5NmQwIC0gUlNTIHF1ZXVlPTB4MTAgLSBodyBwdHlwZTogTDJfRVRI RVIgTDNfSVBWNF9FWFRfVU5LTk9XTiBUVU5ORUxfR1RQVSBJTk5FUl9MM19JUFY0X0VYVF9VTktO T1dOIElOTkVSX0w0X05PTkZSQUcgIC0gc3cgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjQgTDRfVURQ ICAtIGwyX2xlbj0xNCAtIGwzX2xlbj0yMCAtIGw0X2xlbj04IC0gVlhMQU4gcGFja2V0OiBwYWNr ZXQgdHlwZSA9MzI5MTMsIERlc3RpbmF0aW9uIFVEUCBwb3J0ID0yMTUyLCBWTkkgPSA0NjYwIC0g UmVjZWl2ZSBxdWV1ZT0weDEwDQogIG9sX2ZsYWdzOiBQS1RfUlhfUlNTX0hBU0ggUEtUX1JYX0w0 X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VO S05PV04gDQpwb3J0IDAvcXVldWUgMzogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDow MDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3Ro PTU2MiAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4NGYzOWY0MyAtIFJTUyBxdWV1ZT0weDMgLSBo dyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNF9FWFRfVU5LTk9XTiBUVU5ORUxfR1RQVSBJTk5FUl9M M19JUFY0X0VYVF9VTktOT1dOIElOTkVSX0w0X05PTkZSQUcgIC0gc3cgcHR5cGU6IEwyX0VUSEVS IEwzX0lQVjQgTDRfVURQICAtIGwyX2xlbj0xNCAtIGwzX2xlbj0yMCAtIGw0X2xlbj04IC0gVlhM QU4gcGFja2V0OiBwYWNrZXQgdHlwZSA9MzI5MTMsIERlc3RpbmF0aW9uIFVEUCBwb3J0ID0yMTUy LCBWTkkgPSA0NjYwIC0gUmVjZWl2ZSBxdWV1ZT0weDMNCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1Nf SEFTSCBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VU RVJfTDRfQ0tTVU1fVU5LTk9XTiANCnBvcnQgMC9xdWV1ZSAxNjogcmVjZWl2ZWQgMSBwYWNrZXRz DQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9 MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4MTBiZjk2ZDAgLSBS U1MgcXVldWU9MHgxMCAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRV Tk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBz dyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIw IC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRp b24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MTANCiAgb2xf ZmxhZ3M6IFBLVF9SWF9SU1NfSEFTSCBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tT VU1fR09PRCBQS1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9XTiANCgoyMC8xMC8yMDIwIDE0OjA4 OjQxICAgICAgICAgVGVzdENWTEFkdmFuY2VkUlNTR1RQVTogaGFzaF9pbmZvczogWygnMHgxMGJm OTZkMCcsICcweDEwJyksICgnMHg0ZjM5ZjQzJywgJzB4MycpLCAoJzB4MTBiZjk2ZDAnLCAnMHgx MCcpXQoyMC8xMC8yMDIwIDE0OjA4OjQxICAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4My42Mjog ZmxvdyBkZXN0cm95IDAgcnVsZSAwCjIwLzEwLzIwMjAgMTQ6MDg6NDMgICAgICAgICAgICAgIGR1 dC4xMC4yNDAuMTgzLjYyOiANDQpGbG93IHJ1bGUgIzAgZGVzdHJveWVkDQp0ZXN0cG1kPiAKMjAv MTAvMjAyMCAxNDowODo0MyAgICAgICAgIFRlc3RDVkxBZHZhbmNlZFJTU0dUUFU6IC0tLS0tLS0t LS1zZW5kIHBhY2tldC0tLS0tLS0tLS0tLS0KMjAvMTAvMjAyMCAxNDowODo0NCAgICAgICAgICAg ICAgZHV0LjEwLjI0MC4xODMuNjI6IHBvcnQgMC9xdWV1ZSAwOiByZWNlaXZlZCAxIHBhY2tldHMN CiAgc3JjPTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlwZT0w eDA4MDAgLSBsZW5ndGg9NTUwIC0gbmJfc2Vncz0xIC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQ VjRfRVhUX1VOS05PV04gVFVOTkVMX0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5F Ul9MNF9OT05GUkFHICAtIHN3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9s ZW49MTQgLSBsM19sZW49MjAgLSBsNF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUg PTMyOTEzLCBEZXN0aW5hdGlvbiBVRFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUg cXVldWU9MHgwDQogIG9sX2ZsYWdzOiBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tT VU1fR09PRCBQS1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9XTiANCnBvcnQgMC9xdWV1ZSAwOiBy ZWNlaXZlZCAxIHBhY2tldHMNCiAgc3JjPTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNB OkJCOjI2OkUwIC0gdHlwZT0weDA4MDAgLSBsZW5ndGg9NTUwIC0gbmJfc2Vncz0xIC0gaHcgcHR5 cGU6IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VOS05PV04gVFVOTkVMX0dUUFUgSU5ORVJfTDNfSVBW NF9FWFRfVU5LTk9XTiBJTk5FUl9MNF9OT05GUkFHICAtIHN3IHB0eXBlOiBMMl9FVEhFUiBMM19J UFY0IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBsM19sZW49MjAgLSBsNF9sZW49OCAtIFZYTEFOIHBh Y2tldDogcGFja2V0IHR5cGUgPTMyOTEzLCBEZXN0aW5hdGlvbiBVRFAgcG9ydCA9MjE1MiwgVk5J ID0gNDY2MCAtIFJlY2VpdmUgcXVldWU9MHgwDQogIG9sX2ZsYWdzOiBQS1RfUlhfTDRfQ0tTVU1f R09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9XTiAN CnBvcnQgMC9xdWV1ZSAwOiByZWNlaXZlZCAxIHBhY2tldHMNCiAgc3JjPTAwOjAwOjAwOjAwOjAw OjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlwZT0weDA4MDAgLSBsZW5ndGg9NTUwIC0g bmJfc2Vncz0xIC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VOS05PV04gVFVOTkVM X0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5FUl9MNF9OT05GUkFHICAtIHN3IHB0 eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBsM19sZW49MjAgLSBs NF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUgPTMyOTEzLCBEZXN0aW5hdGlvbiBV RFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUgcXVldWU9MHgwDQogIG9sX2ZsYWdz OiBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJf TDRfQ0tTVU1fVU5LTk9XTiANCgoyMC8xMC8yMDIwIDE0OjA4OjQ0ICAgICAgICAgVGVzdENWTEFk dmFuY2VkUlNTR1RQVTogaGFzaF9pbmZvczogW10KMjAvMTAvMjAyMCAxNDowODo0NCAgICAgICAg IFRlc3RDVkxBZHZhbmNlZFJTU0dUUFU6IC0tLS0tLS0tLS1zZW5kIHBhY2tldC0tLS0tLS0tLS0t LS0KMjAvMTAvMjAyMCAxNDowODo0NSAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6IHBv cnQgMC9xdWV1ZSAxNjogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDowMDow MCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5i X3NlZ3M9MSAtIFJTUyBoYXNoPTB4MTBiZjk2ZDAgLSBSU1MgcXVldWU9MHgxMCAtIGh3IHB0eXBl OiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQVjRf RVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNfSVBW NCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBwYWNr ZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZOSSA9 IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MTANCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1NfSEFTSCBQ S1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJfTDRf Q0tTVU1fVU5LTk9XTiANCnBvcnQgMC9xdWV1ZSAzOiByZWNlaXZlZCAxIHBhY2tldHMNCiAgc3Jj PTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlwZT0weDA4MDAg LSBsZW5ndGg9NTYyIC0gbmJfc2Vncz0xIC0gUlNTIGhhc2g9MHg0ZjM5ZjQzIC0gUlNTIHF1ZXVl PTB4MyAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBV IElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTog TDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVu PTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBv cnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4Mw0KICBvbF9mbGFnczogUEtU X1JYX1JTU19IQVNIIFBLVF9SWF9MNF9DS1NVTV9HT09EIFBLVF9SWF9JUF9DS1NVTV9HT09EIFBL VF9SWF9PVVRFUl9MNF9DS1NVTV9VTktOT1dOIA0KcG9ydCAwL3F1ZXVlIDE2OiByZWNlaXZlZCAx IHBhY2tldHMNCiAgc3JjPTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUw IC0gdHlwZT0weDA4MDAgLSBsZW5ndGg9NTYyIC0gbmJfc2Vncz0xIC0gUlNTIGhhc2g9MHgxMGJm OTZkMCAtIFJTUyBxdWV1ZT0weDEwIC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VO S05PV04gVFVOTkVMX0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5FUl9MNF9OT05G UkFHICAtIHN3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBs M19sZW49MjAgLSBsNF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUgPTMyOTEzLCBE ZXN0aW5hdGlvbiBVRFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUgcXVldWU9MHgx MA0KICBvbF9mbGFnczogUEtUX1JYX1JTU19IQVNIIFBLVF9SWF9MNF9DS1NVTV9HT09EIFBLVF9S WF9JUF9DS1NVTV9HT09EIFBLVF9SWF9PVVRFUl9MNF9DS1NVTV9VTktOT1dOIA0KCjIwLzEwLzIw MjAgMTQ6MDg6NDUgICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRSU1NHVFBVOiBoYXNoX2luZm9zOiBb KCcweDEwYmY5NmQwJywgJzB4MTAnKSwgKCcweDRmMzlmNDMnLCAnMHgzJyksICgnMHgxMGJmOTZk MCcsICcweDEwJyldCjIwLzEwLzIwMjAgMTQ6MDg6NDUgICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRS U1NHVFBVOiAtLS0tLS0tLS0tc2VuZCBwYWNrZXQtLS0tLS0tLS0tLS0tCjIwLzEwLzIwMjAgMTQ6 MDg6NDYgICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiBwb3J0IDAvcXVldWUgMTY6IHJl Y2VpdmVkIDEgcGFja2V0cw0KICBzcmM9MDA6MDA6MDA6MDA6MDA6MDAgLSBkc3Q9Njg6MDU6Q0E6 QkI6MjY6RTAgLSB0eXBlPTB4MDgwMCAtIGxlbmd0aD01NjIgLSBuYl9zZWdzPTEgLSBSU1MgaGFz aD0weDEwYmY5NmQwIC0gUlNTIHF1ZXVlPTB4MTAgLSBodyBwdHlwZTogTDJfRVRIRVIgTDNfSVBW NF9FWFRfVU5LTk9XTiBUVU5ORUxfR1RQVSBJTk5FUl9MM19JUFY0X0VYVF9VTktOT1dOIElOTkVS X0w0X05PTkZSQUcgIC0gc3cgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjQgTDRfVURQICAtIGwyX2xl bj0xNCAtIGwzX2xlbj0yMCAtIGw0X2xlbj04IC0gVlhMQU4gcGFja2V0OiBwYWNrZXQgdHlwZSA9 MzI5MTMsIERlc3RpbmF0aW9uIFVEUCBwb3J0ID0yMTUyLCBWTkkgPSA0NjYwIC0gUmVjZWl2ZSBx dWV1ZT0weDEwDQogIG9sX2ZsYWdzOiBQS1RfUlhfUlNTX0hBU0ggUEtUX1JYX0w0X0NLU1VNX0dP T0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VOS05PV04gDQpw b3J0IDAvcXVldWUgMzogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDowMDow MCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5i X3NlZ3M9MSAtIFJTUyBoYXNoPTB4NGYzOWY0MyAtIFJTUyBxdWV1ZT0weDMgLSBodyBwdHlwZTog TDJfRVRIRVIgTDNfSVBWNF9FWFRfVU5LTk9XTiBUVU5ORUxfR1RQVSBJTk5FUl9MM19JUFY0X0VY VF9VTktOT1dOIElOTkVSX0w0X05PTkZSQUcgIC0gc3cgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjQg TDRfVURQICAtIGwyX2xlbj0xNCAtIGwzX2xlbj0yMCAtIGw0X2xlbj04IC0gVlhMQU4gcGFja2V0 OiBwYWNrZXQgdHlwZSA9MzI5MTMsIERlc3RpbmF0aW9uIFVEUCBwb3J0ID0yMTUyLCBWTkkgPSA0 NjYwIC0gUmVjZWl2ZSBxdWV1ZT0weDMNCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1NfSEFTSCBQS1Rf UlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJfTDRfQ0tT VU1fVU5LTk9XTiANCnBvcnQgMC9xdWV1ZSAxNjogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0w MDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0g bGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4MTBiZjk2ZDAgLSBSU1MgcXVldWU9 MHgxMCAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBV IElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTog TDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVu PTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBv cnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MTANCiAgb2xfZmxhZ3M6IFBL VF9SWF9SU1NfSEFTSCBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQ S1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9XTiANCgoyMC8xMC8yMDIwIDE0OjA4OjQ2ICAgICAg ICAgVGVzdENWTEFkdmFuY2VkUlNTR1RQVTogaGFzaF9pbmZvczogWygnMHgxMGJmOTZkMCcsICcw eDEwJyksICgnMHg0ZjM5ZjQzJywgJzB4MycpLCAoJzB4MTBiZjk2ZDAnLCAnMHgxMCcpXQoyMC8x MC8yMDIwIDE0OjA4OjQ2ICAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4My42MjogZmxvdyBjcmVh dGUgMCBpbmdyZXNzIHBhdHRlcm4gZXRoIC8gaXB2NCAvIHVkcCAvIGd0cHUgLyBpcHY0IC8gZW5k IGFjdGlvbnMgcnNzIHR5cGVzIGlwdjQgbDMtZHN0LW9ubHkgZW5kIGtleV9sZW4gMCBxdWV1ZXMg ZW5kIC8gZW5kCjIwLzEwLzIwMjAgMTQ6MDg6NDYgICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgz LjYyOiANDQpGbG93IHJ1bGUgIzIgY3JlYXRlZAoyMC8xMC8yMDIwIDE0OjA4OjQ2ICAgICAgICAg VGVzdENWTEFkdmFuY2VkUlNTR1RQVTogLS0tLS0tLS0tLXNlbmQgcGFja2V0LS0tLS0tLS0tLS0t LQoyMC8xMC8yMDIwIDE0OjA4OjQ3ICAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4My42MjogcG9y dCAwL3F1ZXVlIDMyOiByZWNlaXZlZCAxIHBhY2tldHMNCiAgc3JjPTAwOjAwOjAwOjAwOjAwOjAw IC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlwZT0weDA4MDAgLSBsZW5ndGg9NTUwIC0gbmJf c2Vncz0xIC0gUlNTIGhhc2g9MHg3YWIyY2NhMCAtIFJTUyBxdWV1ZT0weDIwIC0gaHcgcHR5cGU6 IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VOS05PV04gVFVOTkVMX0dUUFUgSU5ORVJfTDNfSVBWNF9F WFRfVU5LTk9XTiBJTk5FUl9MNF9OT05GUkFHICAtIHN3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0 IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBsM19sZW49MjAgLSBsNF9sZW49OCAtIFZYTEFOIHBhY2tl dDogcGFja2V0IHR5cGUgPTMyOTEzLCBEZXN0aW5hdGlvbiBVRFAgcG9ydCA9MjE1MiwgVk5JID0g NDY2MCAtIFJlY2VpdmUgcXVldWU9MHgyMA0KICBvbF9mbGFnczogUEtUX1JYX1JTU19IQVNIIFBL VF9SWF9MNF9DS1NVTV9HT09EIFBLVF9SWF9JUF9DS1NVTV9HT09EIFBLVF9SWF9PVVRFUl9MNF9D S1NVTV9VTktOT1dOIA0KcG9ydCAwL3F1ZXVlIDMyOiByZWNlaXZlZCAxIHBhY2tldHMNCiAgc3Jj PTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlwZT0weDA4MDAg LSBsZW5ndGg9NTUwIC0gbmJfc2Vncz0xIC0gUlNTIGhhc2g9MHg3YWIyY2NhMCAtIFJTUyBxdWV1 ZT0weDIwIC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VOS05PV04gVFVOTkVMX0dU UFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5FUl9MNF9OT05GUkFHICAtIHN3IHB0eXBl OiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBsM19sZW49MjAgLSBsNF9s ZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUgPTMyOTEzLCBEZXN0aW5hdGlvbiBVRFAg cG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUgcXVldWU9MHgyMA0KICBvbF9mbGFnczog UEtUX1JYX1JTU19IQVNIIFBLVF9SWF9MNF9DS1NVTV9HT09EIFBLVF9SWF9JUF9DS1NVTV9HT09E IFBLVF9SWF9PVVRFUl9MNF9DS1NVTV9VTktOT1dOIA0KcG9ydCAwL3F1ZXVlIDUxOiByZWNlaXZl ZCAxIHBhY2tldHMNCiAgc3JjPTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2 OkUwIC0gdHlwZT0weDA4MDAgLSBsZW5ndGg9NTUwIC0gbmJfc2Vncz0xIC0gUlNTIGhhc2g9MHg2 ZWZlYzUzMyAtIFJTUyBxdWV1ZT0weDMzIC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjRfRVhU X1VOS05PV04gVFVOTkVMX0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5FUl9MNF9O T05GUkFHICAtIHN3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9sZW49MTQg LSBsM19sZW49MjAgLSBsNF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUgPTMyOTEz LCBEZXN0aW5hdGlvbiBVRFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUgcXVldWU9 MHgzMw0KICBvbF9mbGFnczogUEtUX1JYX1JTU19IQVNIIFBLVF9SWF9MNF9DS1NVTV9HT09EIFBL VF9SWF9JUF9DS1NVTV9HT09EIFBLVF9SWF9PVVRFUl9MNF9DS1NVTV9VTktOT1dOIA0KCjIwLzEw LzIwMjAgMTQ6MDg6NDcgICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRSU1NHVFBVOiBoYXNoX2luZm9z OiBbKCcweDdhYjJjY2EwJywgJzB4MjAnKSwgKCcweDdhYjJjY2EwJywgJzB4MjAnKSwgKCcweDZl ZmVjNTMzJywgJzB4MzMnKV0KMjAvMTAvMjAyMCAxNDowODo0NyAgICAgICAgIFRlc3RDVkxBZHZh bmNlZFJTU0dUUFU6IC0tLS0tLS0tLS1zZW5kIHBhY2tldC0tLS0tLS0tLS0tLS0KMjAvMTAvMjAy MCAxNDowODo0OCAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6IHBvcnQgMC9xdWV1ZSAx NjogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODow NTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAtIFJT UyBoYXNoPTB4MTBiZjk2ZDAgLSBSU1MgcXVldWU9MHgxMCAtIGh3IHB0eXBlOiBMMl9FVEhFUiBM M19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04g SU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0g bDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0 eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNl aXZlIHF1ZXVlPTB4MTANCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1NfSEFTSCBQS1RfUlhfTDRfQ0tT VU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9X TiANCnBvcnQgMC9xdWV1ZSAzOiByZWNlaXZlZCAxIHBhY2tldHMNCiAgc3JjPTAwOjAwOjAwOjAw OjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlwZT0weDA4MDAgLSBsZW5ndGg9NTYy IC0gbmJfc2Vncz0xIC0gUlNTIGhhc2g9MHg0ZjM5ZjQzIC0gUlNTIHF1ZXVlPTB4MyAtIGh3IHB0 eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQ VjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNf SVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBw YWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZO SSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4Mw0KICBvbF9mbGFnczogUEtUX1JYX1JTU19IQVNI IFBLVF9SWF9MNF9DS1NVTV9HT09EIFBLVF9SWF9JUF9DS1NVTV9HT09EIFBLVF9SWF9PVVRFUl9M NF9DS1NVTV9VTktOT1dOIA0KcG9ydCAwL3F1ZXVlIDE2OiByZWNlaXZlZCAxIHBhY2tldHMNCiAg c3JjPTAwOjAwOjAwOjAwOjAwOjAwIC0gZHN0PTY4OjA1OkNBOkJCOjI2OkUwIC0gdHlwZT0weDA4 MDAgLSBsZW5ndGg9NTYyIC0gbmJfc2Vncz0xIC0gUlNTIGhhc2g9MHgxMGJmOTZkMCAtIFJTUyBx dWV1ZT0weDEwIC0gaHcgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjRfRVhUX1VOS05PV04gVFVOTkVM X0dUUFUgSU5ORVJfTDNfSVBWNF9FWFRfVU5LTk9XTiBJTk5FUl9MNF9OT05GUkFHICAtIHN3IHB0 eXBlOiBMMl9FVEhFUiBMM19JUFY0IEw0X1VEUCAgLSBsMl9sZW49MTQgLSBsM19sZW49MjAgLSBs NF9sZW49OCAtIFZYTEFOIHBhY2tldDogcGFja2V0IHR5cGUgPTMyOTEzLCBEZXN0aW5hdGlvbiBV RFAgcG9ydCA9MjE1MiwgVk5JID0gNDY2MCAtIFJlY2VpdmUgcXVldWU9MHgxMA0KICBvbF9mbGFn czogUEtUX1JYX1JTU19IQVNIIFBLVF9SWF9MNF9DS1NVTV9HT09EIFBLVF9SWF9JUF9DS1NVTV9H T09EIFBLVF9SWF9PVVRFUl9MNF9DS1NVTV9VTktOT1dOIA0KCjIwLzEwLzIwMjAgMTQ6MDg6NDgg ICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRSU1NHVFBVOiBoYXNoX2luZm9zOiBbKCcweDEwYmY5NmQw JywgJzB4MTAnKSwgKCcweDRmMzlmNDMnLCAnMHgzJyksICgnMHgxMGJmOTZkMCcsICcweDEwJyld CjIwLzEwLzIwMjAgMTQ6MDg6NDggICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRSU1NHVFBVOiAtLS0t LS0tLS0tc2VuZCBwYWNrZXQtLS0tLS0tLS0tLS0tCjIwLzEwLzIwMjAgMTQ6MDg6NDkgICAgICAg ICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiBwb3J0IDAvcXVldWUgMTY6IHJlY2VpdmVkIDEgcGFj a2V0cw0KICBzcmM9MDA6MDA6MDA6MDA6MDA6MDAgLSBkc3Q9Njg6MDU6Q0E6QkI6MjY6RTAgLSB0 eXBlPTB4MDgwMCAtIGxlbmd0aD01NjIgLSBuYl9zZWdzPTEgLSBSU1MgaGFzaD0weDEwYmY5NmQw IC0gUlNTIHF1ZXVlPTB4MTAgLSBodyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNF9FWFRfVU5LTk9X TiBUVU5ORUxfR1RQVSBJTk5FUl9MM19JUFY0X0VYVF9VTktOT1dOIElOTkVSX0w0X05PTkZSQUcg IC0gc3cgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjQgTDRfVURQICAtIGwyX2xlbj0xNCAtIGwzX2xl bj0yMCAtIGw0X2xlbj04IC0gVlhMQU4gcGFja2V0OiBwYWNrZXQgdHlwZSA9MzI5MTMsIERlc3Rp bmF0aW9uIFVEUCBwb3J0ID0yMTUyLCBWTkkgPSA0NjYwIC0gUmVjZWl2ZSBxdWV1ZT0weDEwDQog IG9sX2ZsYWdzOiBQS1RfUlhfUlNTX0hBU0ggUEtUX1JYX0w0X0NLU1VNX0dPT0QgUEtUX1JYX0lQ X0NLU1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VOS05PV04gDQpwb3J0IDAvcXVldWUg MzogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODow NTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAtIFJT UyBoYXNoPTB4NGYzOWY0MyAtIFJTUyBxdWV1ZT0weDMgLSBodyBwdHlwZTogTDJfRVRIRVIgTDNf SVBWNF9FWFRfVU5LTk9XTiBUVU5ORUxfR1RQVSBJTk5FUl9MM19JUFY0X0VYVF9VTktOT1dOIElO TkVSX0w0X05PTkZSQUcgIC0gc3cgcHR5cGU6IEwyX0VUSEVSIEwzX0lQVjQgTDRfVURQICAtIGwy X2xlbj0xNCAtIGwzX2xlbj0yMCAtIGw0X2xlbj04IC0gVlhMQU4gcGFja2V0OiBwYWNrZXQgdHlw ZSA9MzI5MTMsIERlc3RpbmF0aW9uIFVEUCBwb3J0ID0yMTUyLCBWTkkgPSA0NjYwIC0gUmVjZWl2 ZSBxdWV1ZT0weDMNCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1NfSEFTSCBQS1RfUlhfTDRfQ0tTVU1f R09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9XTiAN CnBvcnQgMC9xdWV1ZSAxNjogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDow MDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU2MiAt IG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4MTBiZjk2ZDAgLSBSU1MgcXVldWU9MHgxMCAtIGh3IHB0 eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQ VjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNf SVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBw YWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZO SSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MTANCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1NfSEFT SCBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJf TDRfQ0tTVU1fVU5LTk9XTiANCgoyMC8xMC8yMDIwIDE0OjA4OjQ5ICAgICAgICAgVGVzdENWTEFk dmFuY2VkUlNTR1RQVTogaGFzaF9pbmZvczogWygnMHgxMGJmOTZkMCcsICcweDEwJyksICgnMHg0 ZjM5ZjQzJywgJzB4MycpLCAoJzB4MTBiZjk2ZDAnLCAnMHgxMCcpXQoyMC8xMC8yMDIwIDE0OjA4 OjQ5ICAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4My42MjogZmxvdyBkZXN0cm95IDAgcnVsZSAx CjIwLzEwLzIwMjAgMTQ6MDg6NTAgICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiANDQpG bG93IHJ1bGUgIzEgZGVzdHJveWVkDQp0ZXN0cG1kPiAKMjAvMTAvMjAyMCAxNDowODo1MCAgICAg ICAgIFRlc3RDVkxBZHZhbmNlZFJTU0dUUFU6IC0tLS0tLS0tLS1zZW5kIHBhY2tldC0tLS0tLS0t LS0tLS0KMjAvMTAvMjAyMCAxNDowODo1MiAgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuNjI6 IHBvcnQgMC9xdWV1ZSAzMjogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDow MDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU1MCAt IG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4N2FiMmNjYTAgLSBSU1MgcXVldWU9MHgyMCAtIGh3IHB0 eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQ VjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNf SVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBw YWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZO SSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MjANCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1NfSEFT SCBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJf TDRfQ0tTVU1fVU5LTk9XTiANCnBvcnQgMC9xdWV1ZSAzMjogcmVjZWl2ZWQgMSBwYWNrZXRzDQog IHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgw ODAwIC0gbGVuZ3RoPTU1MCAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNoPTB4N2FiMmNjYTAgLSBSU1Mg cXVldWU9MHgyMCAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5F TF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBw dHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0g bDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24g VURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MjANCiAgb2xfZmxh Z3M6IFBLVF9SWF9SU1NfSEFTSCBQS1RfUlhfTDRfQ0tTVU1fR09PRCBQS1RfUlhfSVBfQ0tTVU1f R09PRCBQS1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9XTiANCnBvcnQgMC9xdWV1ZSA1MTogcmVj ZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpC QjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU1MCAtIG5iX3NlZ3M9MSAtIFJTUyBoYXNo PTB4NmVmZWM1MzMgLSBSU1MgcXVldWU9MHgzMyAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0 X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJf TDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVu PTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0z MjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1 ZXVlPTB4MzMNCiAgb2xfZmxhZ3M6IFBLVF9SWF9SU1NfSEFTSCBQS1RfUlhfTDRfQ0tTVU1fR09P RCBQS1RfUlhfSVBfQ0tTVU1fR09PRCBQS1RfUlhfT1VURVJfTDRfQ0tTVU1fVU5LTk9XTiANCgoy MC8xMC8yMDIwIDE0OjA4OjUyICAgICAgICAgVGVzdENWTEFkdmFuY2VkUlNTR1RQVTogaGFzaF9p bmZvczogWygnMHg3YWIyY2NhMCcsICcweDIwJyksICgnMHg3YWIyY2NhMCcsICcweDIwJyksICgn MHg2ZWZlYzUzMycsICcweDMzJyldCjIwLzEwLzIwMjAgMTQ6MDg6NTIgICAgICAgICBUZXN0Q1ZM QWR2YW5jZWRSU1NHVFBVOiAtLS0tLS0tLS0tc2VuZCBwYWNrZXQtLS0tLS0tLS0tLS0tCjIwLzEw LzIwMjAgMTQ6MDg6NTMgICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiBwb3J0IDAvcXVl dWUgMDogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02 ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAt IGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVS X0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRI RVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBW WExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIx NTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MA0KICBvbF9mbGFnczogUEtUX1JYX0w0 X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VO S05PV04gDQpwb3J0IDAvcXVldWUgMDogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDow MDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3Ro PTU2MiAtIG5iX3NlZ3M9MSAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dO IFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAg LSBzdyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVu PTIwIC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGlu YXRpb24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MA0KICBv bF9mbGFnczogUEtUX1JYX0w0X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JY X09VVEVSX0w0X0NLU1VNX1VOS05PV04gDQpwb3J0IDAvcXVldWUgMDogcmVjZWl2ZWQgMSBwYWNr ZXRzDQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5 cGU9MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAtIGh3IHB0eXBlOiBMMl9FVEhFUiBM M19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04g SU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0g bDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0 eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNl aXZlIHF1ZXVlPTB4MA0KICBvbF9mbGFnczogUEtUX1JYX0w0X0NLU1VNX0dPT0QgUEtUX1JYX0lQ X0NLU1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VOS05PV04gDQpwb3J0IDAvcXVldWUg MDogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODow NTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAtIGh3 IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wz X0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIg TDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExB TiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIs IFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MA0KICBvbF9mbGFnczogUEtUX1JYX0w0X0NL U1VNX0dPT0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VOS05P V04gDQpwb3J0IDAvcXVldWUgMDogcmVjZWl2ZWQgMSBwYWNrZXRzDQogIHNyYz0wMDowMDowMDow MDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9MHgwODAwIC0gbGVuZ3RoPTU2 MiAtIG5iX3NlZ3M9MSAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19JUFY0X0VYVF9VTktOT1dOIFRV Tk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5ORVJfTDRfTk9ORlJBRyAgLSBz dyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJfbGVuPTE0IC0gbDNfbGVuPTIw IC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBlID0zMjkxMywgRGVzdGluYXRp b24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZlIHF1ZXVlPTB4MA0KICBvbF9m bGFnczogUEtUX1JYX0w0X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NLU1VNX0dPT0QgUEtUX1JYX09V VEVSX0w0X0NLU1VNX1VOS05PV04gDQpwb3J0IDAvcXVldWUgMDogcmVjZWl2ZWQgMSBwYWNrZXRz DQogIHNyYz0wMDowMDowMDowMDowMDowMCAtIGRzdD02ODowNTpDQTpCQjoyNjpFMCAtIHR5cGU9 MHgwODAwIC0gbGVuZ3RoPTU2MiAtIG5iX3NlZ3M9MSAtIGh3IHB0eXBlOiBMMl9FVEhFUiBMM19J UFY0X0VYVF9VTktOT1dOIFRVTk5FTF9HVFBVIElOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04gSU5O RVJfTDRfTk9ORlJBRyAgLSBzdyBwdHlwZTogTDJfRVRIRVIgTDNfSVBWNCBMNF9VRFAgIC0gbDJf bGVuPTE0IC0gbDNfbGVuPTIwIC0gbDRfbGVuPTggLSBWWExBTiBwYWNrZXQ6IHBhY2tldCB0eXBl ID0zMjkxMywgRGVzdGluYXRpb24gVURQIHBvcnQgPTIxNTIsIFZOSSA9IDQ2NjAgLSBSZWNlaXZl IHF1ZXVlPTB4MA0KICBvbF9mbGFnczogUEtUX1JYX0w0X0NLU1VNX0dPT0QgUEtUX1JYX0lQX0NL U1VNX0dPT0QgUEtUX1JYX09VVEVSX0w0X0NLU1VNX1VOS05PV04gDQoKMjAvMTAvMjAyMCAxNDow ODo1MyAgICAgICAgIFRlc3RDVkxBZHZhbmNlZFJTU0dUUFU6IGhhc2hfaW5mb3M6IFtdCjIwLzEw LzIwMjAgMTQ6MDg6NTMgICAgICAgICBUZXN0Q1ZMQWR2YW5jZWRSU1NHVFBVOiBUZXN0IENhc2Ug dGVzdF9pcHY0X2d0cHVfaXB2NF9pcHY0X2d0cHVfZWhfaXB2NCBSZXN1bHQgUEFTU0VEOgoyMC8x MC8yMDIwIDE0OjA4OjUzICAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4My42MjogZmxvdyBmbHVz aCAwCjIwLzEwLzIwMjAgMTQ6MDg6NTQgICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjYyOiAN DQp0ZXN0cG1kPiAKMjAvMTAvMjAyMCAxNDowODo1NCAgICAgICAgICAgICAgZHV0LjEwLjI0MC4x ODMuNjI6IGNsZWFyIHBvcnQgc3RhdHMgYWxsCjIwLzEwLzIwMjAgMTQ6MDg6NTUgICAgICAgICAg ICAgIGR1dC4xMC4yNDAuMTgzLjYyOiANDQoNCiAgTklDIHN0YXRpc3RpY3MgZm9yIHBvcnQgMCBj bGVhcmVkDQp0ZXN0cG1kPiAKMjAvMTAvMjAyMCAxNDowODo1NSAgICAgICAgICAgICAgZHV0LjEw LjI0MC4xODMuNjI6IHN0b3AKMjAvMTAvMjAyMCAxNDowODo1NSAgICAgICAgICAgICAgZHV0LjEw LjI0MC4xODMuNjI6IA0NClRlbGxpbmcgY29yZXMgdG8gLi4uDQpXYWl0aW5nIGZvciBsY29yZXMg dG8gZmluaXNoLi4uDQoNCiAgLS0tLS0tLSBGb3J3YXJkIFN0YXRzIGZvciBSWCBQb3J0PSAwL1F1 ZXVlPSAwIC0+IFRYIFBvcnQ9IDAvUXVldWU9IDAgLS0tLS0tLQ0KICBSWC1wYWNrZXRzOiA5ICAg ICAgICAgICAgICBUWC1wYWNrZXRzOiAwICAgICAgICAgICAgICBUWC1kcm9wcGVkOiAwICAgICAg ICAgICAgIA0KDQogIC0tLS0tLS0gRm9yd2FyZCBTdGF0cyBmb3IgUlggUG9ydD0gMC9RdWV1ZT0g MyAtPiBUWCBQb3J0PSAwL1F1ZXVlPSAzIC0tLS0tLS0NCiAgUlgtcGFja2V0czogNiAgICAgICAg ICAgICAgVFgtcGFja2V0czogMCAgICAgICAgICAgICAgVFgtZHJvcHBlZDogMCAgICAgICAgICAg ICANCg0KICAtLS0tLS0tIEZvcndhcmQgU3RhdHMgZm9yIFJYIFBvcnQ9IDAvUXVldWU9IDYgLT4g VFggUG9ydD0gMC9RdWV1ZT0gNiAtLS0tLS0tDQogIFJYLXBhY2tldHM6IDIgICAgICAgICAgICAg IFRYLXBhY2tldHM6IDAgICAgICAgICAgICAgIFRYLWRyb3BwZWQ6IDAgICAgICAgICAgICAgDQoN CiAgLS0tLS0tLSBGb3J3YXJkIFN0YXRzIGZvciBSWCBQb3J0PSAwL1F1ZXVlPTE2IC0+IFRYIFBv cnQ9IDAvUXVldWU9MTYgLS0tLS0tLQ0KICBSWC1wYWNrZXRzOiAxMiAgICAgICAgICAgICBUWC1w YWNrZXRzOiAwICAgICAgICAgICAgICBUWC1kcm9wcGVkOiAwICAgICAgICAgICAgIA0KDQogIC0t LS0tLS0gRm9yd2FyZCBTdGF0cyBmb3IgUlggUG9ydD0gMC9RdWV1ZT0yMSAtPiBUWCBQb3J0PSAw L1F1ZXVlPTIxIC0tLS0tLS0NCiAgUlgtcGFja2V0czogMiAgICAgICAgICAgICAgVFgtcGFja2V0 czogMCAgICAgICAgICAgICAgVFgtZHJvcHBlZDogMCAgICAgICAgICAgICANCg0KICAtLS0tLS0t IEZvcndhcmQgU3RhdHMgZm9yIFJYIFBvcnQ9IDAvUXVldWU9MzIgLT4gVFggUG9ydD0gMC9RdWV1 ZT0zMiAtLS0tLS0tDQogIFJYLXBhY2tldHM6IDggICAgICAgICAgICAgIFRYLXBhY2tldHM6IDAg ICAgICAgICAgICAgIFRYLWRyb3BwZWQ6IDAgICAgICAgICAgICAgDQoNCiAgLS0tLS0tLSBGb3J3 YXJkIFN0YXRzIGZvciBSWCBQb3J0PSAwL1F1ZXVlPTQ3IC0+IFRYIFBvcnQ9IDAvUXVldWU9NDcg LS0tLS0tLQ0KICBSWC1wYWNrZXRzOiAyICAgICAgICAgICAgICBUWC1wYWNrZXRzOiAwICAgICAg ICAgICAgICBUWC1kcm9wcGVkOiAwICAgICAgICAgICAgIA0KDQogIC0tLS0tLS0gRm9yd2FyZCBT dGF0cyBmb3IgUlggUG9ydD0gMC9RdWV1ZT01MSAtPiBUWCBQb3J0PSAwL1F1ZXVlPTUxIC0tLS0t LS0NCiAgUlgtcGFja2V0czogNCAgICAgICAgICAgICAgVFgtcGFja2V0czogMCAgICAgICAgICAg ICAgVFgtZHJvcHBlZDogMCAgICAgICAgICAgICANCg0KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t IEZvcndhcmQgc3RhdGlzdGljcyBmb3IgcG9ydCAwICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQog IFJYLXBhY2tldHM6IDAgICAgICAgICAgICAgIFJYLWRyb3BwZWQ6IDAgICAgICAgICAgICAgUlgt dG90YWw6IDANCiAgVFgtcGFja2V0czogMCAgICAgICAgICAgICAgVFgtZHJvcHBlZDogMCAgICAg ICAgICAgICBUWC10b3RhbDogMA0KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgKysrKysrKysr KysrKysrIEFjY3VtdWxhdGVkIGZvcndhcmQgc3RhdGlzdGljcyBmb3IgYWxsIHBvcnRzKysrKysr KysrKysrKysrDQogIFJYLXBhY2tldHM6IDAgICAgICAgICAgICAgIFJYLWRyb3BwZWQ6IDAgICAg ICAgICAgICAgUlgtdG90YWw6IDANCiAgVFgtcGFja2V0czogMCAgICAgICAgICAgICAgVFgtZHJv cHBlZDogMCAgICAgICAgICAgICBUWC10b3RhbDogMA0KICArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQoN CkRvbmUuCjIwLzEwLzIwMjAgMTQ6MDg6NTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHRz OiAKVEVTVCBTVUlURSBFTkRFRDogVGVzdENWTEFkdmFuY2VkUlNTR1RQVQo= --_002_CY4PR1101MB2263FB2B7C8F9CCAF111AB74F41F0CY4PR1101MB2263_--