net/bnxt: fix VLAN/VXLAN encapsulation header size
authorXiaoyu Min <jackmin@nvidia.com>
Mon, 16 Nov 2020 07:55:16 +0000 (15:55 +0800)
committerThomas Monjalon <thomas@monjalon.net>
Sun, 22 Nov 2020 16:07:25 +0000 (17:07 +0100)
The rte_flow_item_eth and rte_flow_item_vlan items are refined.
The structs do not exactly represent the packet bits captured on the
wire anymore so should only copy real header instead of the whole struct.

Replace the rte_flow_item_* with the existing corresponding rte_*_hdr.

Fixes: 09315fc83861 ("ethdev: add VLAN attributes to ethernet and VLAN items")

Signed-off-by: Xiaoyu Min <jackmin@nvidia.com>
Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
drivers/net/bnxt/tf_ulp/ulp_rte_parser.c

index a54c55c..823eeb2 100644 (file)
@@ -3,6 +3,7 @@
  * All rights reserved.
  */
 
+#include <rte_vxlan.h>
 #include "bnxt.h"
 #include "ulp_template_db_enum.h"
 #include "ulp_template_struct.h"
@@ -1548,7 +1549,7 @@ ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item,
                buff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG];
                ulp_encap_buffer_copy(buff,
                                      item->spec,
-                                     sizeof(struct rte_flow_item_vlan),
+                                     sizeof(struct rte_vlan_hdr),
                                      ULP_BUFFER_ALIGN_8_BYTE);
 
                if (!ulp_rte_item_skip_void(&item, 1))
@@ -1559,15 +1560,15 @@ ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item,
        if (item->type == RTE_FLOW_ITEM_TYPE_VLAN) {
                vlan_num++;
                memcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG +
-                      sizeof(struct rte_flow_item_vlan)],
+                      sizeof(struct rte_vlan_hdr)],
                       item->spec,
-                      sizeof(struct rte_flow_item_vlan));
+                      sizeof(struct rte_vlan_hdr));
                if (!ulp_rte_item_skip_void(&item, 1))
                        return BNXT_TF_RC_ERROR;
        }
        /* Update the vlan count and size of more than one */
        if (vlan_num) {
-               vlan_size = vlan_num * sizeof(struct rte_flow_item_vlan);
+               vlan_size = vlan_num * sizeof(struct rte_vlan_hdr);
                vlan_num = tfp_cpu_to_be_32(vlan_num);
                memcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_NUM],
                       &vlan_num,
@@ -1726,7 +1727,7 @@ ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item,
                BNXT_TF_DBG(ERR, "vxlan encap does not have vni\n");
                return BNXT_TF_RC_ERROR;
        }
-       vxlan_size = sizeof(struct rte_flow_item_vxlan);
+       vxlan_size = sizeof(struct rte_vxlan_hdr);
        /* copy the vxlan details */
        memcpy(&vxlan_spec, item->spec, vxlan_size);
        vxlan_spec.flags = 0x08;