vmxnet3: multiple TX queues support
[vpp.git] / src / plugins / vmxnet3 / vmxnet3_test.c
index 53097f0..848b169 100644 (file)
@@ -121,6 +121,8 @@ api_vmxnet3_create (vat_main_t * vam)
        ;
       else if (unformat (i, "tx-queue-size %u", &args.txq_size))
        ;
+      else if (unformat (i, "num-tx-queues %u", &args.txq_num))
+       ;
       else
        {
          clib_warning ("unknown input '%U'", format_unformat_error, i);
@@ -134,6 +136,7 @@ api_vmxnet3_create (vat_main_t * vam)
   mp->enable_elog = clib_host_to_net_u16 (args.enable_elog);
   mp->rxq_size = clib_host_to_net_u16 (args.rxq_size);
   mp->txq_size = clib_host_to_net_u16 (args.txq_size);
+  mp->txq_num = clib_host_to_net_u16 (args.txq_num);
 
   S (mp);
   W (ret);
@@ -240,33 +243,38 @@ vl_api_vmxnet3_details_t_handler (vl_api_vmxnet3_details_t * mp)
 {
   vat_main_t *vam = vmxnet3_test_main.vat_main;
   u32 pci_addr = ntohl (mp->pci_addr);
+  u16 qid;
 
   fformat (vam->ofp, "%s: sw_if_index %u mac %U\n"
           "   version: %u\n"
           "   PCI Address: %U\n"
-          "   RX completion next index %u"
-          "   RX Queue %u\n"
-          "    ring 0 size %u fill %u consume %u produce %u\n"
-          "    ring 1 size %u fill %u consume %u produce %u\n"
-          "   TX completion next index %u"
-          "   TX Queue %u\n"
-          "    size %u consume %u produce %u\n"
-          "   state %s\n",
+          "   state %s\n"
+          "   RX Queue 0\n"
+          "     RX completion next index %u\n"
+          "     ring 0 size %u fill %u consume %u produce %u\n"
+          "     ring 1 size %u fill %u consume %u produce %u\n",
           mp->if_name, ntohl (mp->sw_if_index), format_ethernet_address,
           mp->hw_addr, mp->version,
           format_pci_addr, &pci_addr,
+          mp->admin_up_down ? "up" : "down",
           ntohs (mp->rx_next),
-          ntohs (mp->rx_qid),
           ntohs (mp->rx_qsize), ntohs (mp->rx_fill[0]),
           ntohs (mp->rx_consume[0]),
           ntohs (mp->rx_produce[0]),
           ntohs (mp->rx_qsize), ntohs (mp->rx_fill[1]),
-          ntohs (mp->rx_consume[1]),
-          ntohs (mp->rx_produce[1]),
-          ntohs (mp->tx_next),
-          ntohs (mp->tx_qid),
-          ntohs (mp->tx_qsize), ntohs (mp->tx_consume),
-          ntohs (mp->tx_produce), mp->admin_up_down ? "up" : "down");
+          ntohs (mp->rx_consume[1]), ntohs (mp->rx_produce[1]));
+  for (qid = 0; qid < mp->tx_count; qid++)
+    {
+      vl_api_vmxnet3_tx_list_t *tx_list = &mp->tx_list[qid];
+      fformat (vam->ofp,
+              "   TX Queue %u\n"
+              "     TX completion next index %u\n"
+              "     size %u consume %u produce %u\n",
+              qid,
+              ntohs (tx_list->tx_next),
+              ntohs (tx_list->tx_qsize), ntohs (tx_list->tx_consume),
+              ntohs (tx_list->tx_produce));
+    }
 }
 
 /*
@@ -275,8 +283,8 @@ vl_api_vmxnet3_details_t_handler (vl_api_vmxnet3_details_t * mp)
  */
 #define foreach_vpe_api_msg                                    \
 _(vmxnet3_create, "<pci-address> [rx-queue-size <size>] "      \
-              "[tx-queue-size <size>]")                                \
-_(vmxnet3_delete, "<sw_if_index>")                              \
+              "[tx-queue-size <size>] [num-tx-queues <num>]")  \
+_(vmxnet3_delete, "sw_if_index <sw_if_index>")                  \
 _(vmxnet3_dump, "")
 
 static void