vxlan: fix vxlan hw offload issue 81/23781/3
authorChenmin Sun <chenmin.sun@intel.com>
Wed, 4 Dec 2019 17:41:35 +0000 (01:41 +0800)
committerJohn Lo <loj@cisco.com>
Thu, 5 Dec 2019 13:19:31 +0000 (13:19 +0000)
Type: fix

Since Vxlan hw offload jumps the ethernet-input node, so needs to
adjust the data offset accordingly

In original code, the current_data is 0 when arriving vxlan-flow-input
node(due to no graph node before it, except the dpdk-input), so this
code block cannot find the correct vxlan header:
enum
  { payload_offset = sizeof (ip4_vxlan_header_t) };
vlib_buffer_advance (b0, payload_offset);
see code in src/vnet/vxlan/decap.c, function vxlan4_flow_input_node

This patch fixes this issue

Signed-off-by: Chenmin Sun <chenmin.sun@intel.com>
Change-Id: Iab4af7a7dc3b69a117a4c9ea1c59662669a6438c

src/vnet/vxlan/vxlan.c

index c274cdb..7deb362 100644 (file)
@@ -1134,9 +1134,11 @@ vnet_vxlan_add_del_rx_flow (u32 hw_if_index, u32 t_index, int is_add)
          vxlan_main_t *vxm = &vxlan_main;
          vnet_flow_t flow = {
            .actions =
-             VNET_FLOW_ACTION_REDIRECT_TO_NODE | VNET_FLOW_ACTION_MARK,
+             VNET_FLOW_ACTION_REDIRECT_TO_NODE | VNET_FLOW_ACTION_MARK |
+             VNET_FLOW_ACTION_BUFFER_ADVANCE,
            .mark_flow_id = t->dev_instance + vxm->flow_id_start,
            .redirect_node_index = vxlan4_flow_input_node.index,
+           .buffer_advance = sizeof (ethernet_header_t),
            .type = VNET_FLOW_TYPE_IP4_VXLAN,
            .ip4_vxlan = {
                          .src_addr = t->dst.ip4,