1import ./make-test-python.nix (
2 { ... }:
3
4 let
5 node =
6 { pkgs, ... }:
7 {
8 networking = {
9 firewall = {
10 allowedUDPPorts = [ 4791 ]; # open RoCE port
11 allowedTCPPorts = [ 4800 ]; # port for test utils
12 };
13 rxe = {
14 enable = true;
15 interfaces = [ "eth1" ];
16 };
17 };
18
19 environment.systemPackages = with pkgs; [
20 rdma-core
21 screen
22 ];
23 };
24
25 in
26 {
27 name = "rxe";
28
29 nodes = {
30 server = node;
31 client = node;
32 };
33
34 testScript = ''
35 # Test if rxe interface comes up
36 server.wait_for_unit("default.target")
37 server.succeed("systemctl status rxe.service")
38 server.succeed("ibv_devices | grep rxe_eth1")
39
40 client.wait_for_unit("default.target")
41
42 # ping pong tests
43 for proto in "rc", "uc", "ud", "srq":
44 server.succeed(
45 "screen -dmS {0}_pingpong ibv_{0}_pingpong -p 4800 -s 1024 -g0".format(proto)
46 )
47 client.succeed("sleep 2; ibv_{}_pingpong -p 4800 -s 1024 -g0 server".format(proto))
48
49 server.succeed("screen -dmS rping rping -s -a server -C 10")
50 client.succeed("sleep 2; rping -c -a server -C 10")
51 '';
52 }
53)