diff options
author | John Levon <john.levon@nutanix.com> | 2021-02-09 16:28:00 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-09 16:28:00 +0000 |
commit | 1f2f31da25baf794610df251b2df7a127f9cf5f2 (patch) | |
tree | 4adf35c66638adf3ab041e0560355fd6e6f65aa6 /lib | |
parent | 2358bc9c610a50c542b3cb33a8eba0363c9e5315 (diff) | |
download | libvfio-user-1f2f31da25baf794610df251b2df7a127f9cf5f2.zip libvfio-user-1f2f31da25baf794610df251b2df7a127f9cf5f2.tar.gz libvfio-user-1f2f31da25baf794610df251b2df7a127f9cf5f2.tar.bz2 |
introduce transport send_msg() handler (#314)
Signed-off-by: John Levon <john.levon@nutanix.com>
Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/irq.c | 8 | ||||
-rw-r--r-- | lib/libvfio-user.c | 12 | ||||
-rw-r--r-- | lib/private.h | 6 | ||||
-rw-r--r-- | lib/tran_sock.c | 12 |
4 files changed, 28 insertions, 10 deletions
@@ -427,10 +427,10 @@ vfu_irq_message(vfu_ctx_t *vfu_ctx, uint32_t subindex) } irq_info.subindex = subindex; - ret = tran_sock_msg(vfu_ctx->conn_fd, msg_id, - VFIO_USER_VM_INTERRUPT, - &irq_info, sizeof irq_info, - NULL, NULL, 0); + ret = vfu_ctx->trans->send_msg(vfu_ctx, msg_id, + VFIO_USER_VM_INTERRUPT, + &irq_info, sizeof irq_info, + NULL, NULL, 0); if (ret < 0) { /* FIXME should return -errno */ errno = -ret; diff --git a/lib/libvfio-user.c b/lib/libvfio-user.c index 98ddef3..868af07 100644 --- a/lib/libvfio-user.c +++ b/lib/libvfio-user.c @@ -1445,9 +1445,9 @@ vfu_dma_read(vfu_ctx_t *vfu_ctx, dma_sg_t *sg, void *data) dma_send.addr = sg->dma_addr; dma_send.count = sg->length; - ret = tran_sock_msg(vfu_ctx->conn_fd, msg_id, VFIO_USER_DMA_READ, - &dma_send, sizeof dma_send, NULL, - dma_recv, recv_size); + ret = vfu_ctx->trans->send_msg(vfu_ctx, msg_id, VFIO_USER_DMA_READ, + &dma_send, sizeof dma_send, NULL, + dma_recv, recv_size); memcpy(data, dma_recv->data, sg->length); /* FIXME no need for memcpy */ free(dma_recv); @@ -1471,9 +1471,9 @@ vfu_dma_write(vfu_ctx_t *vfu_ctx, dma_sg_t *sg, void *data) dma_send->addr = sg->dma_addr; dma_send->count = sg->length; memcpy(dma_send->data, data, sg->length); /* FIXME no need to copy! */ - ret = tran_sock_msg(vfu_ctx->conn_fd, msg_id, VFIO_USER_DMA_WRITE, - dma_send, send_size, NULL, - &dma_recv, sizeof(dma_recv)); + ret = vfu_ctx->trans->send_msg(vfu_ctx, msg_id, VFIO_USER_DMA_WRITE, + dma_send, send_size, NULL, + &dma_recv, sizeof(dma_recv)); free(dma_send); return ret; diff --git a/lib/private.h b/lib/private.h index b464e04..98b94ff 100644 --- a/lib/private.h +++ b/lib/private.h @@ -50,6 +50,12 @@ struct transport_ops { int (*get_request)(vfu_ctx_t *vfu_ctx, struct vfio_user_header *hdr, int *fds, size_t *nr_fds); + int (*send_msg)(vfu_ctx_t *vfu_ctx, uint16_t msg_id, + enum vfio_user_command cmd, + void *send_data, size_t send_len, + struct vfio_user_header *hdr, + void *recv_data, size_t recv_len); + void (*detach)(vfu_ctx_t *vfu_ctx); void (*fini)(vfu_ctx_t *vfu_ctx); }; diff --git a/lib/tran_sock.c b/lib/tran_sock.c index c756d39..f8838de 100644 --- a/lib/tran_sock.c +++ b/lib/tran_sock.c @@ -710,6 +710,17 @@ tran_sock_get_request(vfu_ctx_t *vfu_ctx, struct vfio_user_header *hdr, return get_msg(hdr, sizeof *hdr, fds, nr_fds, vfu_ctx->conn_fd, sock_flags); } +static int +tran_sock_send_msg(vfu_ctx_t *vfu_ctx, uint16_t msg_id, + enum vfio_user_command cmd, + void *send_data, size_t send_len, + struct vfio_user_header *hdr, + void *recv_data, size_t recv_len) +{ + return tran_sock_msg(vfu_ctx->conn_fd, msg_id, cmd, send_data, send_len, + hdr, recv_data, recv_len); +} + static void tran_sock_detach(vfu_ctx_t *vfu_ctx) { @@ -732,6 +743,7 @@ struct transport_ops tran_sock_ops = { .init = tran_sock_init, .attach = tran_sock_attach, .get_request = tran_sock_get_request, + .send_msg = tran_sock_send_msg, .detach = tran_sock_detach, .fini = tran_sock_fini }; |