diff mbox

[ovs-dev,09/10] netdev-dummy: Add fake multiqueue support to dummy_pmd.

Message ID 1457968700-23125-10-git-send-email-i.maximets@samsung.com
State Superseded
Headers show

Commit Message

Ilya Maximets March 14, 2016, 3:18 p.m. UTC
Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
---
 lib/netdev-dummy.c | 42 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 36 insertions(+), 6 deletions(-)
diff mbox

Patch

diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
index 4903e56..f427965 100644
--- a/lib/netdev-dummy.c
+++ b/lib/netdev-dummy.c
@@ -700,9 +700,9 @@  netdev_dummy_dealloc(struct netdev *netdev_)
 }
 
 static int
-netdev_dummy_get_config(const struct netdev *netdev_, struct smap *args)
+netdev_dummy_get_config(const struct netdev *dev, struct smap *args)
 {
-    struct netdev_dummy *netdev = netdev_dummy_cast(netdev_);
+    struct netdev_dummy *netdev = netdev_dummy_cast(dev);
 
     ovs_mutex_lock(&netdev->mutex);
 
@@ -712,6 +712,10 @@  netdev_dummy_get_config(const struct netdev *netdev_, struct smap *args)
 
     dummy_packet_conn_get_config(&netdev->conn, args);
 
+    smap_add_format(args, "requested_rx_queues", "%d", dev->requested_n_rxq);
+    smap_add_format(args, "configured_rx_queues", "%d", dev->n_rxq);
+    smap_add_format(args, "requested_tx_queues", "%d", dev->n_txq);
+
     ovs_mutex_unlock(&netdev->mutex);
     return 0;
 }
@@ -801,6 +805,9 @@  netdev_dummy_set_config(struct netdev *netdev_, const struct smap *args)
         }
     }
 
+    netdev_->requested_n_rxq = MAX(smap_get_int(args, "n_rxq",
+                                               netdev_->requested_n_rxq), 1);
+    netdev_change_seq_changed(netdev_);
     ovs_mutex_unlock(&netdev->mutex);
 
     return 0;
@@ -812,6 +819,27 @@  netdev_dummy_get_numa_id(const struct netdev *netdev_ OVS_UNUSED)
     return 0;
 }
 
+/* Sets the number of tx queues and rx queues for the dummy PMD interface.
+ * Implements fake multiqueue support. */
+static int
+netdev_dummy_set_multiq(struct netdev *netdev_, unsigned int n_txq,
+                        unsigned int n_rxq)
+{
+    struct netdev_dummy *netdev = netdev_dummy_cast(netdev_);
+
+    ovs_mutex_lock(&netdev->mutex);
+
+    if (netdev_->n_txq == n_txq && netdev_->n_rxq == n_rxq) {
+        goto out;
+    }
+
+    netdev_->n_txq = n_txq;
+    netdev_->n_rxq = n_rxq;
+out:
+    ovs_mutex_unlock(&netdev->mutex);
+    return 0;
+}
+
 static struct netdev_rxq *
 netdev_dummy_rxq_alloc(void)
 {
@@ -1199,7 +1227,7 @@  netdev_dummy_update_flags(struct netdev *netdev_,
 
 /* Helper functions. */
 
-#define NETDEV_DUMMY_CLASS(PMD)                                 \
+#define NETDEV_DUMMY_CLASS(PMD, MULTIQ)                         \
 {                                                               \
     "dummy",                                                    \
     PMD,                        /* is_pmd */                    \
@@ -1218,7 +1246,7 @@  netdev_dummy_update_flags(struct netdev *netdev_,
     NULL,                       /* push header */               \
     NULL,                       /* pop header */                \
     netdev_dummy_get_numa_id,                                   \
-    NULL,                       /* set_multiq */                \
+    MULTIQ,                     /* set_multiq */                \
                                                                 \
     netdev_dummy_send,          /* send */                      \
     NULL,                       /* send_wait */                 \
@@ -1269,8 +1297,10 @@  netdev_dummy_update_flags(struct netdev *netdev_,
     netdev_dummy_rxq_drain,                                     \
 }
 
-static const struct netdev_class dummy_class = NETDEV_DUMMY_CLASS(false);
-static const struct netdev_class dummy_pmd_class = NETDEV_DUMMY_CLASS(true);
+static const struct netdev_class dummy_class =
+    NETDEV_DUMMY_CLASS(false, NULL);
+static const struct netdev_class dummy_pmd_class =
+    NETDEV_DUMMY_CLASS(true, netdev_dummy_set_multiq);
 
 static void
 pkt_list_delete(struct ovs_list *l)