devices: fix issue of per_interface_next_index 07/21607/8
authorMichael Yu <michael.a.yu@nokia-sbell.com>
Thu, 29 Aug 2019 16:50:16 +0000 (00:50 +0800)
committerDamjan Marion <dmarion@me.com>
Fri, 30 Aug 2019 13:18:24 +0000 (13:18 +0000)
Per interface, next hop graph node can be customized
with vnet_hw_interface_rx_redirect_to_node function,
but it doesn't work well for af-packet type interface.

In current implementation, with function
af_packet_set_interface_next_node invoked next hop graph
node index can be set to apif->per_interface_next_index,
but it's not set to next0 properly for packet processing
in af_packet_device_input_fn.

Type: fix

Signed-off-by: Michael Yu <michael.a.yu@nokia-sbell.com>
Change-Id: I8e132ddd1c3c01b6f476de78546d4a9389b3ff87
Signed-off-by: Michael Yu <michael.a.yu@nokia-sbell.com>
src/vnet/devices/af_packet/node.c

index 3c91c98..85f3e01 100644 (file)
@@ -195,9 +195,6 @@ af_packet_device_input_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
   u32 n_buffer_bytes = vlib_buffer_get_default_data_size (vm);
   u32 min_bufs = apif->rx_req->tp_frame_size / n_buffer_bytes;
 
-  if (apif->per_interface_next_index != ~0)
-    next_index = apif->per_interface_next_index;
-
   n_free_bufs = vec_len (apm->rx_buffers[thread_index]);
   if (PREDICT_FALSE (n_free_bufs < VLIB_FRAME_SIZE))
     {
@@ -302,6 +299,10 @@ af_packet_device_input_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
          else
            {
              next0 = VNET_DEVICE_INPUT_NEXT_ETHERNET_INPUT;
+
+             if (PREDICT_FALSE (apif->per_interface_next_index != ~0))
+               next0 = apif->per_interface_next_index;
+
              /* redirect if feature path enabled */
              vnet_feature_start_device_input_x1 (apif->sw_if_index, &next0,
                                                  first_b0);