aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJohn Levon <john.levon@nutanix.com>2021-02-09 16:28:00 +0000
committerGitHub <noreply@github.com>2021-02-09 16:28:00 +0000
commit1f2f31da25baf794610df251b2df7a127f9cf5f2 (patch)
tree4adf35c66638adf3ab041e0560355fd6e6f65aa6 /lib
parent2358bc9c610a50c542b3cb33a8eba0363c9e5315 (diff)
downloadlibvfio-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.c8
-rw-r--r--lib/libvfio-user.c12
-rw-r--r--lib/private.h6
-rw-r--r--lib/tran_sock.c12
4 files changed, 28 insertions, 10 deletions
diff --git a/lib/irq.c b/lib/irq.c
index 36d7346..c3428e3 100644
--- a/lib/irq.c
+++ b/lib/irq.c
@@ -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
};