Implement a subset of Onload extensions to be able to run Onload applications on a Linux kernel.
This library is a stub: it exports the symbols to be able to run unmodified binaries, but it does not necessarily implement the original behavior.
Linux recv, recvfrom, recvmsg, recvmmsg all support passing this flag, for both TCP and UDP sockets.
Support requesting SOF_TIMESTAMPING_RAW_HARDWARE
requests even on
devices that do not implement this feature.
Intercept setsockopt SO_TIMESTAMPING
requests to rewrite as a
request for software timestamps.
Intercept recvmsg to convert software timestamps to appear to be hardware timestamps.
Intercept getsockopt SO_TIMESTAMPING
requests to convert the
response to return the flags as originally passed to setsockopt.
Export these symbols:
- int onload_fd_stat - returns 0 for non-accelerated fd - in LKOS, always return 0
- int onload_is_present - boolean query - in LKOS, always return 0 (false)
- int onload_socket_nonaccel - opens a non-accelerated socket - in LKOS, call socket()
Export the stack manipulation API:
- onload_move_fd
- onload_set_stackname
- onload_stackname_save
- onload_stackname_restore
- onload_stack_opt_get_int
- onload_stack_opt_get_str
- onload_stack_opt_reset
- onload_stack_opt_set_int
- onload_stack_opt_set_str
These stub implementations are entirely noops:
- set requests do not actually store state.
- get requests return error as a result.
- all sockets always use the same Linux kernel TCP/IP stack.
The library exports symbol onload_ordered_epoll_wait
as defined by
the wire order delivery API ("WODA").
It does NOT implement the WODA behavior.
Onload is a high performance hybrid userspace network stack. It presents the Linux kernel API, but with optimized implementations of some operations.
Onload extends the Linux API with custom extensions. Applications that depends on these will not be able to run on bare Linux. This library implements some of these extensions.
See CONTRIBUTING.md
for details.
GPLv2; see LICENSE
for details.