LIBVDESTACK(3)
π LIBVDESTACK β the libvdestack manual page, bestie edition π
okay so. this is a library functions manual page for libvdestack, and it is genuinely one of the coolest little libraries out here. sit down, grab a boba, we're learning π§β¨
β¨ NAME β¨
vde_addstack, vde_delstack, vde_stackcmd, vde_msocket β a vde network namespace living inside your program like a user library π«Ά
πΈ SYNOPSIS πΈ
#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);
π¦ DESCRIPTION π¦
Libvdestack is the whole Internet of Threads dream made real through network namespaces. the way that a program can justβ¦ have one (or even several π) private networking protocol stack(s) of its very own? iconic. that means your program can get assigned its own IP address(es), its own routing, all of it. main character energy, no cap π
vde_addstackβ creates a private network namespace πvdenetis the URL-like specification of a vde network, as described in:vde_plug(1).ifnameis the name of the interface in the network namespace. and whenifnameisNULL, the default interface:nameisvde0.vde_delstackβ destroys a vdestack once you don't need it anymore. it's giving cleanup era π§Ήvde_stackcmdβ runs a command, or a comma separated sequence of commands, inside the private network namespace. the whole point of this one is configuring your networking parameters and options (think IP address, routing, that vibe). β οΈ for security reasons, commands must be specified using full pathnames. and do not use this function to start long lasting or non terminating programs β the caller waits for the termination of the command sequence, so it will simply sit there. it's giving "waiting for your situationship to text back" πvde_msocketβ same semantics assocket(2), except the socket is defined in the scope of the network namespace whose descriptor is the first argument. the remaining arguments are exactly those defined insocket(2). slay πvde_default_stackβ defines the default stack: any successivesocket(2)call will use the stack you passed as a parameter tovde_default_stack. passNULLto undefine the default stack. bye bestie π
β RETURN VALUE β
vde_addstack returns a struct vdestack pointer, which gets used as a descriptor and therefore passed as an argument to the other functions in this library. NULL is returned in case of error. π
vde_stackcmd returns the exit status of the command. and if the stackcmd argument is a comma separated sequence of commands, execution terminates upon the first command whose exit status is not zero, and the exit status of that command is what comes back. so when vde_stackcmd returns zero, the entire sequence was successfully executed. periodt π―
On success, vde_msocket returns a valid file descriptor. -1 is returned elseways, and errno is set appropriately as described in socket(2).
π NOTES π
Libvdestack fails if user namespaces have not been configured in the running kernel and enabled for users. lowkey crucial. in Debian, the sysctl knob kernel.unprivileged_userns_clone must be set to 1. π«‘
π EXAMPLE π
here's an excerpt of C code showing libvdestack in the wild:
...
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);
ate, honestly π₯
π SEE ALSO π
π BUGS π
Bug reports should be addressed to info@virtualsquare.org β they want to hear from you bestie, fr fr π¬
π AUTHOR π
VirtualSquare. Project leader: Renzo Davoli.
and that's the whole page! this gem comes to you from VirtualSquare, dated August 2024 π go forth and namespace responsibly, bestie πβ¨π¦
π¦ where this page comes from
- ubuntu questing: libvdestack0 0.1.4-1
- ubuntu resolute: libvdestack0 0.1.4-2 Β· LGPL-2.1-or-later
- ubuntu stonking: libvdestack0 0.1.4-2 Β· LGPL-2.1-or-later
- Copyright (C) 2019 VirtualSquare. Project Leader: Renzo Davoli
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms