vhost: use new APIs to handle features
[dpdk.git] / lib / librte_vhost / vhost.c
index d8116ff..7b40a92 100644 (file)
 
 #include "vhost.h"
 
-#define VHOST_USER_F_PROTOCOL_FEATURES 30
-
-/* Features supported by this lib. */
-#define VHOST_SUPPORTED_FEATURES ((1ULL << VIRTIO_NET_F_MRG_RXBUF) | \
-                               (1ULL << VIRTIO_NET_F_CTRL_VQ) | \
-                               (1ULL << VIRTIO_NET_F_CTRL_RX) | \
-                               (1ULL << VIRTIO_NET_F_GUEST_ANNOUNCE) | \
-                               (VHOST_SUPPORTS_MQ)            | \
-                               (1ULL << VIRTIO_F_VERSION_1)   | \
-                               (1ULL << VHOST_F_LOG_ALL)      | \
-                               (1ULL << VHOST_USER_F_PROTOCOL_FEATURES) | \
-                               (1ULL << VIRTIO_NET_F_HOST_TSO4) | \
-                               (1ULL << VIRTIO_NET_F_HOST_TSO6) | \
-                               (1ULL << VIRTIO_NET_F_CSUM)    | \
-                               (1ULL << VIRTIO_NET_F_GUEST_CSUM) | \
-                               (1ULL << VIRTIO_NET_F_GUEST_TSO4) | \
-                               (1ULL << VIRTIO_NET_F_GUEST_TSO6) | \
-                               (1ULL << VIRTIO_RING_F_INDIRECT_DESC))
-
-uint64_t VHOST_FEATURES = VHOST_SUPPORTED_FEATURES;
-
 struct virtio_net *vhost_devices[MAX_VHOST_DEVICE];
 
 /* device ops to add/remove device to/from data core. */
@@ -227,9 +206,8 @@ reset_device(struct virtio_net *dev)
 }
 
 /*
- * Function is called from the CUSE open function. The device structure is
- * initialised and a new entry is added to the device configuration linked
- * list.
+ * Invoked when there is a new vhost-user connection established (when
+ * there is a new virtio device being attached).
  */
 int
 vhost_new_device(void)
@@ -251,6 +229,7 @@ vhost_new_device(void)
        if (i == MAX_VHOST_DEVICE) {
                RTE_LOG(ERR, VHOST_CONFIG,
                        "Failed to find a free slot for new device.\n");
+               rte_free(dev);
                return -1;
        }
 
@@ -261,8 +240,8 @@ vhost_new_device(void)
 }
 
 /*
- * Function is called from the CUSE release function. This function will
- * cleanup the device and remove it from device configuration linked list.
+ * Invoked when there is the vhost-user connection is broken (when
+ * the virtio device is being detached).
  */
 void
 vhost_destroy_device(int vid)
@@ -311,6 +290,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)
 {
@@ -399,26 +397,6 @@ rte_vhost_enable_guest_notification(int vid, uint16_t queue_id, int enable)
        return 0;
 }
 
-uint64_t rte_vhost_feature_get(void)
-{
-       return VHOST_FEATURES;
-}
-
-int rte_vhost_feature_disable(uint64_t feature_mask)
-{
-       VHOST_FEATURES = VHOST_FEATURES & ~feature_mask;
-       return 0;
-}
-
-int rte_vhost_feature_enable(uint64_t feature_mask)
-{
-       if ((feature_mask & VHOST_SUPPORTED_FEATURES) == feature_mask) {
-               VHOST_FEATURES = VHOST_FEATURES | feature_mask;
-               return 0;
-       }
-       return -1;
-}
-
 /*
  * Register ops so that we can add/remove device to data core.
  */