Developer Resources


PDF Documents
Caution: This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs.


Network I/O support

Note: You must be root to start this manager.


io-net [-avms] [-i instance] [-C size] [-c 0]
       [-d driver [driver_options]] ...
       -p protocol [protocol_options] 
       [-t threads] ... &

Runs on:



Disable the automatic loading of converter modules.
-C size
The message context size, in bytes, of each thread (-t option).

Note: This isn't related to the message context size of the TCP/IP stack (npm-tcpip.so).

-c 0
Disable caching of packet buffers. This should only be needed as a debugging facility and should be used in conjunction with the cache=0 option to the npm-tcpip.so (big) stack.
-d driver [driver_options]
Load the specified driver and pass it the given driver_options. The driver can be the full path to the shared object, or the name of the object without the devn- prefix or the .so extension (e.g. lance for the devn-lance.so driver). If you don't specify a full path, io-net uses the LD_LIBRARY_PATH environment variable when searching for the shared objects.

For information on the drivers and their syntax and options, see the devn-* entries:

Driver Shared object
artesyn devn-artesyn.so
bcm43xx devn-bcm43xx.so
cpci-mcp750 devn-cpci-mcp750.so
crys8900 devn-crys8900.so
dm9102 devn-dm9102.so
eepro devn-eepro.so
el509 devn-el509.so
el589 devn-el589.so
el900 devn-el900.so
epic devn-epic.so
fd devn-fd.so
gt64260 devn-gt64260.so
i82544 devn-i82544.so
klsi devn-klsi.so
lance devn-lance.so
ne2000 devn-ne2000.so
ne2000-403 devn-ne2000-403.so
ns83815 devn-ns83815.so
orinoco devn-orinoco.so
pcnet devn-pcnet.so
pegasus devn-pegasus.so
ppc405 devn-ppc405.so
ppc800-ads devn-ppc800-ads.so
ppc800-cllf devn-ppc800-cllf.so
ppc800-mbx devn-ppc800-mbx.so
ppc800-rpxlite devn-ppc800-rpxlite.so
ppc860_mii devn-ppc860_mii.so
ppc8260 devn-ppc8260.so
prism devn-prism.so
rlan2 devn-rlan2.so
rtl devn-rtl.so
rtl8150 devn-rtl8150.so
sis9 devn-sis9.so
smc9000 devn-smc9000.so
speedo devn-speedo.so
tigon3 devn-tigon3.so
tulip devn-tulip.so
tulip-p5064 devn-tulip-p5064.so
via-rhine devn-via-rhine.so
wd devn-wd.so

The -d option isn't necessary for driverless interfaces such as pppd.

-i instance
Instance number; useful when running multiple instances of io-net.
Allow multicast devctl() functions on /dev/io-net/ entries.
-p protocol [protocol_options]
Load the specified protocol and pass it the given protocol_options. The protocols include:
Protocol Shared object
pppmgr npm-pppmgr.so
pppoe npm-pppoe.so
qnet npm-qnet.so
tcpip npm-tcpip.so
ttcpip npm-ttcpip.so

"Static" configuration: no mounting or unmounting of modules is performed after the command line is processed.

-t threads
Maximum number of threads available in the shared pool exported by io-net to the modules that registered with it. Default is 100.
Verbose output.


The io-net manager provides support for dynamically loaded networking modules. You can load drivers and protocols when you start io-net, by using the -d and -p command-line options.

Note: You can start more than one driver or protocol by using multiple -d and -p command-line options.

Once io-net has started, you can dynamically load and unload modules by using the mount and umount commands. For example, this command:

io-net -dne2000 mac=12345678 -pttcpip if=en0:10.163 &

is the same as this sequence:

io-net &
mount -T io-net -o if=en0:10.163 npm-ttcpip.so
mount -T io-net -o mac=12345678 devn-ne2000.so

The io-net manager uses the LD_LIBRARY_PATH environment variable when searching for the shared objects. If it's not set, or the shared object in question isn't in one of its directories, or you want to override the default, specify the full path in the mount command.

To unload a module, use a command like this:

umount /dev/io-net/en0

By default, io-net populates the /dev/io-net portion of the namespace and handles mount requests of type io-net.

Note: The /dev/io-net directory doesn't appear until a driver or protocol module adds an entry to it. If you start io-net without any drivers or protocols, a waitfor /dev/io-net command fails.

Running more than one instance of io-net may cause confusion because their portions of the namespace overlap. You can use the -i option to append an instance number to the above strings. For example, for the first io-net, do this:

mount -T io-net /lib/dll/devn-speedo.so
ls /dev/io-net

and for the second, do this:

io-net -i1
mount -T io-net1 -o prefix=/alt /lib/dll/npm-tcpip.so
ls /dev/io-net1


Start io-net, load the NE-2000 Ethernet driver and tiny TCP/IP protocol module, and autoload the IP-to-Ethernet-converter module (ncm-ip_en.so).

io-net -dne2000 -pttcpip

This sample mkifs boot script starts io-net with an NE 2000 Ethernet adapter, the tiny TCP/IP stack, and a PPP manager:

[uid=* gid=*]

[virtual=x86/bios +compress] boot = {
    startup-bios -v 
    PATH=/proc/boot LD_LIBRARY_PATH=/proc/boot:/dev/shmem procnto -vvv

[+script] startup.script = {
    [+session] devc-con -e -n8 &
    waitfor /dev/con1
    reopen /dev/con1

    [+session] devc-ser8250 &
    waitfor /dev/ser2 &

    io-net -dne2000 -pttcpip if=en0:10.163: -p pppmgr
    waitfor /dev/socket

    fs-nfs2 -u 10.25:/usr/nto/x86 / -u 10.25:/ /q &
    waitfor /bin

    reopen /dev/con1
    [+session] TZ=est05edt04,M4.1.0/2,M10.5.0/2 PATH=/bin:/usr/local/bin \
        sh &

    /bin/pipe &
    /bin/devc-pty &

[type=link] /usr/lib/ldqnx.so.2 = /proc/boot/libc.so
[type=link] /tmp = /dev/shmem
[type=link] /bin/login = /bin/esh
[type=link] /dev/console = /dev/con1
[type=link] /dev/log = /dev/null
[type=link] /proc/dumper = /dev/null




Mount two Tulip-based Netgear FA310TX cards, one with PCI index 1 that's connected to the Internet, and one with PCI index 0 that's connected to a local network, setting the default route:

io-net -dtulip chipset=168,media=3,pci=0x1 \
       -dtulip chipset=168,media=5,pci=0x0 \
       -pttcpip if=en0:,\


The directory where, by default, drivers and protocol modules add entries. For more information, see above.

See also:

mount, pppd, umount, waitfor

"Network drivers (devn-*)" and "Network protocol modules (npm-*)" in the Utilities Summary

Using Qnet for Transparent Distributed Processing and TCP/IP Networking in the Neutrino User's Guide