UMNET: user mode virtual multi stack support
umnet is the View-OS module for multi-networking. In fact it supports the multi stack extension to the Berkeley Socket API named msockets.
From the user's point of view, umnet can be loaded in this way
Like many other View-OS modules umnet enables the mount operation for sub-modules prefixed by umnet
mount -t umnetnull none /dev/net/null mount -t umnetnative none /dev/net/native
The former example define /dev/net/null to be a null network (socket/msocket calls fail, no networking is possible using /dev/net/null). The latter is a gateway to the native stack of the hosting operating system. All the (m)sockets opened on /dev/net/native will use the networking stack provided by the hosting OS.
umnet provides also the msocket backward compatibility tool named mstack.
mstack /dev/net/native ip link
gives the same output of ip link (there is a subtle but important difference: the mstack command causes the View-OS hypervisor -- i.e. umview or kmview -- to give the answer, using ip addr the answer comes directly from the kernel to the process bypassing View-OS).
mstack is a backward compatibility tool, not a protection tool. When several stacks are available it is possible to use mstack to switch from one stack to another.
If a stack gets mounted on /dev/net/default, View-OS uses this stack as default.
mount -t umnetnative none /dev/net/default
defines the native network as the default network. The effect of this command is subtle: all the programs seem to access the network in the same way after this command as they did before it.
- Before the command the processes use the kernel stack directly: default networking has not been virtualized.
- After the command the networking calls get virtualized and View-OS (umview or kmview) uses the kernel stack to execute the calls.
mount -t umnetnull -o perm none /dev/net/default
disables networking. The perm option denies the umount operation (the mountpoint will always be busy), thus the operation is not undoable.