Signed-off-by: Ilya Maximets <i.maxim...@samsung.com> --- lib/netdev-dummy.c | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-)
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) -- 2.5.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev