LIBVDESTACK(3) | Library Functions Manual | LIBVDESTACK(3) |
vde_addstack, vde_delstack, vde_stackcmd, vde_msocket - vde network namespace as a user library
#include *vdestack.h*
struct vdestack *vde_addstack(char *vdenet, char *ifname);
void vde_delstack(struct vdestack *stack);
int vde_stackcmd(struct vdestack *stack, char *stackcmd);
int vde_msocket(struct vdestack *stack,int domain, int type, int protocol);
void vde_default_stack(struct vdestack *stack);
Libvdestack implements the idea of Internet of Threads through network namespaces. By libvdestack a program can use one (or even several) private networking protocol stack(s), thus a program can be assigned its own IP address(es), routing etc.
vde_addstack returns a struct vdestack pointer which is used as a descriptor and thus passed as an argument to the other functions of this library. NULL is returned in case of error.
vde_stackcmd returns the exit status of the command. If the stackcmd argument is a comma separated sequence of commands, the execution terminates upon the first command whose exit status is not zero, and the exit status of that command is returned. Therefore when vde_stackcmd returns zero the entire sequence was successfully executed.
On success, vde_msocket returns a valid file descriptor. -1 is returned elseways and errno is set appropriately as described in socket(2).
Libvdestack fails if user namespaces have not been configured in the running kernel and enabled for users. In Debian the sysctl knob kernel.unprivileged_userns_clone must be set to 1.
The following excerpt of C code shows the use of libvdestack:
... int fd; int exit_status; struct vdestack *stack = vde_addstack("vde://", NULL); if (stack == NULL) ... error management exit_status = vde_stackcmd(stack, "/bin/ip link set vde0 up;" "/bin/ip addr add 10.0.0.1/24 dev vde0;" "/bin/ip route add default via 10.0.0.254"); if (exit_status != 0) ... error management fd = vde_msocket(stack, AF_INET, SOCK_STREAM, 0); ... fd can be used in any context in which a file descriptor returned by socket(2) can. e.g. bind, accept, connect, read/write, send/recv ... vde_delstack(stack);
socket(2), vde_plug(1)
Bug reports should be addressed to info@virtualsquare.org
VirtualSquare. Project leader: Renzo Davoli.
December 2022 | VirtualSquare |