dpdk: rename port_id to *_instance_num
[vpp.git] / src / plugins / dpdk / device / init.c
old mode 100755 (executable)
new mode 100644 (file)
index 9ed3efd..7156e69
@@ -37,6 +37,8 @@
 
 #include <dpdk/device/dpdk_priv.h>
 
+#define ETHER_MAX_LEN   1518  /**< Maximum frame len, including CRC. */
+
 dpdk_main_t dpdk_main;
 dpdk_config_main_t dpdk_config_main;
 
@@ -205,8 +207,8 @@ dpdk_lib_init (dpdk_main_t * dm)
   uword *p_hqos;
 
   u32 next_hqos_cpu = 0;
-  u8 af_packet_port_id = 0;
-  u8 bond_ether_port_id = 0;
+  u8 af_packet_instance_num = 0;
+  u8 bond_ether_instance_num = 0;
   last_pci_addr.as_u32 = ~0;
 
   dm->hqos_cpu_first_index = 0;
@@ -256,13 +258,13 @@ dpdk_lib_init (dpdk_main_t * dm)
     {
       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;
       vlib_pci_addr_t pci_addr;
       uword *p = 0;
 
+      rte_eth_link_get_nowait (i, &l);
       rte_eth_dev_info_get (i, &dev_info);
       if (dev_info.pci_dev)    /* bonded interface has no pci info */
        {
@@ -386,6 +388,11 @@ 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);
+             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;
@@ -426,7 +433,6 @@ dpdk_lib_init (dpdk_main_t * dm)
 
              /* Cisco VIC */
            case VNET_DPDK_PMD_ENIC:
-             rte_eth_link_get_nowait (i, &l);
              if (l.link_speed == 40000)
                xd->port_type = VNET_DPDK_PORT_TYPE_ETH_40G;
              else
@@ -454,12 +460,12 @@ dpdk_lib_init (dpdk_main_t * dm)
 
            case VNET_DPDK_PMD_AF_PACKET:
              xd->port_type = VNET_DPDK_PORT_TYPE_AF_PACKET;
-             xd->port_id = af_packet_port_id++;
+             xd->af_packet_instance_num = af_packet_instance_num++;
              break;
 
            case VNET_DPDK_PMD_BOND:
              xd->port_type = VNET_DPDK_PORT_TYPE_ETH_BOND;
-             xd->port_id = bond_ether_port_id++;
+             xd->bond_instance_num = bond_ether_instance_num++;
              break;
 
            case VNET_DPDK_PMD_VIRTIO_USER:
@@ -470,6 +476,10 @@ dpdk_lib_init (dpdk_main_t * dm)
              xd->port_type = VNET_DPDK_PORT_TYPE_VHOST_ETHER;
              break;
 
+           case VNET_DPDK_PMD_LIOVF_ETHER:
+             xd->port_type = VNET_DPDK_PORT_TYPE_ETH_VF;
+             break;
+
            default:
              xd->port_type = VNET_DPDK_PORT_TYPE_UNKNOWN;
            }
@@ -537,15 +547,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]);
-       }
-
       /* count the number of descriptors used for this device */
       nb_desc += xd->nb_rx_desc + xd->nb_tx_desc * xd->tx_q_used;
 
@@ -641,7 +642,7 @@ dpdk_lib_init (dpdk_main_t * dm)
        * ethernet_register_interface() above*/
       if (hi)
        {
-         hi->max_packet_bytes = max_rx_frame;
+         hi->max_packet_bytes = mtu;
          hi->max_supported_packet_bytes = max_rx_frame;
        }
 
@@ -698,6 +699,9 @@ dpdk_lib_init (dpdk_main_t * dm)
       else
        clib_warning ("hi NULL");
 
+      if (dm->conf->no_multi_seg)
+       mtu = mtu > ETHER_MAX_LEN ? ETHER_MAX_LEN : mtu;
+
       rte_eth_dev_set_mtu (xd->device_index, mtu);
     }
 
@@ -773,6 +777,9 @@ dpdk_bind_devices_to_uio (dpdk_config_main_t * conf)
     /* Amazen Elastic Network Adapter */
     else if (d->vendor_id == 0x1d0f && d->device_id >= 0xec20 && d->device_id <= 0xec21)
       ;
+    /* Cavium Network Adapter */
+    else if (d->vendor_id == 0x177d && d->device_id == 0x9712)
+      ;
     /* Mellanox  */
     else if (d->vendor_id == 0x15b3 && d->device_id >= 0x1013 && d->device_id <= 0x101a)
       {
@@ -1549,7 +1556,7 @@ dpdk_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
 
                    /* Set MAC of bounded interface to that of 1st slave link */
                    dpdk_log_info ("Set MAC for bond port %d BondEthernet%d",
-                                  i, xd->port_id);
+                                  i, xd->bond_instance_num);
                    rv = rte_eth_bond_mac_address_set
                      (i, (struct ether_addr *) addr);
                    if (rv)