Example API for Wire Order Delivery

Onload User Guide (UG1586)

Document ID
UG1586
Release Date
2023-07-31
Revision
1.2 English

The Onload distribution includes example client/server applications to demonstrate the wire order feature:

wire_order_server - uses onload_ordered_epoll_wait to receive ordered data over a set of sockets. Received data is echoed back to the client on a single reply socket.

wire_order_client - Sends sequenced data across the socket set, reads the reply data from the server and ensures data is received in sequence.

Building the example

Source code for the wire order API is available in:

onload-<version>/src/tests/onload/wire_order

Although not compiled as part of the Onload install process, to build the example API do the following:

Ensure mmaketool is in the current path (can be found in the onload-<version>/scripts directory):

# export PATH=$PATH:/onload-<version>/scripts
# cd /onload-<version>/build/gnu_x86_64/tests/onload/wire_order
# USEONLOADEXT=1 make

Running the example server

# EF_RX_TIMESTAMPING=3 onload ./wire_order_server

Running the example client

# onload --profile=latency ./wire_order_client <ip server>

By default the client will send data over 100 TCP sockets controlled with the -s option. UDP can be selected using the -U option.

Note: To prevent sends being re-ordered between streams, the latency profile should be used on the client side. The environment variable EF_RX_TIMESTAMPING must be set on the server side.