Oracle Solaris includes kernel network data path bypass capability for UDP. This capability is provided by the net_kernel_bypass library. Whenever an application that can use the bypass feature is started, the library is preloaded to ensure a successful data communication. Applications that use the network data path bypass capability do not require recompilation or any further changes.
A UDP socket that cannot use the bypass capability is treated as a normal socket. All future operations on that socket follow the normal kernel network socket path.
If the data path bypass capability is used, send and receive operations are performed only in the user context. Except for send and receive operations, all socket operations follow the normal kernel socket path.
The bypass capability has the following limitations:
Data path bypass requires specifying a network interface. Thus, the feature cannot be used by socket bind operations to wild card addresses.
Packet fragmentation is currently unsupported.
Data path bypass cannot be used on virtual interfaces, including IPMP interfaces and link aggregations. Dynamic reconfiguration of the interface card is also unsupported. It can be used only in the global zone.
If the bypass feature is used together with other kernel features such as IPsec, Trusted Extension, and packet filtering, create the UDP bypass socket first before enabling those other features.
The bypass socket feature does not generate error notifications, which can result in a missed ICMP error message, for example, "Destination unreachable".
Packet sniffing through tools such as the snoop command is not supported.
The bypass socket does not interact with the kernel flow created by the flowadm command. Thus, the flowstat command will not include statistics for the bypass socket.
To check UDP sockets that use this capability, see Displaying Information About UDP Sockets That Use Network Data Path Bypass.
Caution - System processes and applications that use any of the unsupported features that are listed should not use the net_kernel_bypass library.
For reference, see the net_kernel_bypass(3LIB) man page.