vppinfra: fix issue when copying 16 bytes with clib_memcpy
[vpp.git] / src / vnet / devices / dpdk / init.c
index 6068946..29423e1 100755 (executable)
@@ -64,8 +64,6 @@ static struct rte_eth_conf port_conf_template = {
 clib_error_t *
 dpdk_port_setup (dpdk_main_t * dm, dpdk_device_t * xd)
 {
-  vlib_main_t *vm = vlib_get_main ();
-  vlib_buffer_main_t *bm = vm->buffer_main;
   int rv;
   int j;
 
@@ -107,7 +105,7 @@ dpdk_port_setup (dpdk_main_t * dm, dpdk_device_t * xd)
 
       rv = rte_eth_rx_queue_setup (xd->device_index, j, xd->nb_rx_desc,
                                   xd->cpu_socket, 0,
-                                  bm->
+                                  dm->
                                   pktmbuf_pools[xd->cpu_socket_id_by_queue
                                                 [j]]);
 
@@ -115,7 +113,7 @@ dpdk_port_setup (dpdk_main_t * dm, dpdk_device_t * xd)
       if (rv < 0)
        rv = rte_eth_rx_queue_setup (xd->device_index, j, xd->nb_rx_desc,
                                     SOCKET_ID_ANY, 0,
-                                    bm->
+                                    dm->
                                     pktmbuf_pools[xd->cpu_socket_id_by_queue
                                                   [j]]);
       if (rv < 0)
@@ -127,6 +125,10 @@ dpdk_port_setup (dpdk_main_t * dm, dpdk_device_t * xd)
     {
       int rv;
       rv = rte_eth_dev_start (xd->device_index);
+      if (!rv && xd->default_mac_address)
+       rv = rte_eth_dev_default_mac_addr_set (xd->device_index,
+                                              (struct ether_addr *)
+                                              xd->default_mac_address);
       if (rv < 0)
        clib_warning ("rte_eth_dev_start %d returned %d",
                      xd->device_index, rv);
@@ -201,6 +203,10 @@ dpdk_flag_change (vnet_main_t * vnm, vnet_hw_interface_t * hi, u32 flags)
          if (xd->flags & DPDK_DEVICE_FLAG_ADMIN_UP)
            {
              int rv = rte_eth_dev_start (xd->device_index);
+             if (!rv && xd->default_mac_address)
+               rv = rte_eth_dev_default_mac_addr_set (xd->device_index,
+                                                      (struct ether_addr *)
+                                                      xd->default_mac_address);
              if (rv < 0)
                clib_warning ("rte_eth_dev_start %d returned %d",
                              xd->device_index, rv);
@@ -271,9 +277,6 @@ dpdk_lib_init (dpdk_main_t * dm)
   vec_validate_aligned (dm->devices_by_cpu, tm->n_vlib_mains - 1,
                        CLIB_CACHE_LINE_BYTES);
 
-  vec_validate_aligned (dm->workers, tm->n_vlib_mains - 1,
-                       CLIB_CACHE_LINE_BYTES);
-
   dm->hqos_cpu_first_index = 0;
   dm->hqos_cpu_count = 0;
 
@@ -290,9 +293,6 @@ dpdk_lib_init (dpdk_main_t * dm)
   vec_validate_aligned (dm->devices_by_hqos_cpu, tm->n_vlib_mains - 1,
                        CLIB_CACHE_LINE_BYTES);
 
-  vec_validate_aligned (dm->hqos_threads, tm->n_vlib_mains - 1,
-                       CLIB_CACHE_LINE_BYTES);
-
   nports = rte_eth_dev_count ();
   if (nports < 1)
     {
@@ -422,11 +422,8 @@ dpdk_lib_init (dpdk_main_t * dm)
 
       /* workaround for drivers not setting driver_name */
       if ((!dev_info.driver_name) && (dev_info.pci_dev))
-#if RTE_VERSION < RTE_VERSION_NUM(16, 11, 0, 0)
-       dev_info.driver_name = dev_info.pci_dev->driver->name;
-#else
        dev_info.driver_name = dev_info.pci_dev->driver->driver.name;
-#endif
+
       ASSERT (dev_info.driver_name);
 
       if (!xd->pmd)
@@ -852,7 +849,7 @@ dpdk_bind_devices_to_uio (dpdk_config_main_t * conf)
     vec_reset_length (pci_addr);
     pci_addr = format (pci_addr, "%U%c", format_vlib_pci_addr, &d->bus_address, 0);
 
-    if (d->device_class != PCI_CLASS_NETWORK_ETHERNET)
+    if (d->device_class != PCI_CLASS_NETWORK_ETHERNET && d->device_class != PCI_CLASS_PROCESSOR_CO)
       continue;
 
     if (num_whitelisted)
@@ -1048,6 +1045,9 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
       else if (unformat (input, "no-multi-seg"))
        conf->no_multi_seg = 1;
 
+      else if (unformat (input, "enable-cryptodev"))
+       conf->cryptodev = 1;
+
       else if (unformat (input, "dev default %U", unformat_vlib_cli_sub_input,
                         &sub_input))
        {
@@ -1156,7 +1156,7 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
     }
 
   if (!conf->uio_driver_name)
-    conf->uio_driver_name = format (0, "igb_uio%c", 0);
+    conf->uio_driver_name = format (0, "uio_pci_generic%c", 0);
 
   /*
    * Use 1G huge pages if available.
@@ -1599,11 +1599,8 @@ dpdk_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
            struct rte_eth_dev_info dev_info;
            rte_eth_dev_info_get (i, &dev_info);
            if (!dev_info.driver_name)
-#if RTE_VERSION < RTE_VERSION_NUM(16, 11, 0, 0)
-             dev_info.driver_name = dev_info.pci_dev->driver->name;
-#else
              dev_info.driver_name = dev_info.pci_dev->driver->driver.name;
-#endif
+
            ASSERT (dev_info.driver_name);
            if (strncmp (dev_info.driver_name, "rte_bond_pmd", 12) == 0)
              {
@@ -1753,8 +1750,6 @@ dpdk_init (vlib_main_t * vm)
   STATIC_ASSERT (offsetof (dpdk_device_t, cacheline1) ==
                 CLIB_CACHE_LINE_BYTES,
                 "Data in cache line 0 is bigger than cache line size");
-  STATIC_ASSERT (offsetof (dpdk_worker_t, cacheline0) == 0,
-                "Cache line marker must be 1st element in dpdk_worker_t");
   STATIC_ASSERT (offsetof (frame_queue_trace_t, cacheline0) == 0,
                 "Cache line marker must be 1st element in frame_queue_trace_t");
 
@@ -1781,7 +1776,7 @@ dpdk_init (vlib_main_t * vm)
 
   /* Default vlib_buffer_t flags, DISABLES tcp/udp checksumming... */
   dm->buffer_flags_template =
-    (VLIB_BUFFER_TOTAL_LENGTH_VALID | VNET_BUFFER_RTE_MBUF_VALID
+    (VLIB_BUFFER_TOTAL_LENGTH_VALID | VLIB_BUFFER_EXT_HDR_VALID
      | IP_BUFFER_L4_CHECKSUM_COMPUTED | IP_BUFFER_L4_CHECKSUM_CORRECT);
 
   dm->stat_poll_interval = DPDK_STATS_POLL_INTERVAL;