vhost: pass socket fd to message handling callbacks
This is not used for now, but will be needed for the special handling of VHOST_USER_SET_MEM_TABLE message once postcopy will be supported. Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
parent
c00bb88d35
commit
02ef07efc0
@ -128,14 +128,16 @@ vhost_backend_cleanup(struct virtio_net *dev)
|
||||
*/
|
||||
static int
|
||||
vhost_user_set_owner(struct virtio_net **pdev __rte_unused,
|
||||
struct VhostUserMsg *msg __rte_unused)
|
||||
struct VhostUserMsg *msg __rte_unused,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
return VH_RESULT_OK;
|
||||
}
|
||||
|
||||
static int
|
||||
vhost_user_reset_owner(struct virtio_net **pdev,
|
||||
struct VhostUserMsg *msg __rte_unused)
|
||||
struct VhostUserMsg *msg __rte_unused,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
vhost_destroy_device_notify(dev);
|
||||
@ -149,7 +151,8 @@ vhost_user_reset_owner(struct virtio_net **pdev,
|
||||
* The features that we support are requested.
|
||||
*/
|
||||
static int
|
||||
vhost_user_get_features(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_get_features(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
uint64_t features = 0;
|
||||
@ -166,7 +169,8 @@ vhost_user_get_features(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
* The queue number that we support are requested.
|
||||
*/
|
||||
static int
|
||||
vhost_user_get_queue_num(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_get_queue_num(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
uint32_t queue_num = 0;
|
||||
@ -183,7 +187,8 @@ vhost_user_get_queue_num(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
* We receive the negotiated features supported by us and the virtio device.
|
||||
*/
|
||||
static int
|
||||
vhost_user_set_features(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_set_features(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
uint64_t features = msg->payload.u64;
|
||||
@ -265,7 +270,8 @@ vhost_user_set_features(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
*/
|
||||
static int
|
||||
vhost_user_set_vring_num(struct virtio_net **pdev,
|
||||
struct VhostUserMsg *msg)
|
||||
struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
struct vhost_virtqueue *vq = dev->virtqueue[msg->payload.state.index];
|
||||
@ -627,7 +633,8 @@ translate_ring_addresses(struct virtio_net *dev, int vq_index)
|
||||
* This function then converts these to our address space.
|
||||
*/
|
||||
static int
|
||||
vhost_user_set_vring_addr(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_set_vring_addr(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
struct vhost_virtqueue *vq;
|
||||
@ -664,7 +671,8 @@ vhost_user_set_vring_addr(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
*/
|
||||
static int
|
||||
vhost_user_set_vring_base(struct virtio_net **pdev,
|
||||
struct VhostUserMsg *msg)
|
||||
struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
dev->virtqueue[msg->payload.state.index]->last_used_idx =
|
||||
@ -797,7 +805,8 @@ vhost_memory_changed(struct VhostUserMemory *new,
|
||||
}
|
||||
|
||||
static int
|
||||
vhost_user_set_mem_table(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_set_mem_table(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
struct VhostUserMemory memory = msg->payload.memory;
|
||||
@ -1013,7 +1022,8 @@ virtio_is_ready(struct virtio_net *dev)
|
||||
}
|
||||
|
||||
static int
|
||||
vhost_user_set_vring_call(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_set_vring_call(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
struct vhost_vring_file file;
|
||||
@ -1037,7 +1047,8 @@ vhost_user_set_vring_call(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
}
|
||||
|
||||
static int vhost_user_set_vring_err(struct virtio_net **pdev __rte_unused,
|
||||
struct VhostUserMsg *msg)
|
||||
struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
if (!(msg->payload.u64 & VHOST_USER_VRING_NOFD_MASK))
|
||||
close(msg->fds[0]);
|
||||
@ -1047,7 +1058,8 @@ static int vhost_user_set_vring_err(struct virtio_net **pdev __rte_unused,
|
||||
}
|
||||
|
||||
static int
|
||||
vhost_user_set_vring_kick(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_set_vring_kick(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
struct vhost_vring_file file;
|
||||
@ -1106,7 +1118,8 @@ free_zmbufs(struct vhost_virtqueue *vq)
|
||||
*/
|
||||
static int
|
||||
vhost_user_get_vring_base(struct virtio_net **pdev,
|
||||
struct VhostUserMsg *msg)
|
||||
struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
struct vhost_virtqueue *vq = dev->virtqueue[msg->payload.state.index];
|
||||
@ -1162,7 +1175,8 @@ vhost_user_get_vring_base(struct virtio_net **pdev,
|
||||
*/
|
||||
static int
|
||||
vhost_user_set_vring_enable(struct virtio_net **pdev,
|
||||
struct VhostUserMsg *msg)
|
||||
struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
int enable = (int)msg->payload.state.num;
|
||||
@ -1190,7 +1204,8 @@ vhost_user_set_vring_enable(struct virtio_net **pdev,
|
||||
|
||||
static int
|
||||
vhost_user_get_protocol_features(struct virtio_net **pdev,
|
||||
struct VhostUserMsg *msg)
|
||||
struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
uint64_t features, protocol_features;
|
||||
@ -1215,7 +1230,8 @@ vhost_user_get_protocol_features(struct virtio_net **pdev,
|
||||
|
||||
static int
|
||||
vhost_user_set_protocol_features(struct virtio_net **pdev,
|
||||
struct VhostUserMsg *msg)
|
||||
struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
uint64_t protocol_features = msg->payload.u64;
|
||||
@ -1232,7 +1248,8 @@ vhost_user_set_protocol_features(struct virtio_net **pdev,
|
||||
}
|
||||
|
||||
static int
|
||||
vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
int fd = msg->fds[0];
|
||||
@ -1298,7 +1315,8 @@ vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
}
|
||||
|
||||
static int vhost_user_set_log_fd(struct virtio_net **pdev __rte_unused,
|
||||
struct VhostUserMsg *msg)
|
||||
struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
close(msg->fds[0]);
|
||||
RTE_LOG(INFO, VHOST_CONFIG, "not implemented.\n");
|
||||
@ -1315,7 +1333,8 @@ static int vhost_user_set_log_fd(struct virtio_net **pdev __rte_unused,
|
||||
* a flag 'broadcast_rarp' to let rte_vhost_dequeue_burst() inject it.
|
||||
*/
|
||||
static int
|
||||
vhost_user_send_rarp(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_send_rarp(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
uint8_t *mac = (uint8_t *)&msg->payload.u64;
|
||||
@ -1345,7 +1364,8 @@ vhost_user_send_rarp(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
}
|
||||
|
||||
static int
|
||||
vhost_user_net_set_mtu(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_net_set_mtu(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
if (msg->payload.u64 < VIRTIO_MIN_MTU ||
|
||||
@ -1362,7 +1382,8 @@ vhost_user_net_set_mtu(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
}
|
||||
|
||||
static int
|
||||
vhost_user_set_req_fd(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_set_req_fd(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
int fd = msg->fds[0];
|
||||
@ -1429,7 +1450,8 @@ is_vring_iotlb_invalidate(struct vhost_virtqueue *vq,
|
||||
}
|
||||
|
||||
static int
|
||||
vhost_user_iotlb_msg(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
vhost_user_iotlb_msg(struct virtio_net **pdev, struct VhostUserMsg *msg,
|
||||
int main_fd __rte_unused)
|
||||
{
|
||||
struct virtio_net *dev = *pdev;
|
||||
struct vhost_iotlb_msg *imsg = &msg->payload.iotlb;
|
||||
@ -1474,7 +1496,8 @@ vhost_user_iotlb_msg(struct virtio_net **pdev, struct VhostUserMsg *msg)
|
||||
}
|
||||
|
||||
typedef int (*vhost_message_handler_t)(struct virtio_net **pdev,
|
||||
struct VhostUserMsg *msg);
|
||||
struct VhostUserMsg *msg,
|
||||
int main_fd);
|
||||
static vhost_message_handler_t vhost_message_handlers[VHOST_USER_MAX] = {
|
||||
[VHOST_USER_NONE] = NULL,
|
||||
[VHOST_USER_GET_FEATURES] = vhost_user_get_features,
|
||||
@ -1749,7 +1772,7 @@ vhost_user_msg_handler(int vid, int fd)
|
||||
if (request > VHOST_USER_NONE && request < VHOST_USER_MAX) {
|
||||
if (!vhost_message_handlers[request])
|
||||
goto skip_to_post_handle;
|
||||
ret = vhost_message_handlers[request](&dev, &msg);
|
||||
ret = vhost_message_handlers[request](&dev, &msg, fd);
|
||||
|
||||
switch (ret) {
|
||||
case VH_RESULT_ERR:
|
||||
|
Loading…
x
Reference in New Issue
Block a user