1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7
8with lib;
9
10let
11 cfg = config.networking.rxe;
12
13in
14{
15 ###### interface
16
17 options = {
18 networking.rxe = {
19 enable = mkEnableOption "RDMA over converged ethernet";
20 interfaces = mkOption {
21 type = types.listOf types.str;
22 default = [ ];
23 example = [ "eth0" ];
24 description = ''
25 Enable RDMA on the listed interfaces. The corresponding virtual
26 RDMA interfaces will be named rxe_\<interface\>.
27 UDP port 4791 must be open on the respective ethernet interfaces.
28 '';
29 };
30 };
31 };
32
33 ###### implementation
34
35 config = mkIf cfg.enable {
36
37 systemd.services.rxe = {
38 description = "RoCE interfaces";
39
40 wantedBy = [ "multi-user.target" ];
41 after = [
42 "systemd-modules-load.service"
43 "network-online.target"
44 ];
45 wants = [
46 "network-pre.target"
47 "network-online.target"
48 ];
49
50 serviceConfig = {
51 Type = "oneshot";
52 RemainAfterExit = true;
53 ExecStart = map (
54 x: "${pkgs.iproute2}/bin/rdma link add rxe_${x} type rxe netdev ${x}"
55 ) cfg.interfaces;
56
57 ExecStop = map (x: "${pkgs.iproute2}/bin/rdma link delete rxe_${x}") cfg.interfaces;
58 };
59 };
60 };
61}