Provided by: libvdestack0_0.1.2-1_amd64 bug

NAME

       vde_addstack,  vde_delstack,  vde_stackcmd,  vde_msocket - vde network namespace as 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 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 creates a private network namespace: vdenet is the URL-like specification  of
       a  vde  network  as  described  in vde_plug(1). ifname is the name of the interface in the
       network namespace. When ifname is NULL, the default interface name is vde0.

       vde_delstack destroys a vdestack when it is no longer needed.

       vde_stackcmd run a command or a comma  separated  sequence  of  commands  in  the  private
       network  namespace. The purpose of this function is to configure the networking parameters
       and options (e.g. IP address, routing). For security reasons, commands must  be  specified
       using  full  pathnames.  Do not use this function to start long lasting or non terminating
       programs, the caller waits for the termination of the command sequence.

       vde_msocket has the same semantics of socket(2) except that the socket is defined  in  the
       scope  of  the  network  namespace  whose  descriptor is the first argument. The remaining
       arguments are those defined in socket(2).

       vde_default_stack defines the default stack: any successive socket(2) call  will  use  the
       stack passed as parameter to vde_default_stack. Use NULL to undefine the default stack.

RETURN VALUE

       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).

NOTES

       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.

EXAMPLE

       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);

SEE ALSO

       socket(2), vde_plug(1)

BUGS

       Bug reports should be addressed to info@virtualsquare.org

AUTHOR

       VirtualSquare. Project leader: Renzo Davoli.