vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / hardware / infiniband.nix
blobb09453116cf9708b1489b0514a7a6221821a9423
1 { config, lib, pkgs, ... }:
2 let
4   cfg = config.hardware.infiniband;
5   opensm-services = {
6     "opensm@" = {
7       enable = true;
8       description = "Starts OpenSM Infiniband fabric Subnet Managers";
9       before = [ "network.target"];
10       unitConfig = {
11         ConditionPathExists = "/sys/class/infiniband_mad/abi_version";
12       };
13       serviceConfig = {
14         Type = "simple";
15         ExecStart = "${pkgs.opensm}/bin/opensm --guid %I --log_file /var/log/opensm.%I.log";
16       };
17     };
18   } // (builtins.listToAttrs (map (guid: {
19     name = "opensm@${guid}";
20     value = {
21       enable = true;
22       wantedBy = [ "machines.target" ];
23       overrideStrategy = "asDropin";
24     };
25   } ) cfg.guids));
30   options.hardware.infiniband = {
31     enable = lib.mkEnableOption "Infiniband support";
32     guids = lib.mkOption {
33       type = with lib.types; listOf str;
34       default = [];
35       example = [ "0xe8ebd30000eee2e1" ];
36       description = ''
37         A list of infiniband port guids on the system. This is discoverable using `ibstat -p`
38       '';
39     };
40   };
42   config = lib.mkIf cfg.enable {
43     boot.initrd.kernelModules = [
44       "mlx5_core" "mlx5_ib" "ib_cm"
45       "rdma_cm" "rdma_ucm" "rpcrdma"
46       "ib_ipoib" "ib_isert" "ib_umad" "ib_uverbs"
47     ];
48     # rdma-core exposes ibstat, mstflint exposes mstconfig (which can be needed for
49     # setting link configurations), qperf needed to affirm link speeds
50     environment.systemPackages = with pkgs; [
51       rdma-core mstflint qperf
52     ];
53     systemd.services = opensm-services;
54   };