@@ -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)
Signed-off-by: Ilya Maximets <i.maximets@samsung.com> --- lib/netdev-dummy.c | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-)