io-pkt-v4, io-pkt-v4-hc, io-pkt-v6-hc
io-pkt-variant [-d driver [driver_options]] [-i instance] [-p protocol [protocol_options]] [-t threads] [-v]
where variant is one of v4, v4-hc, or v6-hc.
- -d driver [driver_options]
- Start the specified
- You can specify driver without the devn- or devnp- prefix or the .so extension. If you specify the driver this way, io-pkt* looks for a devnp- version first. If there isn't one, io-pkt* loads the legacy io-net (devn-) version, using a special shim layer, devnp-shim.so .
- If you want to load a specific version of a driver, specify the full path of the module (e.g. /lib/dll/devn-i82544.so).
The driver_options argument is a list of driver-specific options that the stack passes to the driver.Use commas, not spaces, to separate the options.
The stack processes various driver options; for more information, see Generic driver options, below.
- -i instance
- The stack instance number, which is useful if you're running multiple
instances of io-pkt.
The io-pkt manager will service mount requests of type
X, where X is the instance number.
io-pkt-v4 -i1 -ptcpip prefix=/alt mount -Tio-pkt1 /lib/dll/devnp-i82544.so
- -p protocol [protocol_options]
- The protocol to start, followed by a list of protocol-specific options.
Use commas, not spaces, to separate the options.
The available protocols include:
Protocol Module pf-v4 lsm-pf-v4.so (for use with io-pkt-v4 or io-pkt-v4-hc) pf-v6 lsm-pf-v6.so (for use with io-pkt-v6-hc) tcpip The stack includes TCP/IP; you need to specify this protocol only if you want to pass additional parameters (e.g. prefix=) to it. For more information about the options, see below.
- Don't register a SIGSEGV handler to quiesce the hardware if a segmentation violation occurs. This can help with debugging if it isn't possible to get a backtrace to the original code that generated the SIGSEGV through the signal handler.
- -t threads
- The number of processing threads to create. By default, one thread is created per CPU. These threads are the packet-processing threads that operate at Layer2 and may become the stack thread.
- If any errors occur while loading drivers and protocols, io-pkt sends messages to slogger . If you specify this option, io-pkt also displays them on the console.
If you specify the -p tcpip protocol, the protocol_options list can consist of one or more of the following, separated by commas without whitespace:
- If the value of the pagesize option is bigger than sysconf(_SC_PAGESIZE), it's used only for the mbuf and cluster pools unless you also specify this option, in which case the page size is used for all pools.
- cache= 0
- Disable the caching of packet buffers. This should be needed only as a debugging facility.
- Monitor changes to configuration strings, in particular CS_HOSTNAME. By default, io-pkt gets the hostname once at startup.
- Prevent automatic stack mapping of en XX interface names to the actual interface names. By default, the stack automatically maps the first registered interface to en0 (if a real en0 isn't present), the second interface to en1, and so on, in order to preserve backwards compatibility with io-net-style command lines.
- fastforward= X
- Enable (1) or disable (0) fastforwarding path. This is useful for gateways. This option enables, and is enabled by, forward; to enable only forward, specify forward,fastforward=0.
- Enable forwarding of IPv4 packets between interfaces; this enables fastforward by default. The default is off.
- (io-pkt-v6-hc only) Enable forwarding of IPv6 packets between interfaces; off by default.
- (io-pkt-v4-hc and io-pkt-v6-hc only) Enable IPsec support; off by default.
- mbuf_cache= X
- As mbufs are freed after use, rather than returning them to the internal pool for general consumption, up to X mbufs are cached per thread to allow quicker retrieval on the next allocation.
- mclbytes= size
- The mbuf cluster size. A cluster is the largest amount of contiguous memory used by an mbuf. If the MTU is larger than a cluster, multiple clusters are used to hold the packet. The default cluster size is 2 KB (to fit a standard 1500-byte Ethernet packet).
- pagesize= X
- The smallest amount of data allocated each time for the internal memory pools. This quantum is then carved into chunks of varying size, depending on the pool.
- pkt_cache= X
- As mbuf and cluster combinations are freed after use, rather than return them to the internal pool for general consumption, up to X mbufs and clusters are cached per thread to allow quicker retrieval on the next allocation.
- pkt_typed_mem= object
- Allocate packet buffers from the specified typed memory object.
io-pkt -ptcpip pkt_typed_mem=ram/dma
- prefix= /path
- The path to prepend to the traditional /dev/socket.
The is useful when running multiple stacks.
Clients can target a particular stack by using the SOCK
# io-pkt -ptcpip prefix=/alt # SOCK=/alt ifconfig -a
- Use /dev/random as the source of random data. By default, io-pkt uses a builtin pseudo-random number generator.
- recv_ctxt= X
- Specify the size of the receive context buffer, in bytes. The default is 65536; the minimum is 2048.
- If using the SO_REUSEPORT socket option, received unicast UDP packets are delivered to all sockets bound to the port. The default is to deliver only multicast and broadcast to all sockets.
- rx_prio= X or rx_pulse_prio= X
- The priority for receive threads to use (the default is 21). A driver-specific priority option (if supported by the driver) can override this priority.
- somaxconn= X
- Specify the value of SOMAXCONN, the maximum length of the listen queue used to accept new TCP connections. The minimum is the value in <sys/socket.h>.
- stacksize= X
- Specify the size of each thread's stack, in bytes. The default is 4096.
- threads_incr= X
- If the supply of threads is exhausted, increment their number by this amount, up to the value of threads_max. The default is 25.
- threads_max= X
- Specify the maximum number of threads. The default is 200.
- threads_min= X
- Specify the minimum number of threads. The default is 15, and the minimum is 4.
The io-pkt manager provides support for Internet domain sockets, Unix domain sockets, and dynamically loaded networking modules. It comes in several stack variants:
- An IPv4 memory-reduced variant that doesn't support:
- Crypto / IPSec
- 802.11 a/b/g Wi-Fi
- GRE / GRF
- Multicast routing
- Multipoint PPP
- IPv4 version of the stack that has full encryption and Wi-Fi capability built in and includes hardware-accelerated cryptography capability (Fast IPsec).
- IPv6 version of the stack (includes IPv4 as part of v6) that has full encryption and Wi-Fi capability, also with hardware-accelerated cryptography.
After you've launched io-pkt*, you can use the mount command to start drivers or load additional modules such as lsm-pf-v4.so or lsm-pf-v6.so . If you want to pass options to the driver, use the -o option before the name of the shared object. For example:
mount -T io-pkt -o mac=12345678 devnp-bge.so
- You can use umount to unmount legacy io-net drivers, but not io-pkt* drivers. Other drivers may allow you to detach the driver from the stack, by using ifconfig 's destroy command (if the driver supports it).
- If io-pkt runs out of threads, it sends a message to slogger , and anything that requires a thread blocks until one becomes available.
- Native io-pkt and ported NetBSD drivers don't put entries into the /dev/io-net namespace, so a waitfor command for such an entry won't work properly in buildfiles or scripts. Use if_up -p instead; for example, instead of waitfor /dev/io-net/en0, use if_up -p en0.
- If a TCP/IP packet is smaller than the minimum Ethernet packet size, the packet may be padded with random data, rather than zeroes.
Generic driver options
The stack processes a generic name= option that lets you override the default interface prefix used for network drivers. For example:
io-pkt-v4 -di82544 name=en
starts the devnp-i82544.so driver with the io-net-style interface naming convention (en XX). You can also use this option to assign interface names based on (for example) functionality:
io-pkt-v4 -di82544 pci=0,name=wan
The stack also processes the following driver options for all USB drivers using the NetBSD-to-QNX conversion library to let you identify a particular USB device using information obtained from running usb -v :
- did= ID
- Device product ID.
- vid= ID
- Device vendor ID.
- devno= addr
- Device address, as reported by the usb utility.
- busno= num
- Host controller, as reported by the usb utility
io-pkt-v4-hc -drum did=0x0020,vid=0x13b1,devno=1,busno=1
Start the v4 TCP/IP variant of io-pkt using the devnp-bcm1250.so driver on BCM91480A eth0:
io-pkt-v4 -d /lib/dll/devnp-bcm1250.so \ memrange=0x10064000,irq=0x80050024,mac=001122334455 ifconfig bcm0 10.184