On 11/16/2020 7:55 AM, Xiaoyu Min wrote:
From: Xiaoyu Min <jack...@nvidia.com>

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 <jack...@nvidia.com>

<...>

@@ -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;


'vxlan_size' seems used both to copy rt_flow_item [1] and to header [2]. Also ''vxlan_size' is used to copy the 'vxlan_spec'.

Since both "struct rte_flow_item_vxlan" & "struct rte_vxlan_hdr" size is same, this should work fine, but I guess it may be broken if sizes of those two structures changes in the future.

[1]
memcpy(&vxlan_spec, item->spec, vxlan_size);

[2]
ulp_encap_buffer_copy(buff, (const uint8_t *)&vxlan_spec,
        vxlan_size, ULP_BUFFER_ALIGN_8_BYTE);

Reply via email to