DPDK
19.08.0-rc0
|
#include <stdint.h>
#include <sys/eventfd.h>
#include <rte_memory.h>
#include <rte_mempool.h>
#include <linux/vhost.h>
#include <linux/virtio_ring.h>
Go to the source code of this file.
Data Structures | |
struct | rte_vhost_mem_region |
struct | rte_vhost_memory |
struct | rte_vhost_user_extern_ops |
struct | vhost_device_ops |
Macros | |
#define | VHOST_USER_PROTOCOL_F_MQ 0 |
#define | VHOST_USER_F_PROTOCOL_FEATURES 30 |
Typedefs | |
typedef enum rte_vhost_msg_result(* | rte_vhost_msg_handle) (int vid, void *msg) |
Enumerations | |
enum | rte_vhost_msg_result |
Functions | |
static __rte_deprecated __rte_always_inline uint64_t | rte_vhost_gpa_to_vva (struct rte_vhost_memory *mem, uint64_t gpa) |
static __rte_always_inline uint64_t | rte_vhost_va_from_guest_pa (struct rte_vhost_memory *mem, uint64_t gpa, uint64_t *len) |
void | rte_vhost_log_write (int vid, uint64_t addr, uint64_t len) |
void | rte_vhost_log_used_vring (int vid, uint16_t vring_idx, uint64_t offset, uint64_t len) |
int | rte_vhost_driver_register (const char *path, uint64_t flags) |
int __rte_experimental | rte_vhost_driver_attach_vdpa_device (const char *path, int did) |
int __rte_experimental | rte_vhost_driver_detach_vdpa_device (const char *path) |
int __rte_experimental | rte_vhost_driver_get_vdpa_device_id (const char *path) |
int | rte_vhost_driver_set_features (const char *path, uint64_t features) |
int | rte_vhost_driver_enable_features (const char *path, uint64_t features) |
int | rte_vhost_driver_disable_features (const char *path, uint64_t features) |
int | rte_vhost_driver_get_features (const char *path, uint64_t *features) |
int __rte_experimental | rte_vhost_driver_set_protocol_features (const char *path, uint64_t protocol_features) |
int __rte_experimental | rte_vhost_driver_get_protocol_features (const char *path, uint64_t *protocol_features) |
int __rte_experimental | rte_vhost_driver_get_queue_num (const char *path, uint32_t *queue_num) |
int | rte_vhost_get_negotiated_features (int vid, uint64_t *features) |
int | rte_vhost_driver_start (const char *path) |
int | rte_vhost_get_mtu (int vid, uint16_t *mtu) |
int | rte_vhost_get_numa_node (int vid) |
__rte_deprecated uint32_t | rte_vhost_get_queue_num (int vid) |
uint16_t | rte_vhost_get_vring_num (int vid) |
int | rte_vhost_get_ifname (int vid, char *buf, size_t len) |
uint16_t | rte_vhost_avail_entries (int vid, uint16_t queue_id) |
uint16_t | rte_vhost_enqueue_burst (int vid, uint16_t queue_id, struct rte_mbuf **pkts, uint16_t count) |
uint16_t | rte_vhost_dequeue_burst (int vid, uint16_t queue_id, struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t count) |
int | rte_vhost_get_mem_table (int vid, struct rte_vhost_memory **mem) |
int | rte_vhost_get_vhost_vring (int vid, uint16_t vring_idx, struct rte_vhost_vring *vring) |
int | rte_vhost_vring_call (int vid, uint16_t vring_idx) |
uint32_t | rte_vhost_rx_queue_count (int vid, uint16_t qid) |
int __rte_experimental | rte_vhost_get_log_base (int vid, uint64_t *log_base, uint64_t *log_size) |
int __rte_experimental | rte_vhost_get_vring_base (int vid, uint16_t queue_id, uint16_t *last_avail_idx, uint16_t *last_used_idx) |
int __rte_experimental | rte_vhost_set_vring_base (int vid, uint16_t queue_id, uint16_t last_avail_idx, uint16_t last_used_idx) |
int __rte_experimental | rte_vhost_extern_callback_register (int vid, struct rte_vhost_user_extern_ops const *const ops, void *ctx) |
int __rte_experimental | rte_vhost_get_vdpa_device_id (int vid) |
Interface to vhost-user
Definition in file rte_vhost.h.
#define VHOST_USER_PROTOCOL_F_MQ 0 |
Protocol features.
Definition at line 35 of file rte_vhost.h.
#define VHOST_USER_F_PROTOCOL_FEATURES 30 |
Indicate whether protocol features negotiation is supported.
Definition at line 76 of file rte_vhost.h.
typedef enum rte_vhost_msg_result(* rte_vhost_msg_handle) (int vid, void *msg) |
Function prototype for the vhost backend to handle specific vhost user messages.
vid | vhost device id |
msg | Message pointer. |
Definition at line 142 of file rte_vhost.h.
enum rte_vhost_msg_result |
Possible results of the vhost user message handling callbacks
Definition at line 117 of file rte_vhost.h.
|
static |
Convert guest physical address to host virtual address
This function is deprecated because unsafe. New rte_vhost_va_from_guest_pa() should be used instead to ensure guest physical ranges are fully and contiguously mapped into process virtual address space.
mem | the guest memory regions |
gpa | the guest physical address for querying |
Definition at line 194 of file rte_vhost.h.
|
static |
Convert guest physical address to host virtual address safely
This variant of rte_vhost_gpa_to_vva() takes care all the requested length is mapped and contiguous in process address space.
mem | the guest memory regions |
gpa | the guest physical address for querying |
len | the size of the requested area to map, updated with actual size mapped |
Definition at line 228 of file rte_vhost.h.
void rte_vhost_log_write | ( | int | vid, |
uint64_t | addr, | ||
uint64_t | len | ||
) |
Log the memory write start with given address.
This function only need be invoked when the live migration starts. Therefore, we won't need call it at all in the most of time. For making the performance impact be minimum, it's suggested to do a check before calling it:
if (unlikely(RTE_VHOST_NEED_LOG(features))) rte_vhost_log_write(vid, addr, len);
vid | vhost device ID |
addr | the starting address for write |
len | the length to write |
void rte_vhost_log_used_vring | ( | int | vid, |
uint16_t | vring_idx, | ||
uint64_t | offset, | ||
uint64_t | len | ||
) |
Log the used ring update start at given offset.
Same as rte_vhost_log_write, it's suggested to do a check before calling it:
if (unlikely(RTE_VHOST_NEED_LOG(features))) rte_vhost_log_used_vring(vid, vring_idx, offset, len);
vid | vhost device ID |
vring_idx | the vring index |
offset | the offset inside the used ring |
len | the length to write |
int rte_vhost_driver_register | ( | const char * | path, |
uint64_t | flags | ||
) |
Register vhost driver. path could be different for multiple instance support.
int __rte_experimental rte_vhost_driver_attach_vdpa_device | ( | const char * | path, |
int | did | ||
) |
Set the vdpa device id, enforce single connection per socket
path | The vhost-user socket file path |
did | Device id |
int __rte_experimental rte_vhost_driver_detach_vdpa_device | ( | const char * | path | ) |
Unset the vdpa device id
path | The vhost-user socket file path |
int __rte_experimental rte_vhost_driver_get_vdpa_device_id | ( | const char * | path | ) |
Get the device id
path | The vhost-user socket file path |
int rte_vhost_driver_set_features | ( | const char * | path, |
uint64_t | features | ||
) |
Set the feature bits the vhost-user driver supports.
path | The vhost-user socket file path |
features | Supported features |
int rte_vhost_driver_enable_features | ( | const char * | path, |
uint64_t | features | ||
) |
Enable vhost-user driver features.
Note that
path | The vhost-user socket file path |
features | Features to enable |
int rte_vhost_driver_disable_features | ( | const char * | path, |
uint64_t | features | ||
) |
Disable vhost-user driver features.
The two notes at rte_vhost_driver_enable_features() also apply here.
path | The vhost-user socket file path |
features | Features to disable |
int rte_vhost_driver_get_features | ( | const char * | path, |
uint64_t * | features | ||
) |
Get the feature bits before feature negotiation.
path | The vhost-user socket file path |
features | A pointer to store the queried feature bits |
int __rte_experimental rte_vhost_driver_set_protocol_features | ( | const char * | path, |
uint64_t | protocol_features | ||
) |
Set the protocol feature bits before feature negotiation.
path | The vhost-user socket file path |
protocol_features | Supported protocol features |
int __rte_experimental rte_vhost_driver_get_protocol_features | ( | const char * | path, |
uint64_t * | protocol_features | ||
) |
Get the protocol feature bits before feature negotiation.
path | The vhost-user socket file path |
protocol_features | A pointer to store the queried protocol feature bits |
int __rte_experimental rte_vhost_driver_get_queue_num | ( | const char * | path, |
uint32_t * | queue_num | ||
) |
Get the queue number bits before feature negotiation.
path | The vhost-user socket file path |
queue_num | A pointer to store the queried queue number bits |
int rte_vhost_get_negotiated_features | ( | int | vid, |
uint64_t * | features | ||
) |
Get the feature bits after negotiation
vid | Vhost device ID |
features | A pointer to store the queried feature bits |
int rte_vhost_driver_start | ( | const char * | path | ) |
Start the vhost-user driver.
This function triggers the vhost-user negotiation.
path | The vhost-user socket file path |
int rte_vhost_get_mtu | ( | int | vid, |
uint16_t * | mtu | ||
) |
Get the MTU value of the device if set in QEMU.
vid | virtio-net device ID |
mtu | The variable to store the MTU value |
int rte_vhost_get_numa_node | ( | int | vid | ) |
Get the numa node from which the virtio net device's memory is allocated.
vid | vhost device ID |
__rte_deprecated uint32_t rte_vhost_get_queue_num | ( | int | vid | ) |
Note this function is deprecated, as it returns a queue pair number, which is vhost specific. Instead, rte_vhost_get_vring_num should be used.
vid | vhost device ID |
uint16_t rte_vhost_get_vring_num | ( | int | vid | ) |
Get the number of vrings the device supports.
vid | vhost device ID |
int rte_vhost_get_ifname | ( | int | vid, |
char * | buf, | ||
size_t | len | ||
) |
Get the virtio net device's ifname, which is the vhost-user socket file path.
vid | vhost device ID |
buf | The buffer to stored the queried ifname |
len | The length of buf |
uint16_t rte_vhost_avail_entries | ( | int | vid, |
uint16_t | queue_id | ||
) |
Get how many avail entries are left in the queue
vid | vhost device ID |
queue_id | virtio queue index |
uint16_t rte_vhost_enqueue_burst | ( | int | vid, |
uint16_t | queue_id, | ||
struct rte_mbuf ** | pkts, | ||
uint16_t | count | ||
) |
This function adds buffers to the virtio devices RX virtqueue. Buffers can be received from the physical port or from another virtual device. A packet count is returned to indicate the number of packets that were successfully added to the RX queue.
vid | vhost device ID |
queue_id | virtio queue index in mq case |
pkts | array to contain packets to be enqueued |
count | packets num to be enqueued |
uint16_t rte_vhost_dequeue_burst | ( | int | vid, |
uint16_t | queue_id, | ||
struct rte_mempool * | mbuf_pool, | ||
struct rte_mbuf ** | pkts, | ||
uint16_t | count | ||
) |
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.
vid | vhost device ID |
queue_id | virtio queue index in mq case |
mbuf_pool | mbuf_pool where host mbuf is allocated. |
pkts | array to contain packets to be dequeued |
count | packets num to be dequeued |
int rte_vhost_get_mem_table | ( | int | vid, |
struct rte_vhost_memory ** | mem | ||
) |
Get guest mem table: a list of memory regions.
An rte_vhost_vhost_memory object will be allocated internally, to hold the guest memory regions. Application should free it at destroy_device() callback.
vid | vhost device ID |
mem | To store the returned mem regions |
int rte_vhost_get_vhost_vring | ( | int | vid, |
uint16_t | vring_idx, | ||
struct rte_vhost_vring * | vring | ||
) |
Get guest vring info, including the vring address, vring size, etc.
vid | vhost device ID |
vring_idx | vring index |
vring | the structure to hold the requested vring info |
int rte_vhost_vring_call | ( | int | vid, |
uint16_t | vring_idx | ||
) |
Notify the guest that used descriptors have been added to the vring. This function acts as a memory barrier.
vid | vhost device ID |
vring_idx | vring index |
uint32_t rte_vhost_rx_queue_count | ( | int | vid, |
uint16_t | qid | ||
) |
Get vhost RX queue avail count.
vid | vhost device ID |
qid | virtio queue index in mq case |
int __rte_experimental rte_vhost_get_log_base | ( | int | vid, |
uint64_t * | log_base, | ||
uint64_t * | log_size | ||
) |
Get log base and log size of the vhost device
vid | vhost device ID |
log_base | vhost log base |
log_size | vhost log size |
int __rte_experimental rte_vhost_get_vring_base | ( | int | vid, |
uint16_t | queue_id, | ||
uint16_t * | last_avail_idx, | ||
uint16_t * | last_used_idx | ||
) |
Get last_avail/used_idx of the vhost virtqueue
vid | vhost device ID |
queue_id | vhost queue index |
last_avail_idx | vhost last_avail_idx to get |
last_used_idx | vhost last_used_idx to get |
int __rte_experimental rte_vhost_set_vring_base | ( | int | vid, |
uint16_t | queue_id, | ||
uint16_t | last_avail_idx, | ||
uint16_t | last_used_idx | ||
) |
Set last_avail/used_idx of the vhost virtqueue
vid | vhost device ID |
queue_id | vhost queue index |
last_avail_idx | last_avail_idx to set |
last_used_idx | last_used_idx to set |
int __rte_experimental rte_vhost_extern_callback_register | ( | int | vid, |
struct rte_vhost_user_extern_ops const *const | ops, | ||
void * | ctx | ||
) |
Register external message handling callbacks
vid | vhost device ID |
ops | virtio external callbacks to register |
ctx | additional context passed to the callbacks |
int __rte_experimental rte_vhost_get_vdpa_device_id | ( | int | vid | ) |
Get vdpa device id for vhost device.
vid | vhost device id |