What's new in the networking stack?
The QNX Neutrino networking stack is called io-pkt. It replaces the previous generation of the stack, io-net, and provides the following benefits:
Architecture of io-pkt
The io-pkt stack is very similar in architecture to other component subsystems inside of the Neutrino operating system.
At the bottom layer are drivers that provide the mechanism for passing data to, and receiving data from, the hardware. The
drivers hook into a multi-threaded layer-2 component (that also provides fast forwarding and bridging capability) that ties
them together and provides a unified interface into the layer-3 component, which then handles the individual IP and upper-layer
protocol-processing components (TCP and UDP).
Threading model
The default mode of operation is for io-pkt to create one thread per CPU. The io-pkt stack is fully multi-threaded at
layer 2. However, only one thread may acquire the stack context for upper-layer packet processing. If multiple interrupt
sources require servicing at the same time, these may be serviced by multiple threads. Only one thread will service a particular
interrupt source at any point in time. Typically an interrupt on a network device indicates that there are packets to be received.
The same thread that handles the receive processing may later transmit the received packets out another interface. Examples
of this are layer-2 bridging and the ipflow fastforwarding of IP packets.
Threading priorities
There are a couple of ways that you can change the priority of the threads responsible for receiving packets from the hardware.
You can pass the rx_prio_pulse option to the stack to set the default thread priority. For example: