vnet: device flow offload infra
[vpp.git] / src / plugins / dpdk / device / init.c
index 17ae826..9d4c0fd 100755 (executable)
@@ -239,24 +239,23 @@ dpdk_lib_init (dpdk_main_t * dm)
                                   | VNET_BUFFER_F_L4_CHECKSUM_COMPUTED);
 
   /* vlib_buffer_t template */
-  vec_validate_aligned (dm->buffer_templates, tm->n_vlib_mains - 1,
+  vec_validate_aligned (dm->per_thread_data, tm->n_vlib_mains - 1,
                        CLIB_CACHE_LINE_BYTES);
   for (i = 0; i < tm->n_vlib_mains; i++)
     {
       vlib_buffer_free_list_t *fl;
-      vlib_buffer_t *bt = vec_elt_at_index (dm->buffer_templates, i);
+      dpdk_per_thread_data_t *ptd = vec_elt_at_index (dm->per_thread_data, i);
       fl = vlib_buffer_get_free_list (vm,
                                      VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
-      vlib_buffer_init_for_free_list (bt, fl);
-      bt->flags = dm->buffer_flags_template;
-      vnet_buffer (bt)->sw_if_index[VLIB_TX] = (u32) ~ 0;
+      vlib_buffer_init_for_free_list (&ptd->buffer_template, fl);
+      ptd->buffer_template.flags = dm->buffer_flags_template;
+      vnet_buffer (&ptd->buffer_template)->sw_if_index[VLIB_TX] = (u32) ~ 0;
     }
 
   for (i = 0; i < nports; i++)
     {
       u8 addr[6];
       u8 vlan_strip = 0;
-      int j;
       struct rte_eth_dev_info dev_info;
       struct rte_eth_link l;
       dpdk_device_config_t *devconf = 0;
@@ -386,6 +385,14 @@ dpdk_lib_init (dpdk_main_t * dm)
            case VNET_DPDK_PMD_IXGBE:
            case VNET_DPDK_PMD_I40E:
              xd->port_type = port_type_from_speed_capa (&dev_info);
+#if 0
+             xd->port_conf.fdir_conf.mode = RTE_FDIR_MODE_PERFECT;
+#endif
+             xd->supported_flow_actions = VNET_FLOW_ACTION_MARK |
+               VNET_FLOW_ACTION_REDIRECT_TO_NODE |
+               VNET_FLOW_ACTION_BUFFER_ADVANCE |
+               VNET_FLOW_ACTION_COUNT | VNET_FLOW_ACTION_DROP;
+
              if (dm->conf->no_tx_checksum_offload == 0)
                {
                  xd->tx_conf.txq_flags &= ~ETH_TXQ_FLAGS_NOXSUMS;
@@ -537,24 +544,6 @@ dpdk_lib_init (dpdk_main_t * dm)
          dq->queue_id = 0;
        }
 
-      vec_validate_aligned (xd->tx_vectors, tm->n_vlib_mains,
-                           CLIB_CACHE_LINE_BYTES);
-      for (j = 0; j < tm->n_vlib_mains; j++)
-       {
-         vec_validate_ha (xd->tx_vectors[j], xd->nb_tx_desc,
-                          sizeof (tx_ring_hdr_t), CLIB_CACHE_LINE_BYTES);
-         vec_reset_length (xd->tx_vectors[j]);
-       }
-
-      vec_validate_aligned (xd->rx_vectors, xd->rx_q_used,
-                           CLIB_CACHE_LINE_BYTES);
-      for (j = 0; j < xd->rx_q_used; j++)
-       {
-         vec_validate_aligned (xd->rx_vectors[j], VLIB_FRAME_SIZE - 1,
-                               CLIB_CACHE_LINE_BYTES);
-         vec_reset_length (xd->rx_vectors[j]);
-       }
-
       /* count the number of descriptors used for this device */
       nb_desc += xd->nb_rx_desc + xd->nb_tx_desc * xd->tx_q_used;
 
@@ -621,7 +610,7 @@ dpdk_lib_init (dpdk_main_t * dm)
       xd->port_conf.rxmode.max_rx_pkt_len = max_rx_frame;
 
       sw = vnet_get_hw_sw_interface (dm->vnet_main, xd->hw_if_index);
-      xd->vlib_sw_if_index = sw->sw_if_index;
+      xd->sw_if_index = sw->sw_if_index;
       vnet_hw_interface_set_input_node (dm->vnet_main, xd->hw_if_index,
                                        dpdk_input_node.index);
 
@@ -1398,7 +1387,7 @@ dpdk_update_link_state (dpdk_device_t * xd, f64 now)
        u8 new_link_state;
       } *ed;
       ed = ELOG_DATA (&vm->elog_main, e);
-      ed->sw_if_index = xd->vlib_sw_if_index;
+      ed->sw_if_index = xd->sw_if_index;
       ed->admin_up = (xd->flags & DPDK_DEVICE_FLAG_ADMIN_UP) != 0;
       ed->old_link_state = (u8)
        vnet_hw_interface_is_link_up (vnm, xd->hw_if_index);
@@ -1494,7 +1483,7 @@ dpdk_update_link_state (dpdk_device_t * xd, f64 now)
            u32 flags;
          } *ed;
          ed = ELOG_DATA (&vm->elog_main, e);
-         ed->sw_if_index = xd->vlib_sw_if_index;
+         ed->sw_if_index = xd->sw_if_index;
          ed->flags = hw_flags;
        }
       vnet_hw_interface_set_flags (vnm, xd->hw_if_index, hw_flags);
@@ -1607,8 +1596,7 @@ dpdk_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
                          (bhi->bond_info, sdev->hw_if_index, 1);
                        /* Set MACs and slave link flags on slave interface */
                        shi = vnet_get_hw_interface (vnm, sdev->hw_if_index);
-                       ssi = vnet_get_sw_interface
-                         (vnm, sdev->vlib_sw_if_index);
+                       ssi = vnet_get_sw_interface (vnm, sdev->sw_if_index);
                        sei = pool_elt_at_index
                          (em->interfaces, shi->hw_instance);
                        shi->bond_info = VNET_HW_INTERFACE_BOND_INFO_SLAVE;