vsock-udp (VM Socket UDP | WIP)ï
Header: udo/vsock-udp.h
Table of contents (click to go)ï
Macrosï
Enumsï
Unionsï
Structsï
Functionsï
API Documentationï
Kernel Modulesï
On Host Machine
sudo modprobe -a vhost_vsock vsock_loopback
Guest Machine Kernel Config Symbols
CONFIG_PCI=Y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BALLON=y
CONFIG_VSOCKETS_DIAG=y
CONFIG_NET=y
CONFIG_VSOCKETS=y
CONFIG_VIRTIO_VSOCKETS=y
udo_vsock_udp (private)ï
Structure defining UDO VM Socket UDP context.
-
struct udo_vsock_udpï
-
struct udo_log_error_struct err;ï
-
bool free;ï
-
int fd;ï
-
uint32_t vcid;ï
-
int port;ï
-
struct sockaddr_vm addr;ï
err- Stores information about the error that occuredfor the given context and may later be retrievedby caller.
freefd- File descriptor to the open VM socket.
vcid- VM Context Identifier.
port- Network port number to recvfrom(2)/sendto(2) with.
addr- Stores byte information about the VM socket context.
-
struct udo_log_error_struct err;ï
udo_vsock_udp_server_create_infoï
Structure passed to
udo_vsock_udp_server_create()used to define how to create the server.
-
struct udo_vsock_udp_server_create_infoï
-
vcid- VM Context Identifier to recvfrom(2)/sendto(2) data with.
port- Network port to recvfrom(2)/sendto(2) data with.
udo_vsock_udp_server_createï
-
struct udo_vsock_udp *udo_vsock_udp_server_create(struct udo_vsock_udp *vsock, const void *vsock_info);ï
Creates a VM socket that may be utilized for server socket operations.
Param
Decription
vsock
IfNULLmemory will be allocated and return tocaller. If notNULLaddress passed will be usedto store the newly createdstructudo_vsock_udpcontext.vsock_info
Implementation uses a pointer to astructudo_vsock_udp_server_create_info.
- Returns:
on success: Pointer to astructudo_vsock_udpon failure:NULL
udo_vsock_udp_server_acceptï
-
int udo_vsock_udp_server_accept(struct udo_vsock_udp *vsock, const struct sockaddr_vm *addr);ï
Creates file descriptor that can filter for
addr data comming to server file descriptor.Useful to utilize in an epoll(2) event loop
if caller wants to implement tcp like event
handling with UDP sockets.
Param
Decription
vsock
Must pass a pointer to astructudo_vsock_udp.addr
Must pass a pointer to a populatedstructsockaddr_vm.
- Returns:
on success: Open file descriptor to filtered socketon failure: -1
udo_vsock_udp_server_recv_dataï
-
ssize_t udo_vsock_udp_server_recv_data(struct udo_vsock_udp *vsock, void *data, const size_t size, struct sockaddr_vm *addr, const void *vsock_info);ï
Receive data from server socket file descriptor.
Param
Decription
vsock
Pointer to astructudo_vsock_udpcontext.data
Pointer to buffer to store data received from a socket.size
Size of data to receive from a socket.addr
Pointer tostructsockaddr_vm which stores theaddress information of the socket that datawas received from.vsock_info
Reserved for future usage. For now usedto set the flag argument of recvfrom(2).
- Returns:
on success: Amount of bytes receivedon failure: # < 0
udo_vsock_udp_client_create_infoï
Structure passed to
udo_vsock_udp_client_create()used to define how to create the client.
-
struct udo_vsock_udp_client_create_infoï
-
vcid- VM Context Identifier to sendto(2)/recvfrom(2) data with.
port- Network port to sendto(2)/recvfrom(2) data with.
udo_vsock_udp_client_createï
-
struct udo_vsock_udp *udo_vsock_udp_client_create(struct udo_vsock_udp *vsock, const void *vsock_info);ï
Creates a VM socket that may be utilized for client socket operations.
Param
Decription
vsock
IfNULLmemory will be allocated and return tocaller. If notNULLaddress passed will be usedto store the newly createdstructudo_vsock_udpcontext.vsock_info
Implementation uses a pointer to astructudo_vsock_udp_client_create_info.
- Returns:
on success: Pointer to astructudo_vsock_udpon failure:NULL
udo_vsock_udp_client_connectï
-
int udo_vsock_udp_client_connect(struct udo_vsock_udp *vsock);ï
Fliters client socket to allow sending data
Address is populated with a call to
udo_sock_udp_client_create().
Param
Decription
vsock
Must pass a pointer to astructudo_vsock_udp.
- Returns:
on success: 0on failure: -1
udo_vsock_udp_client_send_dataï
-
ssize_t udo_vsock_udp_client_send_data(struct udo_vsock_udp *vsock, const void *data, const size_t size, const void *vsock_info);ï
Send data to client socket address provided via
call to
udo_vsock_udp_client_create().
Param
Decription
vsock
Must pass a pointer to astructudo_vsock_udp.data
Pointer to buffer to send through socket.size
Size of data to send through socket.vsock_info
Reserved for future usage. For now usedto set the flag argument of sendto(2).
- Returns:
on success: Amount of bytes senton failure: # < 0
udo_vsock_udp_get_fdï
-
int udo_vsock_udp_get_fd(struct udo_vsock_udp *vsock);ï
Acquire VM socket file descriptor associated with
struct udo_vsock_udp context.
Param
Decription
vsock
Must pass a pointer to astructudo_vsock_udp.
- Returns:
on success: VM socket file descriptoron failure: -1
udo_vsock_udp_get_vcidï
-
uint32_t udo_vsock_udp_get_vcid(struct udo_vsock_udp *vsock);ï
Acquire VM socket context identifier associated with
struct udo_vsock_udp context.
Param
Decription
vsock
Must pass a pointer to astructudo_vsock_udp.
- Returns:
on success: VM socket context identifieron failure:UINT32_MAX
udo_vsock_udp_get_portï
-
int udo_vsock_udp_get_port(struct udo_vsock_udp *vsock);ï
Acquire network port associated with
struct udo_vsock_udp context.
Param
Decription
vsock
Must pass a pointer to astructudo_vsock_udp.
- Returns:
on success: Network port connected to contexton failure: -1
udo_vsock_udp_destroyï
-
void udo_vsock_udp_destroy(struct udo_vsock_udp *vsock);ï
Frees any allocated memory and closes FDâs (if open) created after
Param
Decription
vsock
Pointer to a validstructudo_vsock_udp.
udo_vsock_udp_get_sizeofï
-
int udo_vsock_udp_get_sizeof(void);ï
Returns size of the internal structure. So,
if caller decides to allocate memory outside
of API interface they know the exact amount
of bytes.
- Returns:
on success: sizeof(structudo_vsock_udp)on failure: sizeof(structudo_vsock_udp)
udo_vsock_udp_get_local_vcidï
-
uint32_t udo_vsock_udp_get_local_vcid(void);ï
Returns the local CID of the VM/Hypervisor after
acquiring it from
/dev/vsock.
- Returns:
on success: Local VM context identiferon failure:UINT32_MAX
udo_vsock_udp_recv_dataï
-
ssize_t udo_vsock_udp_recv_data(const int sock_fd, void *data, const size_t size, struct sockaddr_vm *addr, const void *vsock_info);ï
Receive data from socket file descriptor.
Param
Decription
sock_fd
Socket file descriptor to receive data from.data
Pointer to buffer to store data received from a socket.size
Size of data to receive from a socket.addr
Pointer tostructsockaddr_vm which stores theaddress information of the socket that datawas received from.vsock_info
Reserved for future usage. For now usedto set the flag argument of recvfrom(2).
- Returns:
on success: Amount of bytes receivedon failure: # < 0
udo_vsock_udp_send_dataï
-
ssize_t udo_vsock_udp_send_data(const int sock_fd, const void *data, const size_t size, const struct sockaddr_vm *addr, const void *vsock_info);ï
Send data to socket file descriptor.
Param
Decription
sock_fd
Socket file descriptor to send data to.data
Pointer to buffer to send through socket.size
Size of data to send through socket.addr
Pointer tostructsockaddr_vm which stores theaddress information of a socket that datawill be sent to.vsock_info
Reserved for future usage. For now usedto set the flag argument of sendto(2).
- Returns:
on success: Amount of bytes senton failure: # < 0