From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 75B1F1B192 for ; Mon, 14 Jan 2019 11:08:15 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Jan 2019 02:08:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,477,1539673200"; d="scan'208";a="117981386" Received: from irsmsx151.ger.corp.intel.com ([163.33.192.59]) by orsmga003.jf.intel.com with ESMTP; 14 Jan 2019 02:08:12 -0800 Received: from irsmsx108.ger.corp.intel.com ([169.254.11.205]) by IRSMSX151.ger.corp.intel.com ([169.254.4.172]) with mapi id 14.03.0415.000; Mon, 14 Jan 2019 10:08:11 +0000 From: "Iremonger, Bernard" To: Shahaf Shuler , Slava Ovsiienko , "shahaf@mellanox.com" , "Yigit, Ferruh" , "Lu, Wenzhuo" , "Wu, Jingjing" , "orika@mellanox.com" , "adrien.mazarguil@6wind.com" CC: "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v2] app/testpmd: add tos and ttl field to vxlan encapsulation Thread-Index: AQHUq03zefwPrAWGL0eqEmYe38yIi6WuR0kAgABDWkA= Date: Mon, 14 Jan 2019 10:08:11 +0000 Message-ID: <8CEF83825BEC744B83065625E567D7C260D4E3F5@IRSMSX108.ger.corp.intel.com> References: <1546109501-24865-1-git-send-email-viacheslavo@mellanox.com> <1547390409-3530-1-git-send-email-viacheslavo@mellanox.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOWNmYzdmM2UtYWYzOS00YWI3LTllZmEtNzBiMmQ1YmI2NjI0IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiUDZaZ1JBRU1RaWRLWjdlSm01a2d0NUNLMmNkUU9qcXdQNWhLZlJRRzhsazl2ejh0cE5VcE4rS2lTazhGS3RvOSJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2] app/testpmd: add tos and ttl field to vxlan 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: , X-List-Received-Date: Mon, 14 Jan 2019 10:08:16 -0000 +Ori, Adrien=20 > -----Original Message----- > From: Shahaf Shuler [mailto:shahafs@mellanox.com] > Sent: Monday, January 14, 2019 6:04 AM > To: Slava Ovsiienko ; shahaf@mellanox.com; > Yigit, Ferruh ; Lu, Wenzhuo ; > Wu, Jingjing ; Iremonger, Bernard > > Cc: dev@dpdk.org > Subject: RE: [dpdk-dev] [PATCH v2] app/testpmd: add tos and ttl field to = vxlan > encapsulation >=20 > Adding some relevant folks. >=20 > Any comments or concerns on this patch? >=20 > Sunday, January 13, 2019 4:40 PM, Viacheslav Ovsiienko: > > Subject: [dpdk-dev] [PATCH v2] app/testpmd: add tos and ttl field to > > vxlan encapsulation > > > > The new testpmd set vxlan-tos-ttl command is added. It allows to > > specify tos and tll fields for encapsulation IP header. > > > > IPv4 VXLAN outer header: > > > > testpmd> set vxlan-tos-ttl ip-version ipv4 vni 4 udp-src 4 > > udp-dst 4 ip-tos 0 ip-ttl 255 ip-src 127.0.0.1 > > ip-dst 128.0.0.1 eth-src 11:11:11:11:11:11 > > eth-dst 22:22:22:22:22:22 > > > > IPv6 VXLAN outer header: > > testpmd> set vxlan-tos-ttl ip-version ipv6 vni 4 udp-src 4 > > udp-dst 4 ip-tos 0 ip-ttl 255 ::1 ip-dst ::2222 > > eth-src 11:11:11:11:11:11 eth-dst > > 22:22:22:22:22:22 > > > > Note: ip-ttl parameter corresponds the nop_limits field for IPv6. > > > > Signed-off-by: Viacheslav Ovsiienko > > --- > > > > v2: > > The patchset is splitted into two parts, one is related to mlx5 PMD, = and > > another is update for testpmd, these parts are going to be merged int= o > > different next branches. > > > > v1: > > Original patchset: > > https://emea01.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fpa= t > > ches.dpdk.org%2Fproject%2Fdpdk%2Flist%2F%3Fseries%3D2974&data > > =3D02%7C01%7Cshahafs%40mellanox.com%7C8d911e89ae384e23a1f908d6796 > > > 50b0f%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636829872232 > 5 > > 87143&sdata=3DEMLbTbGYyxdYdEdZ4IFsvaKoDRD4oQrmWThJD9Xqsr8%3 > > D&reserved=3D0 > > > > app/test-pmd/cmdline.c | 63 > > +++++++++++++++++++++++++++++ > > app/test-pmd/cmdline_flow.c | 32 +++++++++++++++ > > app/test-pmd/testpmd.c | 3 ++ > > app/test-pmd/testpmd.h | 3 ++ > > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 16 ++++++++ > > 5 files changed, 117 insertions(+) > > > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index > > 3ddc3e0..9e9e898 100644 > > --- a/app/test-pmd/cmdline.c > > +++ b/app/test-pmd/cmdline.c > > @@ -794,6 +794,12 @@ static void cmd_help_long_parsed(void > > *parsed_result, > > " eth-dst (eth-dst)\n" > > " Configure the VXLAN encapsulation for > > flows.\n\n" > > > > + "vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src" > > + " (udp-src) udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip- > > ttl)" > > + " ip-src (ip-src) ip-dst (ip-dst) eth-src (eth-src)" > > + " eth-dst (eth-dst)\n" > > + " Configure the VXLAN encapsulation for > > flows.\n\n" > > + > > "nvgre ip-version (ipv4|ipv6) tni (tni) ip-src" > > " (ip-src) ip-dst (ip-dst) eth-src (eth-src) eth-dst" > > " (eth-dst)\n" > > @@ -15034,6 +15040,8 @@ struct cmd_set_vxlan_result { > > cmdline_ipaddr_t ip_src; > > cmdline_ipaddr_t ip_dst; > > uint16_t tci; > > + uint8_t tos; > > + uint8_t ttl; > > struct ether_addr eth_src; > > struct ether_addr eth_dst; > > }; > > @@ -15042,6 +15050,9 @@ struct cmd_set_vxlan_result { > > TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, set, "set"); > > cmdline_parse_token_string_t cmd_set_vxlan_vxlan =3D > > TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, vxlan, > > "vxlan"); > > +cmdline_parse_token_string_t cmd_set_vxlan_vxlan_tos_ttl =3D > > + TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, vxlan, > > + "vxlan-tos-ttl"); > > cmdline_parse_token_string_t cmd_set_vxlan_vxlan_with_vlan =3D > > TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, vxlan, > > "vxlan-with-vlan"); > > @@ -15066,6 +15077,16 @@ struct cmd_set_vxlan_result { > > "udp-dst"); > > cmdline_parse_token_num_t cmd_set_vxlan_udp_dst_value =3D > > TOKEN_NUM_INITIALIZER(struct cmd_set_vxlan_result, udp_dst, > UINT16); > > +cmdline_parse_token_string_t cmd_set_vxlan_ip_tos =3D > > + TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, > > pos_token, > > + "ip-tos"); > > +cmdline_parse_token_num_t cmd_set_vxlan_ip_tos_value =3D > > + TOKEN_NUM_INITIALIZER(struct cmd_set_vxlan_result, tos, UINT8); > > +cmdline_parse_token_string_t cmd_set_vxlan_ip_ttl =3D > > + TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, > > pos_token, > > + "ip-ttl"); > > +cmdline_parse_token_num_t cmd_set_vxlan_ip_ttl_value =3D > > + TOKEN_NUM_INITIALIZER(struct cmd_set_vxlan_result, ttl, UINT8); > > cmdline_parse_token_string_t cmd_set_vxlan_ip_src =3D > > TOKEN_STRING_INITIALIZER(struct cmd_set_vxlan_result, pos_token, > > "ip-src"); > > @@ -15104,10 +15125,15 @@ static void cmd_set_vxlan_parsed(void > > *parsed_result, > > .vxlan_id =3D rte_cpu_to_be_32(res->vni) & RTE_BE32(0x00ffffff), > > }; > > > > + vxlan_encap_conf.select_tos =3D 0; > > if (strcmp(res->vxlan, "vxlan") =3D=3D 0) > > vxlan_encap_conf.select_vlan =3D 0; > > else if (strcmp(res->vxlan, "vxlan-with-vlan") =3D=3D 0) > > vxlan_encap_conf.select_vlan =3D 1; > > + else if (strcmp(res->vxlan, "vxlan-tos-ttl") =3D=3D 0) { > > + vxlan_encap_conf.select_vlan =3D 0; > > + vxlan_encap_conf.select_tos =3D 1; > > + } > > if (strcmp(res->ip_version, "ipv4") =3D=3D 0) > > vxlan_encap_conf.select_ipv4 =3D 1; > > else if (strcmp(res->ip_version, "ipv6") =3D=3D 0) @@ -15117,6 +15143= ,8 > > @@ static void cmd_set_vxlan_parsed(void *parsed_result, > > rte_memcpy(vxlan_encap_conf.vni, &id.vni[1], 3); > > vxlan_encap_conf.udp_src =3D rte_cpu_to_be_16(res->udp_src); > > vxlan_encap_conf.udp_dst =3D rte_cpu_to_be_16(res->udp_dst); > > + vxlan_encap_conf.ip_tos =3D res->tos; > > + vxlan_encap_conf.ip_ttl =3D res->ttl; > > if (vxlan_encap_conf.select_ipv4) { > > IPV4_ADDR_TO_UINT(res->ip_src, > > vxlan_encap_conf.ipv4_src); > > IPV4_ADDR_TO_UINT(res->ip_dst, > > vxlan_encap_conf.ipv4_dst); @@ -15161,6 +15189,40 @@ static void > > cmd_set_vxlan_parsed(void *parsed_result, > > }, > > }; > > > > +cmdline_parse_inst_t cmd_set_vxlan_tos_ttl =3D { > > + .f =3D cmd_set_vxlan_parsed, > > + .data =3D NULL, > > + .help_str =3D "set vxlan-tos-ttl ip-version ipv4|ipv6 vni udp-s= rc" > > + " udp-dst ip-tos ip-ttl " > > + " ip-src ip-dst eth-src " > > + " eth-dst ", > > + .tokens =3D { > > + (void *)&cmd_set_vxlan_set, > > + (void *)&cmd_set_vxlan_vxlan_tos_ttl, > > + (void *)&cmd_set_vxlan_ip_version, > > + (void *)&cmd_set_vxlan_ip_version_value, > > + (void *)&cmd_set_vxlan_vni, > > + (void *)&cmd_set_vxlan_vni_value, > > + (void *)&cmd_set_vxlan_udp_src, > > + (void *)&cmd_set_vxlan_udp_src_value, > > + (void *)&cmd_set_vxlan_udp_dst, > > + (void *)&cmd_set_vxlan_udp_dst_value, > > + (void *)&cmd_set_vxlan_ip_tos, > > + (void *)&cmd_set_vxlan_ip_tos_value, > > + (void *)&cmd_set_vxlan_ip_ttl, > > + (void *)&cmd_set_vxlan_ip_ttl_value, > > + (void *)&cmd_set_vxlan_ip_src, > > + (void *)&cmd_set_vxlan_ip_src_value, > > + (void *)&cmd_set_vxlan_ip_dst, > > + (void *)&cmd_set_vxlan_ip_dst_value, > > + (void *)&cmd_set_vxlan_eth_src, > > + (void *)&cmd_set_vxlan_eth_src_value, > > + (void *)&cmd_set_vxlan_eth_dst, > > + (void *)&cmd_set_vxlan_eth_dst_value, > > + NULL, > > + }, > > +}; > > + > > cmdline_parse_inst_t cmd_set_vxlan_with_vlan =3D { > > .f =3D cmd_set_vxlan_parsed, > > .data =3D NULL, > > @@ -18696,6 +18758,7 @@ struct cmd_show_tx_metadata_result { > > (cmdline_parse_inst_t *)&cmd_set_port_tm_hierarchy_default, > > #endif > > (cmdline_parse_inst_t *)&cmd_set_vxlan, > > + (cmdline_parse_inst_t *)&cmd_set_vxlan_tos_ttl, > > (cmdline_parse_inst_t *)&cmd_set_vxlan_with_vlan, > > (cmdline_parse_inst_t *)&cmd_set_nvgre, > > (cmdline_parse_inst_t *)&cmd_set_nvgre_with_vlan, diff --git > > a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index > > 659908f..97ecc8a 100644 > > --- a/app/test-pmd/cmdline_flow.c > > +++ b/app/test-pmd/cmdline_flow.c > > @@ -3501,6 +3501,38 @@ static int comp_vc_action_rss_queue(struct > > context *, const struct token *, > > if (!vxlan_encap_conf.select_vlan) > > action_vxlan_encap_data->items[1].type =3D > > RTE_FLOW_ITEM_TYPE_VOID; > > + if (vxlan_encap_conf.select_tos) { > > + if (vxlan_encap_conf.select_ipv4) { > > + static struct rte_flow_item_ipv4 ipv4_mask_tos; > > + > > + memcpy(&ipv4_mask_tos, > > &rte_flow_item_ipv4_mask, > > + sizeof(ipv4_mask_tos)); > > + ipv4_mask_tos.hdr.type_of_service =3D 0xff; > > + ipv4_mask_tos.hdr.time_to_live =3D 0xff; > > + action_vxlan_encap_data- > > >item_ipv4.hdr.type_of_service =3D > > + vxlan_encap_conf.ip_tos; > > + action_vxlan_encap_data- > > >item_ipv4.hdr.time_to_live =3D > > + vxlan_encap_conf.ip_ttl; > > + action_vxlan_encap_data->items[2].mask =3D > > + &ipv4_mask_tos; > > + } else { > > + static struct rte_flow_item_ipv6 ipv6_mask_tos; > > + > > + memcpy(&ipv6_mask_tos, > > &rte_flow_item_ipv6_mask, > > + sizeof(ipv6_mask_tos)); > > + ipv6_mask_tos.hdr.vtc_flow |=3D > > + RTE_BE32(0xfful << IPV6_HDR_TC_SHIFT); > > + ipv6_mask_tos.hdr.hop_limits =3D 0xff; > > + action_vxlan_encap_data->item_ipv6.hdr.vtc_flow > > |=3D > > + rte_cpu_to_be_32 > > + ((uint32_t)vxlan_encap_conf.ip_tos > > << > > + IPV6_HDR_TC_SHIFT); > > + action_vxlan_encap_data->item_ipv6.hdr.hop_limits > > =3D > > + vxlan_encap_conf.ip_ttl; > > + action_vxlan_encap_data->items[2].mask =3D > > + &ipv6_mask_tos; > > + } > > + } > > memcpy(action_vxlan_encap_data->item_vxlan.vni, > > vxlan_encap_conf.vni, > > RTE_DIM(vxlan_encap_conf.vni)); > > action->conf =3D &action_vxlan_encap_data->conf; diff --git > > a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index > > 15a9488..2638d06 100644 > > --- a/app/test-pmd/testpmd.c > > +++ b/app/test-pmd/testpmd.c > > @@ -469,6 +469,7 @@ struct rte_fdir_conf fdir_conf =3D { struct > > vxlan_encap_conf vxlan_encap_conf =3D { > > .select_ipv4 =3D 1, > > .select_vlan =3D 0, > > + .select_tos =3D 0, > > .vni =3D "\x00\x00\x00", > > .udp_src =3D 0, > > .udp_dst =3D RTE_BE16(4789), > > @@ -479,6 +480,8 @@ struct vxlan_encap_conf vxlan_encap_conf =3D { > > .ipv6_dst =3D "\x00\x00\x00\x00\x00\x00\x00\x00" > > "\x00\x00\x00\x00\x00\x00\x11\x11", > > .vlan_tci =3D 0, > > + .ip_tos =3D 0, > > + .ip_ttl =3D 255, > > .eth_src =3D "\x00\x00\x00\x00\x00\x00", > > .eth_dst =3D "\xff\xff\xff\xff\xff\xff", }; diff --git a/app/test- > > pmd/testpmd.h b/app/test-pmd/testpmd.h index 3ff11e6..559f2aa 100644 > > --- a/app/test-pmd/testpmd.h > > +++ b/app/test-pmd/testpmd.h > > @@ -488,6 +488,7 @@ struct gso_status { struct vxlan_encap_conf { > > uint32_t select_ipv4:1; > > uint32_t select_vlan:1; > > + uint32_t select_tos:1; > > uint8_t vni[3]; > > rte_be16_t udp_src; > > rte_be16_t udp_dst; > > @@ -496,6 +497,8 @@ struct vxlan_encap_conf { > > uint8_t ipv6_src[16]; > > uint8_t ipv6_dst[16]; > > rte_be16_t vlan_tci; > > + uint8_t ip_tos; > > + uint8_t ip_ttl; > > uint8_t eth_src[ETHER_ADDR_LEN]; > > uint8_t eth_dst[ETHER_ADDR_LEN]; > > }; > > diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > > index 854af2d..0291480 100644 > > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > > @@ -1583,6 +1583,10 @@ Configure the outer layer to encapsulate a > > packet inside a VXLAN tunnel:: > > udp-dst (udp-dst) ip-src (ip-src) ip-dst (ip-dst) vlan-tci (vlan-tci)= \ > > eth-src (eth-src) eth-dst (eth-dst) > > > > + set vxlan-tos-ttl ip-version (ipv4|ipv6) vni (vni) udp-src (udp-src) > > + \ udp-dst (udp-dst) ip-tos (ip-tos) ip-ttl (ip-ttl) ip-src (ip-src) > > + \ ip-dst (ip-dst) eth-src (eth-src) eth-dst (eth-dst) > > + > > Those command will set an internal configuration inside testpmd, any > > following flow rule using the action vxlan_encap will use the last > > configuration set. > > To have a different encapsulation header, one of those commands must > > be called @@ -4241,6 +4245,12 @@ IPv4 VXLAN outer header:: > > testpmd> flow create 0 ingress pattern end actions vxlan_encap / > > queue index 0 / end > > > > + testpmd> set vxlan-tos-ttl ip-version ipv4 vni 4 udp-src 4 udp-dst 4 > > + testpmd> ip-tos 0 > > + ip-ttl 255 ip-src 127.0.0.1 ip-dst 128.0.0.1 eth-src 11:11:11= :11:11:11 > > + eth-dst 22:22:22:22:22:22 > > + testpmd> flow create 0 ingress pattern end actions vxlan_encap / > > + queue index 0 / end > > + > > IPv6 VXLAN outer header:: > > > > testpmd> set vxlan ip-version ipv6 vni 4 udp-src 4 udp-dst 4 ip-src > > ::1 @@ - > > 4254,6 +4264,12 @@ IPv6 VXLAN outer header:: > > testpmd> flow create 0 ingress pattern end actions vxlan_encap / > > queue index 0 / end > > > > + testpmd> set vxlan-tos-ttl ip-version ipv6 vni 4 udp-src 4 udp-dst 4 > > + ip-tos 0 ip-ttl 255 ::1 ip-dst ::2222 eth-src 11:11:11:11:11:= 11 > > + eth-dst 22:22:22:22:22:22 > > + testpmd> flow create 0 ingress pattern end actions vxlan_encap / > > + queue index 0 / end > > + > > Sample NVGRE encapsulation rule > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > > > -- > > 1.8.3.1