npm-qnet-l4_lite.so

Lightweight version of native QNX Network manager

Syntax:

io-net ... -p qnet [option[,option]...]

Runs on:

Neutrino

Options:


Note:
  • The QoS software layer implements the node-to-node session protocol and handles transmission media selection.

    L4 is a software layer beneath the QoS that implements an ISO level-4 style transport to provide guaranteed, non-duplicate delivery of data, using the driver layer below it.

  • The npm-qnet-l4_lite.so DLL has many options to alter how Qnet functions (e.g. timeouts, retries, and idle times), but Qnet is optimized to function with its default settings. Don't use these options unless you're trying to overcome an issue related to your environment. Using these options can have a negative effect if used incorrectly.
  • Use commas (,) to separate the options (not spaces).

auto_add=X
When qnet starts up, the builtin io-net Ethernet (en) resolver broadcasts its own mappings on all interfaces. This option specifies the time-interval in number of ticks, after which the builtin io-net Ethernet (en) resolver re-broadcasts its own mappings on all of its interfaces. This has the effect of automatically populating the /net directory with all of the connected nodes.

The default is 150 ticks, which represents 30 seconds. The value 0 is special because it not only stops the broadcasted transmissions, but it causes unsolicited received broadcasts to be discarded. This has the effect of populating the /net directory only with nodes that applications on the local node specifically open.

bind=enX
Specify the interface (e.g. bind=en0) to use. All /dev/io-net/enX interfaces are used by default. When you specify more than one bind option, Qnet uses all the specified interfaces. This is the fastest packet transport.
bind=ip
Encapsulate its packet with an IP header using its registered protocol number. With this option, Qnet doesn't use raw (DIX blue-book) ethernet packets. This is useful on larger networks where simple L2 switching isn't possible and all packets must be routed.

If you use the bind=ip option, you also need to use the resolve=dns or resolve=file option. The resolver is used to map the nodename to the IP address; you can't use the default resolver with the bind=ip option.

conn_est_retries=X
The number of times QoS should retry to establish a connection before giving up. The default is 1.
conn_est_timeout=X
The number of periodic_ticks before QoS should retransmit a connection-establishment request. The default is 1.
conn_up_idle=X
The number of periodic ticks until QoS should conclude that a connection is idle without any traffic and should be polled with a heartbeat. The default is 50 ticks (10 seconds).
conn_up_retries=X
The number of unanswered connection heartbeats before QoS concludes that a connection is down. The default is 6.
do_crc=X
Enable (1) or disable (0) software-level CRC checking of packets by L4. The default is 0. When you disable CRC checking, it yields the best performance on reliable hardware.
host=hostname
Change the hostname of the machine.
mapany=map_uid
Map any incoming user ID to map_uid and map its group ID to the group ID of map_uid.
maproot=map_uid
If the incoming user ID is 0, map it to map_uid and map its group ID to the group ID of map_uid.
mount=directory[:[.]domain]]*
Specify a network directory. The default directory is /net. The default domain is either the hostname domain, if it has one, or the directory with the slashes changed to dots and reversed. For example, /net/outside/canada has a domain of canada.outside.net. The first mount is the default directory and domain that the local hostname resolves through.
no_ack=X
Whether or not to generate and expect ACK packets. These packets are required to guarantee data delivery over networks that may lose packets, e.g. Ethernet. The value of X can be:
0
Generate and expect ACK packets (the default).
1
Don't generate or expect ACK packets. Specify this value only when it isn't possible for a packet to be lost.

Configure all hosts on the network to use the same value for this option.

probe_no_l4_time=X
The number of periodic_ticks after which QoS should probe a connection on an interface for which there is no mapping for the remote node with a broadcasted packet. The default is the same as the value of conn_up_idle.
periodic_ticks=X
The number of times per seconds that QoS/L4 should wake up to perform periodic housekeeping tasks. The default is 5, resulting in a default 200ms tick.

