SHMIF(4) Device Drivers Manual SHMIF(4)

shmif
rump kernel shared memory network interface

#include <rump/rump.h>

int
rump_pub_shmif_create(const char *path, int *ifnum);

The shmif interface uses a memory mapped regular file as a virtual Ethernet bus. All interfaces connected to the same bus see each others' traffic.

Using a memory mapped regular file as a bus has two implications:

  1. The bus identifier is not in flat global namespace.
  2. Configuring and using the interface is possible without superuser privileges on the host (normal host file access permissions for the bus hold).

It is not possible to directly access the host networking facilities from a rump kernel using purely shmif. However, traffic can be routed to another rump kernel instance which provides both shmif and virt(4) networking.

An shmif interface can be created in two ways:

Destroying an shmif interface is possible only via ifconfig(8) destroy.

An shmif interface emulates TX/RX offload options in software. They are specified by ifconfig(8). Alternatively, its if_capenable flag is directly specified by environment variable RUMP_SHMIF_CAPENABLE, for example:

0x7ff80
for all TX/RX offload
0x6aa80
for all TX offload
0x15500
for all RX offload

See /usr/include/net/if.h for more details.

rump(3), virt(4), ifconfig(8)
December 12, 2018 NetBSD 9.4