/lk_onload_stub

Primary LanguageCGNU General Public License v2.0GPL-2.0

Linux kernel stub for Onload network APIs

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.

Supported Features

MSG_ONEPKT

Linux recv, recvfrom, recvmsg, recvmmsg all support passing this flag, for both TCP and UDP sockets.

SO_TIMESTAMPING: raw hardware timestamps

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.

Non-accel API

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()

Stacks API

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.

WODA: wire order delivery API

The library exports symbol onload_ordered_epoll_wait as defined by the wire order delivery API ("WODA").

It does NOT implement the WODA behavior.

Background

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.

Contributing

See CONTRIBUTING.md for details.

License

GPLv2; see LICENSE for details.