X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_vhost%2Frte_virtio_net.h;h=e3a21e55243aa0b28b792fbdbe7852056e70e227;hb=381316f6a225139d22d39b5ab8d50c40607924ca;hp=00b13288050d4a6a274f7dabc7f9db49f9974194;hpb=af4f2c5feb2e34e36dc1431077a6d9ad8ffa6524;p=dpdk.git diff --git a/lib/librte_vhost/rte_virtio_net.h b/lib/librte_vhost/rte_virtio_net.h index 00b1328805..e3a21e5524 100644 --- a/lib/librte_vhost/rte_virtio_net.h +++ b/lib/librte_vhost/rte_virtio_net.h @@ -43,10 +43,15 @@ #include #include #include +#include +#include #include #include -#include + +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 @@ -82,8 +87,8 @@ struct vhost_virtqueue { 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). */ + int callfd; /**< Used to notify the guest (trigger interrupt). */ + int kickfd; /**< Currently unused as polling mode is enabled. */ struct buf_vector buf_vec[BUF_VECTOR_MAX]; /**< for scatter RX. */ } __rte_cache_aligned; @@ -94,8 +99,11 @@ 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 protocol_features; /**< Negotiated protocol 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; @@ -124,6 +132,10 @@ struct virtio_memory { /** * 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. */ @@ -177,6 +189,9 @@ int rte_vhost_enable_guest_notification(struct virtio_net *dev, uint16_t queue_i /* 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. */ @@ -187,8 +202,14 @@ int rte_vhost_driver_session_start(void); * 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 */ @@ -199,10 +220,16 @@ uint16_t rte_vhost_enqueue_burst(struct virtio_net *dev, uint16_t queue_id, * 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 */