RDS self-tests ============== These scripts provide a coverage test for RDS-TCP and RDS-RDMA (over RoCE/RXE) by setting up two endpoints and running RDS packets between them. The TCP path creates two network namespaces; the RDMA path uses an RXE (soft RoCE) device backed by a veth pair. A workload of 50000 hashes, each 64 characters in size, is passed over an RDS socket on this test network with an optional probability of packet loss or corruption. A passing test means the RDS stack was able to recover properly. The provided config.sh can be used to compile the kernel with the necessary gcov options; pass -r to also enable the kernel configs required for the RDMA transport. The kernel may optionally be configured to omit the coverage report as well. USAGE: rds_run.sh [-d logdir] [-l packet_loss] [-c packet_corruption] [-u packet_duplicate] [-t timeout] [-T tcp|rdma|tcp,rdma] OPTIONS: -d Log directory. If set, logs will be stored in the given dir, or skipped if unset. Log dir can also be set through the RDS_LOG_DIR env variable -l Simulates a percentage of packet loss -c Simulates a percentage of packet corruption -u Simulates a percentage of packet duplication. -t Test timeout. Defaults to tools/testing/selftests/net/rds/settings -T Comma-separated list of transports to test. Accepts "tcp", "rdma", or "tcp,rdma". Defaults to "tcp". Use config.sh -r to enable required RDMA configs ENV VARIABLES: RDS_LOG_DIR Log directory. If set, logs will be stored in the given dir, or skipped if unset. Log dir can also be set with the -d flag. Use with --rwdir on the CI path to retain logs after test compleation. Log dir end point must be within the specified --rwdir path for logs to persist on the host. SUDO_USER The user name that should be used for tcpdump --relinquish-privileges. Set this to a user belonging to the sudoers group to avoid drop privilege errors with the vng 9p filesystem which may result in empty pcaps EXAMPLE: # Create a suitable gcov enabled .config tools/testing/selftests/net/rds/config.sh -g # Optionally add RDMA configs (CONFIG_RDS_RDMA, CONFIG_RDMA_RXE) tools/testing/selftests/net/rds/config.sh -r # Alternatly create a gcov disabled .config tools/testing/selftests/net/rds/config.sh # Config paths may also be specified with the -c flag tools/testing/selftests/net/rds/config.sh -c .config.local # build the kernel vng --build --config .config # launch the tests in a VM vng -v --rwdir ./ --run . --user root --cpus 4 -- \ "export PYTHONPATH=tools/testing/selftests/net/; \ export SUDO_USER=example_user; \ export RDS_LOG_DIR=tools/testing/selftests/net/rds/rds_logs; \ tools/testing/selftests/net/rds/rds_run.sh -T tcp,rdma"