Note: The two options mentioned above are very important. If you choose the default value of periodic_ticks (which is 5), you affect the timing of all other options which rely on timer tick.

qos_verbose=X
This option is used for diagnosis. The level of verbosity for the output related to connection management by QoS. The default is 0.
resolve=resolver[:resolver_parameter]
Add to the resolver list for mountpoints that follow.

The following values for resolver are built into the network manager:

If you specify something else, Qnet attempts to load nr-resolver.so. The default name resolver is ndp. For queries how to create nr-resolver.so, please contact QNX support.

ret_drvr_rx_buf=X
How L4 should handle the received (rxd) packets:
slow_mode=X
The number of ticks after which to forget about the slow transmit mode (i.e. tightly windowed) for a node. The default is 1200, giving 240 seconds or four minutes. The value 0 is special -- it disables slow mode entirely.
tx_retries=X
The number of times Qnet should retry a transmission before giving up. The default is 25.
tx_ticks=X
The number of periodic_ticks before L4 retransmits a transmission request. The default is 1.

Description:

The npm-qnet-l4_lite.so is the lightweight version of the QNX manager that implements native Neutrino networking. It provides faster speed and enhanced reliability in performance when compared with its previous version npm-qnet-compat.so. The npm-qnet-l4_lite.so version of the Qnet stack isn't compatible with the earlier version with regard to packet and protocol format. By default, npm-qnet.so is a symbolic link to npm-qnet-l4_lite.so.


Note: You can't umount Qnet and the full TCP/IP. You may, however, create an io-net producer module that supports unmounting.


Note: When you specify two or more resolve= options in a series, the resolvers form a list of lookups for the directory specified in the subsequent mount= options.

You may notice that the list of resolvers is terminated by a mount= option. Any resolve= options placed after a mount= option form a new list -- they don't add to the previous list.

For example, the following line:

resolve=a,resolve=b,mount=x,mount=y,resolve=c,mount=z

specifies that:

  • mount=x has resolvers a and b
  • mount=y also has resolvers a and b
  • mount=z has only resolver c.

Examples:

You may start Qnet in two ways: either you start it at the same time as io-net, or afterwards with the mount utility.

The following example shows how you start everything at once with the default DIX blue book ethernet packet type with no CRC checking, and 1024 descriptors for maximum performance:

io-net -d speedo transmit=1024,receive=1024 -p qnet -p tcpip

The following example shows how you use the mount command to start them in sequence, using the actual file names of the shared libraries:

io-net
mount -T io-net -o transmit=1024,receive=1024 devn-speedo.so
mount -T io-net npm-qnet.so
mount -T io-net npm-tcpip.so

The shared libraries mentioned above with .so extension are actually located in /lib/dll. The mount utility automatically looks there for these utilities. If you wish, you can give the full pathname to the mount utility.

The following example shows how you start everything at once using IP packet encapsulation instead of DIX blue book:

io-net -d speedo transmit=1024,receive=1024 -p qnet bind=ip,resolve=dns -p tcpip

See mount and io-net for more information.

Files:

/dev/io-net
The directory where, by default, drivers and protocol modules add entries. For more information, the documentation for io-net.
/etc/system/config/useqnet
If this file exists, your system is using the default startup files, and io-net is running when your system starts up, the system automatically loads the Qnet module that /lib/dll/npm-qnet.so points to (npm-qnet-l4_lite.so by default). For more information, see the Controlling How Neutrino Starts chapter of the Neutrino User's Guide.

Caveats:

Qnet doesn't support networking processors of different endianness. If you need cross-endian file access, consider using NFS.

The combination of bind=en and resolve=dns is invalid.

See also:

io-net, npm-qnet.so, npm-qnet-compat.so

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

Using Qnet for Transparent Distributed Processing in the Neutrino User's Guide

Native Networking (Qnet) in System Architecture

Transparent Distributed Processing Using Qnet in the Neutrino Programmer's Guide