vhost: add API to get MTU value
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Sun, 12 Mar 2017 16:34:01 +0000 (17:34 +0100)
committerYuanhan Liu <yuanhan.liu@linux.intel.com>
Sat, 1 Apr 2017 08:36:17 +0000 (10:36 +0200)
This patch implements the function for the application to
get the MTU value.

rte_vhost_get_mtu() fills the mtu parameter with the MTU value
set in QEMU if VIRTIO_NET_F_MTU has been negotiated and returns 0,
-ENOTSUP otherwise.

The function returns -EAGAIN if Virtio feature negotiation
didn't happened yet.

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
lib/librte_vhost/rte_vhost_version.map
lib/librte_vhost/rte_virtio_net.h
lib/librte_vhost/vhost.c

index 5ceaa8a..30b4671 100644 (file)
@@ -30,3 +30,10 @@ DPDK_16.07 {
        rte_vhost_get_queue_num;
 
 } DPDK_2.1;
+
+DPDK_17.05 {
+       global:
+
+       rte_vhost_get_mtu;
+
+} DPDK_16.07;
index 926039c..56829aa 100644 (file)
@@ -99,6 +99,21 @@ int rte_vhost_driver_callback_register(struct virtio_net_device_ops const * cons
 /* Start vhost driver session blocking loop. */
 int rte_vhost_driver_session_start(void);
 
+/**
+ * Get the MTU value of the device if set in QEMU.
+ *
+ * @param vid
+ *  virtio-net device ID
+ * @param mtu
+ *  The variable to store the MTU value
+ *
+ * @return
+ *  0: success
+ *  -EAGAIN: device not yet started
+ *  -ENOTSUP: device does not support MTU feature
+ */
+int rte_vhost_get_mtu(int vid, uint16_t *mtu);
+
 /**
  * Get the numa node from which the virtio net device's memory
  * is allocated.
index 3e87ecc..dfb08db 100644 (file)
@@ -312,6 +312,25 @@ vhost_enable_dequeue_zero_copy(int vid)
        dev->dequeue_zero_copy = 1;
 }
 
+int
+rte_vhost_get_mtu(int vid, uint16_t *mtu)
+{
+       struct virtio_net *dev = get_device(vid);
+
+       if (!dev)
+               return -ENODEV;
+
+       if (!(dev->flags & VIRTIO_DEV_READY))
+               return -EAGAIN;
+
+       if (!(dev->features & VIRTIO_NET_F_MTU))
+               return -ENOTSUP;
+
+       *mtu = dev->mtu;
+
+       return 0;
+}
+
 int
 rte_vhost_get_numa_node(int vid)
 {