dpdk: tx/rx burst function description refactor
[vpp.git] / src / plugins / dpdk / device / format.c
index 7bba3eb..693f92d 100644 (file)
@@ -362,6 +362,10 @@ format_dpdk_device_type (u8 * s, va_list * args)
       dev_type = "Microsoft Hyper-V Netvsc";
       break;
 
+    case VNET_DPDK_PMD_BNXT:
+      dev_type = "Broadcom NetXtreme E/S-Series";
+      break;
+
     default:
     case VNET_DPDK_PMD_UNKNOWN:
       dev_type = "### UNKNOWN ###";
@@ -540,6 +544,20 @@ ptr2sname (void *p)
   return info.dli_sname;
 }
 
+static u8 *
+format_switch_info (u8 * s, va_list * args)
+{
+  struct rte_eth_switch_info *si =
+    va_arg (*args, struct rte_eth_switch_info *);
+
+  if (si->name)
+    s = format (s, "name %s ", si->name);
+
+  s = format (s, "domain id %d port id %d", si->domain_id, si->port_id);
+
+  return s;
+}
+
 u8 *
 format_dpdk_device (u8 * s, va_list * args)
 {
@@ -550,6 +568,7 @@ format_dpdk_device (u8 * s, va_list * args)
   u32 indent = format_get_indent (s);
   f64 now = vlib_time_now (dm->vlib_main);
   struct rte_eth_dev_info di;
+  struct rte_eth_burst_mode mode;
 
   dpdk_update_counters (xd, now);
   dpdk_update_link_state (xd, now);
@@ -560,6 +579,9 @@ format_dpdk_device (u8 * s, va_list * args)
              format_white_space, indent + 2, format_dpdk_link_status, xd);
   s = format (s, "%Uflags: %U\n",
              format_white_space, indent + 2, format_dpdk_device_flags, xd);
+  if (di.device->devargs && di.device->devargs->args)
+    s = format (s, "%UDevargs: %s\n",
+               format_white_space, indent + 2, di.device->devargs->args);
   s = format (s, "%Urx: queues %d (max %d), desc %d "
              "(min %d max %d align %d)\n",
              format_white_space, indent + 2, xd->rx_q_used, di.max_rx_queues,
@@ -602,8 +624,18 @@ format_dpdk_device (u8 * s, va_list * args)
          vec_free (s2);
        }
 
-      s = format (s, "%Umodule: %U\n", format_white_space, indent + 2,
-                 format_dpdk_device_module_info, xd);
+      if (di.switch_info.domain_id != RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID)
+       {
+         s =
+           format (s, "%Uswitch info: %U\n", format_white_space, indent + 2,
+                   format_switch_info, &di.switch_info);
+       }
+
+      if (1 < verbose)
+       {
+         s = format (s, "%Umodule: %U\n", format_white_space, indent + 2,
+                     format_dpdk_device_module_info, xd);
+       }
 
       s = format (s, "%Umax rx packet len: %d\n", format_white_space,
                  indent + 2, di.max_rx_pktlen);
@@ -635,12 +667,36 @@ format_dpdk_device (u8 * s, va_list * args)
                  format_dpdk_rss_hf_name, di.flow_type_rss_offloads,
                  format_white_space, indent + 2,
                  format_dpdk_rss_hf_name, rss_conf.rss_hf);
-      s = format (s, "%Utx burst function: %s\n",
-                 format_white_space, indent + 2,
-                 ptr2sname (rte_eth_devices[xd->port_id].tx_pkt_burst));
-      s = format (s, "%Urx burst function: %s\n",
-                 format_white_space, indent + 2,
-                 ptr2sname (rte_eth_devices[xd->port_id].rx_pkt_burst));
+
+      if (rte_eth_tx_burst_mode_get (xd->port_id, 0, &mode) == 0)
+       {
+         s = format (s, "%Utx burst mode: %s%s\n",
+                     format_white_space, indent + 2,
+                     mode.info,
+                     mode.flags & RTE_ETH_BURST_FLAG_PER_QUEUE ?
+                     " (per queue)" : "");
+       }
+      else
+       {
+         s = format (s, "%Utx burst function: %s\n",
+                     format_white_space, indent + 2,
+                     ptr2sname (rte_eth_devices[xd->port_id].tx_pkt_burst));
+       }
+
+      if (rte_eth_rx_burst_mode_get (xd->port_id, 0, &mode) == 0)
+       {
+         s = format (s, "%Urx burst mode: %s%s\n",
+                     format_white_space, indent + 2,
+                     mode.info,
+                     mode.flags & RTE_ETH_BURST_FLAG_PER_QUEUE ?
+                     " (per queue)" : "");
+       }
+      else
+       {
+         s = format (s, "%Urx burst function: %s\n",
+                     format_white_space, indent + 2,
+                     ptr2sname (rte_eth_devices[xd->port_id].rx_pkt_burst));
+       }
     }
 
   /* $$$ MIB counters  */
@@ -665,7 +721,7 @@ format_dpdk_device (u8 * s, va_list * args)
   vec_validate (xstat_names, len - 1);
   int ret = rte_eth_xstats_get_names (xd->port_id, xstat_names, len);
 
-  if (ret < 0 || ret > len)
+  if (ret >= 0 && ret <= len)
     {
       /* *INDENT-OFF* */
       vec_foreach_index(i, xd->xstats)
@@ -903,25 +959,6 @@ unformat_rss_fn (unformat_input_t * input, uword * rss_fn)
   return 0;
 }
 
-clib_error_t *
-unformat_hqos (unformat_input_t * input, dpdk_device_config_hqos_t * hqos)
-{
-  clib_error_t *error = 0;
-
-  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (input, "hqos-thread %u", &hqos->hqos_thread))
-       hqos->hqos_thread_valid = 1;
-      else
-       {
-         error = clib_error_return (0, "unknown input `%U'",
-                                    format_unformat_error, input);
-         break;
-       }
-    }
-
-  return error;
-}
 
 /*
  * fd.io coding-style-patch-verification: ON