dpdk: change netvsc device port type
[vpp.git] / src / plugins / dpdk / device / init.c
index c994416..3eb510d 100644 (file)
@@ -24,6 +24,7 @@
 #include <vnet/ethernet/ethernet.h>
 #include <dpdk/buffer.h>
 #include <dpdk/device/dpdk.h>
+#include <dpdk/cryptodev/cryptodev.h>
 #include <vlib/pci/pci.h>
 #include <vlib/vmbus/vmbus.h>
 
@@ -258,7 +259,6 @@ dpdk_lib_init (dpdk_main_t * dm)
       int vlan_off;
       struct rte_eth_dev_info dev_info;
       struct rte_pci_device *pci_dev;
-      struct rte_eth_link l;
       dpdk_portid_t next_port_id;
       dpdk_device_config_t *devconf = 0;
       vlib_pci_addr_t pci_addr;
@@ -267,7 +267,6 @@ dpdk_lib_init (dpdk_main_t * dm)
       if (!rte_eth_dev_is_valid_port(i))
        continue;
 
-      rte_eth_link_get_nowait (i, &l);
       rte_eth_dev_info_get (i, &dev_info);
 
       if (dev_info.device == 0)
@@ -440,7 +439,8 @@ dpdk_lib_init (dpdk_main_t * dm)
                VNET_FLOW_ACTION_REDIRECT_TO_NODE |
                VNET_FLOW_ACTION_REDIRECT_TO_QUEUE |
                VNET_FLOW_ACTION_BUFFER_ADVANCE |
-               VNET_FLOW_ACTION_COUNT | VNET_FLOW_ACTION_DROP;
+               VNET_FLOW_ACTION_COUNT | VNET_FLOW_ACTION_DROP |
+               VNET_FLOW_ACTION_RSS;
 
              if (dm->conf->no_tx_checksum_offload == 0)
                {
@@ -487,12 +487,13 @@ dpdk_lib_init (dpdk_main_t * dm)
 
              if (dm->conf->no_tx_checksum_offload == 0)
                {
-      xd->port_conf.txmode.offloads |= DEV_TX_OFFLOAD_TCP_CKSUM;
-      xd->port_conf.txmode.offloads |= DEV_TX_OFFLOAD_UDP_CKSUM;
+                  xd->port_conf.txmode.offloads |= DEV_TX_OFFLOAD_TCP_CKSUM;
+                  xd->port_conf.txmode.offloads |= DEV_TX_OFFLOAD_UDP_CKSUM;
                  xd->flags |=
                    DPDK_DEVICE_FLAG_TX_OFFLOAD |
                    DPDK_DEVICE_FLAG_INTEL_PHDR_CKSUM;
                }
+              break;
 
            case VNET_DPDK_PMD_THUNDERX:
              xd->port_type = VNET_DPDK_PORT_TYPE_ETH_VF;
@@ -516,9 +517,13 @@ dpdk_lib_init (dpdk_main_t * dm)
 
              /* Cisco VIC */
            case VNET_DPDK_PMD_ENIC:
-             xd->port_type = port_type_from_link_speed (l.link_speed);
-             if (dm->conf->enable_tcp_udp_checksum)
-               dpdk_enable_l4_csum_offload (xd);
+                {
+                  struct rte_eth_link l;
+                  rte_eth_link_get_nowait (i, &l);
+                  xd->port_type = port_type_from_link_speed (l.link_speed);
+                  if (dm->conf->enable_tcp_udp_checksum)
+                    dpdk_enable_l4_csum_offload (xd);
+                }
              break;
 
              /* Intel Red Rock Canyon */
@@ -528,6 +533,7 @@ dpdk_lib_init (dpdk_main_t * dm)
 
              /* virtio */
            case VNET_DPDK_PMD_VIRTIO:
+             xd->port_conf.rxmode.mq_mode = ETH_MQ_RX_NONE;
              xd->port_type = VNET_DPDK_PORT_TYPE_ETH_1G;
              xd->nb_rx_desc = DPDK_NB_RX_DESC_VIRTIO;
              xd->nb_tx_desc = DPDK_NB_TX_DESC_VIRTIO;
@@ -562,7 +568,11 @@ dpdk_lib_init (dpdk_main_t * dm)
              break;
 
            case VNET_DPDK_PMD_NETVSC:
-             xd->port_type = port_type_from_link_speed (l.link_speed);
+                {
+                  struct rte_eth_link l;
+                  rte_eth_link_get_nowait (i, &l);
+                 xd->port_type = VNET_DPDK_PORT_TYPE_ETH_VF;
+                }
              break;
 
            default:
@@ -941,16 +951,21 @@ dpdk_bind_devices_to_uio (dpdk_config_main_t * conf)
     /* Cavium FastlinQ QL41000 Series */
     else if (d->vendor_id == 0x1077 && d->device_id >= 0x8070 && d->device_id <= 0x8090)
       ;
-    /* Mellanox mlx4 */
+    /* Mellanox CX3, CX3VF */
     else if (d->vendor_id == 0x15b3 && d->device_id >= 0x1003 && d->device_id <= 0x1004)
       {
         continue;
       }
-    /* Mellanox mlx5 */
+    /* Mellanox CX4, CX4VF, CX4LX, CX4LXVF, CX5, CX5VF, CX5EX, CX5EXVF */
     else if (d->vendor_id == 0x15b3 && d->device_id >= 0x1013 && d->device_id <= 0x101a)
       {
         continue;
       }
+    /* Mellanox CX6, CX6VF, CX6DX, CX6DXVF */
+    else if (d->vendor_id == 0x15b3 && d->device_id >= 0x101b && d->device_id <= 0x101e)
+      {
+        continue;
+      }
     /* Broadcom NetXtreme S, and E series only */
     else if (d->vendor_id == 0x14e4 &&
        ((d->device_id >= 0x16c0 &&
@@ -1597,6 +1612,10 @@ dpdk_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
 
   error = dpdk_lib_init (dm);
 
+  if (error)
+    clib_error_report (error);
+
+  error = dpdk_cryptodev_init (vm);
   if (error)
     clib_error_report (error);