From patchwork Sat Sep 29 20:07:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ori Kam X-Patchwork-Id: 45693 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B78621B130; Sat, 29 Sep 2018 22:08:07 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20048.outbound.protection.outlook.com [40.107.2.48]) by dpdk.org (Postfix) with ESMTP id 6B5C81B125 for ; Sat, 29 Sep 2018 22:08:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AWqLSlsRsbKmT4AFjobS5zMKbMnnLQnVFjhMUIKN5tA=; b=CiATtZ/jgN1Z2L4dr7RXt4ywNL2H4xNoWRTX96erh71ES0gqdojdaGLS+ps6I7C4swNNG7tZL/osNMkXtzLGySweXmJOruw470niVSh5dyX2v/aaqTKcbybur3Txo6R3+2BVgwG1NVdr5RLr95p1LokjKShnOKY9P7+hjoF4+sE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=orika@mellanox.com; Received: from mellanox.com (37.142.13.130) by AM4PR05MB3427.eurprd05.prod.outlook.com (2603:10a6:205:6::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1185.23; Sat, 29 Sep 2018 20:08:00 +0000 From: Ori Kam To: wenzhuo.lu@intel.com, jingjing.wu@intel.com, bernard.iremonger@intel.com, arybchenko@solarflare.com, ferruh.yigit@intel.com, stephen@networkplumber.org, adrien.mazarguil@6wind.com Cc: dev@dpdk.org, dekelp@mellanox.com, thomas@monjalon.net, nelio.laranjeiro@6wind.com, yskoh@mellanox.com, orika@mellanox.com, shahafs@mellanox.com Date: Sat, 29 Sep 2018 20:07:19 +0000 Message-Id: <1538251641-91511-2-git-send-email-orika@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1538251641-91511-1-git-send-email-orika@mellanox.com> References: <1538251641-91511-1-git-send-email-orika@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: HE1PR05CA0381.eurprd05.prod.outlook.com (2603:10a6:7:94::40) To AM4PR05MB3427.eurprd05.prod.outlook.com (2603:10a6:205:6::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 15115536-0fff-4159-6ff2-08d626474339 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534165)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM4PR05MB3427; X-Microsoft-Exchange-Diagnostics: 1; AM4PR05MB3427; 3:r1Ko1qEgzGgCT/SmVTvbf3rD6B8hcJUacGh6QsyGKm7+jOUDpwQitrcEYAwf9GyvFPgOYEcChLAk665sOUU6BCKIEmcsh/s6pjf8myBtk9KbNYaRr3uqlp3oRPSj611W/Le06DxgvFGltgkOuq3ycoSUCQalHbvqcC1DD1WZR2O4MF/K/WIuKXFzK0pQPJXR14d3decj+VOow+dGTIE82snTDNj3KWvFOFWkKSwqF659dBXOgvJqn2UCxXIHcw1X; 25:fZbvem/hNcH7jmFaqzFAdaBjhqeYC93/E8U4//J/DAXf703h8radliick6pMd/jaKBNaAXE8nuUba1eldPx/hscRzK9uZxjoQH2yY4hItFSQVmX7iRVmXZPlPwMAkNh7aK65uUA2uc1wzM97t0RnDmdJzsh1NSd/E4kCmFlcHgbOeCAWRwOJ82u+o0i+hwXdddfI1erhnJRDNvpJHaNqgAmTJu0YnzCDeymjZWiiwbiKkEDAnZY9p3vC/6qqPdK3/EKD8PNn8seH/RS9L8M+lODvfAGfUFf/pJUmGaNCyWtOACll492GbIvkoNeD01cqRq2dkGHSTlfbrCMVs1fCtg==; 31:vPZ3HMsRiPjRntgnUX058zfNCJsIUlGVfw1h90VfZUyjGfgwmM0LsJ+LtINGnzEPK5MgQjNBdYYL8Hszc3zetlQHNZxRBW/LktwYyVpJOa8qByg/VHk30kpFTCuu+6KI7ZvFaRvwblEBHbVCl5UFsX4M20dDYkB5sZWduNwhOglkCPXDwk30K/tTB0TTd8j4XyxT9AUMb0uMbrRiItSPv1juMF7YC8Fb4Y6fokz4hzw= X-MS-TrafficTypeDiagnostic: AM4PR05MB3427: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM4PR05MB3427; 20:Gyd3yDnYCqr/+tiuIjSYIaS9yfPSEO2Tcmelfn5lohFWDkVausV4sDZr4bl0NDSNfGny+uGLAPKgjlE9zE7Nt9ETQWJ2fx872KnjYDmiwMNTxKsYVUJVSapZxroFzv4EEWeYItfch5X+eZ/mqQZosDfsK4EF69xtKCLJTrOADrpi9Z6rmOzmMtSWZn3hdRwV3Pblq/pKM67K9vYwd8rQUqjlhSDCwp9SZTHyBObMUMMsietjG7fT/ChnTGfhgV4RX/dc6r4Sv8FBVFMo2b36NXbL/BJc5PnqzCeGJpmOmkIgoztx9UX4Hn+Rx8pDHdfy2C081abA2Sl+0LNjfCvObKqMTuKUphd3WlzGXKNZfX9HFvdCuoHYfiHU5gjsVDJH062JAp2gK7rmMVT5PV6NM4gbPT+mLjqiHARdJmfd8lTBvgbnM/nBmeHDlYA/wc4zR58tzBWpAvJ4b6xE8GMu5OMqL77B1nkoyY2H3VZ+UDNG2AZmF8lvZcSxZBfKxtNg; 4:XhzLkDzUCCkAjo0he60grn4PEs4NmhYNTd/VvCl4Vf7E1paOnG0NnMi6bZO5EYWYqyolxcKqUz6T7/JzUXZF3edBRHo8jwP1rTbAt9oPZaqsasCW8j2IB4zLalSABcEVGEL7TEiKw9iCgm5o8EQOVUgstCbSRdSc0ENMjdBblxqVlvAbz/JXStLRh/AT2mMSG+4/Vx9UFuH0WtmHLvArf4KfSNw4awoRmXDHRv/l4AgXCtUQEiE+OGcCzEE75RR3BFant3ZsW7AKSa5/167pe2FBUJ8Lj2p+rLRgDcsONrcpVJBTr4uviQWf/HiYViiX X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231355)(944501410)(52105095)(10201501046)(3002001)(93006095)(93001095)(6055026)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(201708071742011)(7699051); SRVR:AM4PR05MB3427; BCL:0; PCL:0; RULEID:; SRVR:AM4PR05MB3427; X-Forefront-PRVS: 0810818DA0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(346002)(396003)(376002)(39860400002)(136003)(199004)(189003)(53936002)(7696005)(105586002)(106356001)(4326008)(107886003)(2906002)(68736007)(478600001)(66066001)(47776003)(21086003)(7416002)(36756003)(48376002)(50466002)(8886007)(33026002)(316002)(4720700003)(6666003)(6116002)(3846002)(97736004)(5660300001)(7736002)(305945005)(55016002)(25786009)(69596002)(16586007)(476003)(2616005)(956004)(16526019)(446003)(186003)(14444005)(81156014)(51416003)(11346002)(81166006)(386003)(52116002)(486006)(4006002)(76176011)(8676002)(86362001)(34290500001)(26005)(8936002)(50226002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3427; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM4PR05MB3427; 23:Gug3+NEpQHOOK23uLjwHFSIpibhKlAP+mWHDMSPPR?= aYaYzo+fS3HDI+iiuDjh00JDy73oL8caPtFStFICpNIkQ+2Jt7nfH4E2G6SA25KqrXXthR1+xZnV2e0DDZ8VFITzUnXQwN+gCVSfGDREq/eLlhn/2fw+FjB4Xw5te2gAXDfBCY4/GyuY6lZEBDB7SDOFbJVtFd2onukDbCX9/CNRrVQVEw3ONPURztpYyvPmUYq4pcjLWqUvldLvaMvM59p+eMuuQ1QJ84wiRGcJa17LrMP95Xim+eBbJT/SBUonGCbU6mnWaExSjdKu2M3QS8EL49cq2Cw2K/oMLSEcaO2BKCMfl7c8O7+esTqdvdNNmP1bwKGOzfmO2kSi91L+ieNsiV91L9vzwfGdiBeJKglFS0Wv3v0VqXibH1tSRWjeXjLCVkbrU1Njxcu19T2wk2f2+8qsG+DKMI/29r9ZOrDXi+ygPws3PagRBosX33sd1rvf7F5gt7DGFxzuLGQnVFVisRmho2Lb2Wyv7wDWQP/UvP6LOv9Mji9puXBh0XYiCDTlV0C8fqIY11ZtC5j4enkGirOKpmALT6BphDQyx1HMvDTgtRZovk19yuhlqOkPRgzpAxZpEo6QlFXyuZh3P3Yoabkqc2HQaCHYmUjCfiZeEeKQjkAnX0RTDBxPQ2C1ALaMSCLajvGZfYG3+qVciHxFxQfR/0eSXxyTg8XXQfrUR/NJNmzTsBzlOIkZ6hoOJQoOet0kZsnFFVtQssMk5OxgmqojVDks6r1W+XPFERmf6jQLYOSuMhgLRWjGGXjPomEVSGpe1y4lO2nQPWtuTSO6wr0JdubNU4InQAlt1SFD8DCysB8aMFPTS+KXialAJ96E5YqHKvnwAR4yEH3LD4A9M5fiJ0FoMuDztoZID0GvNO15BLAo14nE039BhFe//l7kdFc0dv3tvG2b8qXsUIjzuB/XzfvHsFsjnetah3j/96SC4UayPZsp0/p/ClmgOytT5thhxtDHTM4AyFx1kx3rsRGAkaERYPR8AzdKACpA4fePcfOHiv7pS4jFNZTgKtg8Fs/8wiKb1IRavheygtyIVPggUlpU0hSnxa+dLkNaIkGtLvy08bt1G60ysiPKmFpeeYaMpTRBNY6CIZ8S62ij5vJtbEs/gYJfIbSl33SrHtkvfNmnSYbPWRhR0knJQjXuMhaxCfN39Cq8mqYzoFT28d3I6JmrvLI8wJjRDXz1GO8P0tErnA4mD0G4aJlx5ATYElCSQxdqIIu334dVaXU9v7ctex3x1zXkUGs36nJYuR+qIebZjck4rVje/jf+f9ZAivZmKo6MOkVQrm4fOGY8tH+tdr1YzNmlOq3/puwQw== X-Microsoft-Antispam-Message-Info: vT/t63Alikll7aqjn2jpHJng3VnU/VaGAh/uW6PsHx5eVyo0W2bzNi1LCFGoFuPDDqG17MAZ6QKMTV0pCI3+rSltUQKxKdV5FF2En/Q4+vJChpd7BBPIGfnA/Md3DMXpZIBrmRx/uOLxiGvuuizHZEQyoJIHdeGiXCKBFbxQzv7AqqMgXrbnFapDbvNXYtGjAk0qxk1JsGDLCqCR/aHRV3pgNdZO3Q8BukMqadk6Q3BVXDYsZp+aIcek71R/xls4knDoIl/iyojvopdWwRW6jT5kShQM+xEj1UO9VGDivtqNByMyTkalLRQTB4uqWzIhqZOOQLdHwXTWEoGqcuJCkxrsQAhkw5oxof3EuDAKRS0= X-Microsoft-Exchange-Diagnostics: 1; AM4PR05MB3427; 6:MDFsZyYBi8ZlGkvfsfReCBBg7m+jBdcnOzwpL0IuIB6/k0IvBxEoL8dZBKJZR4DXIqBmg/NgKpPPQBEvtfoJVQGj+9YftxnINtpLYOf4at7nrfSHlEsl9ZS1xkNNCSIRYLmMNetsioSi3pceqmR/UIAH+LyEyTvSlFM5XqOcp5yUlMYLLVWbajxfOaUsh1ffEDVIJldU2hO02uBWsGDSNx6UqxS5EkZuvQ4E3i034L2K5atFSE4vJVQs57EdLUCJqQgAKKv8mAwqm97lhcuvuAk+K76JYK1LPUM/Wf57ohbNXfWlWSS/P34bEtzkxAWHWSgKzXEIUnjoN475sgA4sqejPsSPSE0DbpxS42MTQTqf/dNAQdNM1c3wc5UVcVgwwlhsL/s5MalbRMEHB12KdFv0jhiJEPvQB+ifxTYuiDLzfMWZTaoIgUUHqI+YbtH4lzV/s9JTD42g11HI9Nn/tA==; 5:FjEWI8EfQ1kOQ1415yffRmljDyn3J6afQ7Rm9tFWu2aRgppir3lnqxD2U2g5XJcLjPUNqokyhrw5/OQ9p4CcHRkKzFSkllN75jy5VUzNtRJRCi0DNj0FCUJvtjiWqMhRxBck2XapQlHOAXcBirWPwumOcksT8bmjY8JtJoZaFj8=; 7:zQPkGG8pnDJvjbOcuOf3PmqcgMcoX4s35j199Qz2OoocCaroAAuvSbTh9j2PJEvj99gzGvjF8NY8xpFIannISbj8p8DgjZruslEppcQ/jMqkgPBUHdba4uD7w6Jq6sDP0i7NoOA5hL62/wJ+8T8URQfL9OYGUsjKjZE3NgBdtPt/8IJbJSzgPFKb4J82Jyz+8+cIIMFfVVJPhubQxzXbJoeqYoUi5RGiWXVRB2DXZEypGcxdvHdWaS5irVPAbuWK SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2018 20:08:00.9780 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 15115536-0fff-4159-6ff2-08d626474339 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3427 Subject: [dpdk-dev] [PATCH 1/3] app/testpmd: add MPLSoUDP encapsulation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" MPLSoUDP is an example for L3 tunnel encapsulation. Due to the complex encapsulation of MPLSoUDP flow action and based on the fact testpmd does not allocate memory, this patch adds a new command in testpmd to initialise a global structure containing the necessary information to make the outer layer of the packet. This same global structure will then be used by the flow command line in testpmd when the action mplsoudp_encap will be parsed, at this point, the conversion into such action becomes trivial. This global structure is only used for the encap action. Signed-off-by: Ori Kam --- app/test-pmd/cmdline.c | 175 ++++++++++++++++++++++++++++ app/test-pmd/cmdline_flow.c | 123 +++++++++++++++++++ app/test-pmd/testpmd.h | 17 +++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 50 ++++++++ 4 files changed, 365 insertions(+) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 589121d..10d9489 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -15186,6 +15186,179 @@ static void cmd_set_nvgre_parsed(void *parsed_result, }, }; +/** Set MPLSoUDP encapsulation details */ +struct cmd_set_mplsoudp_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t mplsoudp; + cmdline_fixed_string_t pos_token; + cmdline_fixed_string_t ip_version; + uint32_t vlan_present:1; + uint32_t label; + uint16_t udp_src; + uint16_t udp_dst; + cmdline_ipaddr_t ip_src; + cmdline_ipaddr_t ip_dst; + uint16_t tci; + struct ether_addr eth_src; + struct ether_addr eth_dst; +}; + +cmdline_parse_token_string_t cmd_set_mplsoudp_set = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, set, "set"); +cmdline_parse_token_string_t cmd_set_mplsoudp_mplsoudp = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, mplsoudp, "mplsoudp"); +cmdline_parse_token_string_t cmd_set_mplsoudp_mplsoudp_with_vlan = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, mplsoudp, + "mplsoudp-with-vlan"); +cmdline_parse_token_string_t cmd_set_mplsoudp_ip_version = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, pos_token, + "ip-version"); +cmdline_parse_token_string_t cmd_set_mplsoudp_ip_version_value = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, ip_version, + "ipv4#ipv6"); +cmdline_parse_token_string_t cmd_set_mplsoudp_label = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, pos_token, + "label"); +cmdline_parse_token_num_t cmd_set_mplsoudp_label_value = + TOKEN_NUM_INITIALIZER(struct cmd_set_mplsoudp_result, label, UINT32); +cmdline_parse_token_string_t cmd_set_mplsoudp_udp_src = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, pos_token, + "udp-src"); +cmdline_parse_token_num_t cmd_set_mplsoudp_udp_src_value = + TOKEN_NUM_INITIALIZER(struct cmd_set_mplsoudp_result, udp_src, UINT16); +cmdline_parse_token_string_t cmd_set_mplsoudp_udp_dst = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, pos_token, + "udp-dst"); +cmdline_parse_token_num_t cmd_set_mplsoudp_udp_dst_value = + TOKEN_NUM_INITIALIZER(struct cmd_set_mplsoudp_result, udp_dst, UINT16); +cmdline_parse_token_string_t cmd_set_mplsoudp_ip_src = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, pos_token, + "ip-src"); +cmdline_parse_token_ipaddr_t cmd_set_mplsoudp_ip_src_value = + TOKEN_IPADDR_INITIALIZER(struct cmd_set_mplsoudp_result, ip_src); +cmdline_parse_token_string_t cmd_set_mplsoudp_ip_dst = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, pos_token, + "ip-dst"); +cmdline_parse_token_ipaddr_t cmd_set_mplsoudp_ip_dst_value = + TOKEN_IPADDR_INITIALIZER(struct cmd_set_mplsoudp_result, ip_dst); +cmdline_parse_token_string_t cmd_set_mplsoudp_vlan = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, pos_token, + "vlan-tci"); +cmdline_parse_token_num_t cmd_set_mplsoudp_vlan_value = + TOKEN_NUM_INITIALIZER(struct cmd_set_mplsoudp_result, tci, UINT16); +cmdline_parse_token_string_t cmd_set_mplsoudp_eth_src = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, pos_token, + "eth-src"); +cmdline_parse_token_etheraddr_t cmd_set_mplsoudp_eth_src_value = + TOKEN_ETHERADDR_INITIALIZER(struct cmd_set_mplsoudp_result, eth_src); +cmdline_parse_token_string_t cmd_set_mplsoudp_eth_dst = + TOKEN_STRING_INITIALIZER(struct cmd_set_mplsoudp_result, pos_token, + "eth-dst"); +cmdline_parse_token_etheraddr_t cmd_set_mplsoudp_eth_dst_value = + TOKEN_ETHERADDR_INITIALIZER(struct cmd_set_mplsoudp_result, eth_dst); + +static void cmd_set_mplsoudp_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_set_mplsoudp_result *res = parsed_result; + union { + uint32_t mplsoudp_label; + uint8_t label[3]; + } id = { + .mplsoudp_label = + rte_cpu_to_be_32(res->label) & RTE_BE32(0x00ffffff), + }; + + if (strcmp(res->mplsoudp, "mplsoudp") == 0) + mplsoudp_encap_conf.select_vlan = 0; + else if (strcmp(res->mplsoudp, "mplsoudp-with-vlan") == 0) + mplsoudp_encap_conf.select_vlan = 1; + if (strcmp(res->ip_version, "ipv4") == 0) + mplsoudp_encap_conf.select_ipv4 = 1; + else if (strcmp(res->ip_version, "ipv6") == 0) + mplsoudp_encap_conf.select_ipv4 = 0; + else + return; + rte_memcpy(mplsoudp_encap_conf.label, &id.label[1], 3); + mplsoudp_encap_conf.udp_src = rte_cpu_to_be_16(res->udp_src); + mplsoudp_encap_conf.udp_dst = rte_cpu_to_be_16(res->udp_dst); + if (mplsoudp_encap_conf.select_ipv4) { + IPV4_ADDR_TO_UINT(res->ip_src, mplsoudp_encap_conf.ipv4_src); + IPV4_ADDR_TO_UINT(res->ip_dst, mplsoudp_encap_conf.ipv4_dst); + } else { + IPV6_ADDR_TO_ARRAY(res->ip_src, mplsoudp_encap_conf.ipv6_src); + IPV6_ADDR_TO_ARRAY(res->ip_dst, mplsoudp_encap_conf.ipv6_dst); + } + if (mplsoudp_encap_conf.select_vlan) + mplsoudp_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci); + rte_memcpy(mplsoudp_encap_conf.eth_src, res->eth_src.addr_bytes, + ETHER_ADDR_LEN); + rte_memcpy(mplsoudp_encap_conf.eth_dst, res->eth_dst.addr_bytes, + ETHER_ADDR_LEN); +} + +cmdline_parse_inst_t cmd_set_mplsoudp = { + .f = cmd_set_mplsoudp_parsed, + .data = NULL, + .help_str = "set mplsoudp ip-version ipv4|ipv6 label