#ifndef _VIRTIO_NET_H_
#define _VIRTIO_NET_H_
+/**
+ * @file
+ * Interface to vhost net
+ */
+
#include <stdint.h>
#include <linux/virtio_ring.h>
#include <linux/virtio_net.h>
#include <sys/eventfd.h>
+#include <sys/socket.h>
+#include <linux/if.h>
#include <rte_memory.h>
#include <rte_mempool.h>
-#include <rte_mbuf.h>
+
+struct rte_mbuf;
+
+#define VHOST_MEMORY_MAX_NREGIONS 8
/* Used to indicate that the device is running on a data core */
#define VIRTIO_DEV_RUNNING 1
uint16_t vhost_hlen; /**< Vhost header length (varies depending on RX merge buffers. */
volatile uint16_t last_used_idx; /**< Last index used on the available ring */
volatile uint16_t last_used_idx_res; /**< Used for multiple devices reserving buffers. */
- eventfd_t callfd; /**< Currently unused as polling mode is enabled. */
- eventfd_t kickfd; /**< Used to notify the guest (trigger interrupt). */
+ eventfd_t callfd; /**< Used to notify the guest (trigger interrupt). */
+ eventfd_t kickfd; /**< Currently unused as polling mode is enabled. */
struct buf_vector buf_vec[BUF_VECTOR_MAX]; /**< for scatter RX. */
} __rte_cache_aligned;
/**
* Device structure contains all configuration information relating to the device.
*/
-struct virtio_net
-{
+struct virtio_net {
struct vhost_virtqueue *virtqueue[VIRTIO_QNUM]; /**< Contains all virtqueue information. */
struct virtio_memory *mem; /**< QEMU memory and memory region information. */
uint64_t features; /**< Negotiated feature set. */
uint64_t device_fh; /**< device identifier. */
uint32_t flags; /**< Device flags. Only used to check if device is running on data core. */
+#define IF_NAME_SZ (PATH_MAX > IFNAMSIZ ? PATH_MAX : IFNAMSIZ)
+ char ifname[IF_NAME_SZ]; /**< Name of the tap device or socket path. */
void *priv; /**< private context */
} __rte_cache_aligned;
/**
* Device operations to add/remove device.
+ *
+ * Make sure to set VIRTIO_DEV_RUNNING to the device flags in new_device and
+ * remove it in destroy_device.
+ *
*/
struct virtio_net_device_ops {
int (*new_device)(struct virtio_net *); /**< Add device. */
/* Register vhost driver. dev_name could be different for multiple instance support. */
int rte_vhost_driver_register(const char *dev_name);
+/* Unregister vhost driver. This is only meaningful to vhost user. */
+int rte_vhost_driver_unregister(const char *dev_name);
+
/* Register callbacks. */
int rte_vhost_driver_callback_register(struct virtio_net_device_ops const * const);
/* Start vhost driver session blocking loop. */
* be received from the physical port or from another virtual device. A packet
* count is returned to indicate the number of packets that were succesfully
* added to the RX queue.
+ * @param dev
+ * virtio-net device
* @param queue_id
* virtio queue index in mq case
+ * @param pkts
+ * array to contain packets to be enqueued
+ * @param count
+ * packets num to be enqueued
* @return
* num of packets enqueued
*/
* This function gets guest buffers from the virtio device TX virtqueue,
* construct host mbufs, copies guest buffer content to host mbufs and
* store them in pkts to be processed.
+ * @param dev
+ * virtio-net device
+ * @param queue_id
+ * virtio queue index in mq case
* @param mbuf_pool
* mbuf_pool where host mbuf is allocated.
- * @param queue_id
- * virtio queue index in mq case.
+ * @param pkts
+ * array to contain packets to be dequeued
+ * @param count
+ * packets num to be dequeued
* @return
* num of packets dequeued
*/