Hi Zhang,

> -----Original Message-----
> From: Zhang, Yuying <yuying.zh...@intel.com>
> Sent: Tuesday, August 22, 2023 4:13 AM
> 
> From: Yuying Zhang <yuying.zh...@intel.com>
> 
> Refine vxlan encap content of all protocol headers.
> 
> Fixes: 1960be7d32f8 ("app/testpmd: add VXLAN encap/decap")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Yuying Zhang <yuying.zh...@intel.com>
> ---
>  app/test-pmd/cmdline_flow.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index 95c0a19beb..a488864e2b 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -8523,7 +8523,7 @@ parse_setup_vxlan_encap_data(struct
> action_vxlan_encap_data *action_vxlan_encap_
>                               .type = RTE_FLOW_ITEM_TYPE_END,
>                       },
>               },
> -             .item_eth.hdr.ether_type = 0,
> +             .item_eth.hdr.ether_type =
> rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4),
>               .item_vlan = {
>                       .hdr.vlan_tci = vxlan_encap_conf.vlan_tci,
>                       .hdr.eth_proto = 0,
> @@ -8531,24 +8531,32 @@ parse_setup_vxlan_encap_data(struct
> action_vxlan_encap_data *action_vxlan_encap_
>               .item_ipv4.hdr = {
>                       .src_addr = vxlan_encap_conf.ipv4_src,
>                       .dst_addr = vxlan_encap_conf.ipv4_dst,
> +                     .version_ihl = RTE_IPV4_VHL_DEF,
> +                     .next_proto_id = IPPROTO_UDP,
> +                     .time_to_live = IPDEFTTL,

You can use the following command, right?
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>

> +                     .hdr_checksum = rte_cpu_to_be_16(1),

This checksum should be calculated by HW so why set it?

>               },
>               .item_udp.hdr = {
>                       .src_port = vxlan_encap_conf.udp_src,
>                       .dst_port = vxlan_encap_conf.udp_dst,
> +                     .dgram_cksum = RTE_BE16(0x01),

This should be calculated by HW or set to 0

>               },
> -             .item_vxlan.hdr.flags = 0,
> +             .item_vxlan.hdr.flags = 0x08,
>       };
>       memcpy(action_vxlan_encap_data-
> >item_eth.hdr.dst_addr.addr_bytes,
>              vxlan_encap_conf.eth_dst, RTE_ETHER_ADDR_LEN);
>       memcpy(action_vxlan_encap_data->item_eth.hdr.src_addr.addr_bytes,
>              vxlan_encap_conf.eth_src, RTE_ETHER_ADDR_LEN);
>       if (!vxlan_encap_conf.select_ipv4) {
> +             action_vxlan_encap_data->item_eth.type =
> RTE_BE16(RTE_ETHER_TYPE_IPV6);
>               memcpy(&action_vxlan_encap_data->item_ipv6.hdr.src_addr,
>                      &vxlan_encap_conf.ipv6_src,
>                      sizeof(vxlan_encap_conf.ipv6_src));
>               memcpy(&action_vxlan_encap_data->item_ipv6.hdr.dst_addr,
>                      &vxlan_encap_conf.ipv6_dst,
>                      sizeof(vxlan_encap_conf.ipv6_dst));
> +             action_vxlan_encap_data->item_ipv6.hdr.proto =
> IPPROTO_UDP;
> +             action_vxlan_encap_data->item_ipv6.hdr.hop_limits =
> IPDEFTTL;
>               action_vxlan_encap_data->items[2] = (struct rte_flow_item){
>                       .type = RTE_FLOW_ITEM_TYPE_IPV6,
>                       .spec = &action_vxlan_encap_data->item_ipv6,
> --
> 2.25.1


Best,
Ori

Reply via email to