vsock-tcp (VM Socket TCP)

Header: udo/vsock-tcp.h

Table of contents (click to go)

Macros

Enums

Unions

Structs

  1. udo_vsock_tcp

  2. udo_vsock_tcp_server_create_info

  3. udo_vsock_tcp_client_create_info

Functions

  1. udo_vsock_tcp_server_create()

  2. udo_vsock_tcp_server_accept()

  3. udo_vsock_tcp_client_create()

  4. udo_vsock_tcp_client_connect()

  5. udo_vsock_tcp_client_send_data()

  6. udo_vsock_tcp_get_fd()

  7. udo_vsock_tcp_get_vcid()

  8. udo_vsock_tcp_get_port()

  9. udo_vsock_tcp_destroy()

  10. udo_vsock_tcp_get_sizeof()

  11. udo_vsock_tcp_get_local_vcid()

  12. udo_vsock_tcp_recv_data()

  13. udo_vsock_tcp_send_data()

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_tcp (private)

Structure defining UDO VM Socket TCP context.
struct udo_vsock_tcp
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 occured
for the given context and may later be retrieved
by caller.
free
If structure allocated with calloc(3) member will be
set to true so that, we know to call free(3) when
destroying the context.
fd
File descriptor to the open VM socket.
vcid
VM Context Identifier.
port
Network port number to connect(2) to or accept(2) from.
addr
Stores byte information about the VM socket context.
Is used for client connect(2) and server accept(2).

udo_vsock_tcp_server_create_info

Structure passed to udo_vsock_tcp_server_create()
used to define how to create the server.
struct udo_vsock_tcp_server_create_info
uint32_t vcid;
int port;
int connections;
vcid
VM Context Identifier to accept(2) with.
port
Network port to accept(2) with.
connections
Amount of connections that may be queued
at a given moment.

udo_vsock_tcp_server_create

struct udo_vsock_tcp *udo_vsock_tcp_server_create(struct udo_vsock_tcp *vsock, const void *vsock_info);
Creates a VM socket that may be utilized for server socket operations.

Param

Decription

vsock

May be NULL or a pointer to a struct udo_vsock_tcp.
If NULL memory will be allocated and return to
caller. If not NULL address passed will be used
to store the newly created struct udo_vsock_tcp
context.

vsock_info

Implementation uses a pointer to a
Returns:
on success: Pointer to a struct udo_vsock_tcp
on failure: NULL

udo_vsock_tcp_server_accept

int udo_vsock_tcp_server_accept(struct udo_vsock_tcp *vsock, struct sockaddr_vm *addr);
Accepts client connections returns open
file descriptor to the connected client.

Param

Decription

vsock

Must pass a pointer to a struct udo_vsock_tcp.

addr

May be NULL or a pointer to a struct sockaddr_vm
If not NULL addr is filled in via accept(2) call.
Returns:
on success: Open file descriptor to accepted client
on failure: -1

udo_vsock_tcp_client_create_info

Structure passed to udo_vsock_tcp_client_create()
used to define how to create the client.
struct udo_vsock_tcp_client_create_info
uint32_t vcid;
int port;
vcid
VM Context Identifier to connect(2)/send(2) to.
port
Network port to connect(2)/send(2) to.

udo_vsock_tcp_client_create

struct udo_vsock_tcp *udo_vsock_tcp_client_create(struct udo_vsock_tcp *vsock, const void *vsock_info);
Creates a VM socket that may be utilized for client socket operations.

Param

Decription

vsock

May be NULL or a pointer to a struct udo_vsock_tcp.
If NULL memory will be allocated and return to
caller. If not NULL address passed will be used
to store the newly created struct udo_vsock_tcp
context.

vsock_info

Implementation uses a pointer to a
Returns:
on success: Pointer to a struct udo_vsock_tcp
on failure: NULL

udo_vsock_tcp_client_connect

int udo_vsock_tcp_client_connect(struct udo_vsock_tcp *vsock);
Connects client socket to address provided via

Param

Decription

vsock

Must pass a pointer to a struct udo_vsock_tcp.
Returns:
on success: 0
on failure: -1

udo_vsock_tcp_client_send_data

ssize_t udo_vsock_tcp_client_send_data(struct udo_vsock_tcp *vsock, const void *data, const size_t size, const void *vsock_info);
Send data to client socket address provided via

Param

Decription

vsock

Must pass a pointer to a struct udo_vsock_tcp.

data

Pointer to buffer to send through socket.

size

Size of data to send through socket.

vsock_info

Reserved for future usage. For now used
to set the flag argument of send(2).
Returns:
on success: Amount of bytes sent
on failure: # < 0

udo_vsock_tcp_get_fd

int udo_vsock_tcp_get_fd(struct udo_vsock_tcp *vsock);
Acquire VM socket file descriptor associated with
struct udo_vsock_tcp context.

Param

Decription

vsock

Must pass a pointer to a struct udo_vsock_tcp.
Returns:
on success: VM socket file descriptor
on failure: -1

udo_vsock_tcp_get_vcid

uint32_t udo_vsock_tcp_get_vcid(struct udo_vsock_tcp *vsock);
Acquire VM socket context identifier associated with
struct udo_vsock_tcp context.

Param

Decription

vsock

Must pass a pointer to a struct udo_vsock_tcp.
Returns:
on success: VM socket context identifier
on failure: UINT32_MAX

udo_vsock_tcp_get_port

int udo_vsock_tcp_get_port(struct udo_vsock_tcp *vsock);
Acquire network port associated with
struct udo_vsock_tcp context.

Param

Decription

vsock

Must pass a pointer to a struct udo_vsock_tcp.
Returns:
on success: Network port connected to context
on failure: -1

udo_vsock_tcp_destroy

void udo_vsock_tcp_destroy(struct udo_vsock_tcp *vsock);
Frees any allocated memory and closes FD’s (if open) created after

Param

Decription

vsock

Pointer to a valid struct udo_vsock_tcp.

udo_vsock_tcp_get_sizeof

int udo_vsock_tcp_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(struct udo_vsock_tcp)
on failure: sizeof(struct udo_vsock_tcp)

udo_vsock_tcp_get_local_vcid

uint32_t udo_vsock_tcp_get_local_vcid(void);
Returns the local CID of the VM/Hypervisor after
acquiring it from /dev/vsock.
Returns:
on success: Local VM context identifer
on failure: UINT32_MAX

udo_vsock_tcp_recv_data

ssize_t udo_vsock_tcp_recv_data(const int sock_fd, void *data, const size_t size, 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.

vsock_info

Reserved for future usage. For now used
to set the flag argument of recv(2).
Returns:
on success: Amount of bytes received
on failure: # < 0

udo_vsock_tcp_send_data

ssize_t udo_vsock_tcp_send_data(const int sock_fd, const void *data, const size_t size, 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.

vsock_info

Reserved for future usage. For now used
to set the flag argument of send(2).
Returns:
on success: Amount of bytes sent
on failure: # < 0