nixos/infiniband: add support for configurable guids

Changed files
+61
nixos
doc
manual
release-notes
modules
+2
nixos/doc/manual/release-notes/rl-2311.section.md
···
- [eris-server](https://codeberg.org/eris/eris-go). [ERIS](https://eris.codeberg.page/) is an encoding for immutable storage and this server provides block exchange as well as content decoding over HTTP and through a FUSE file-system. Available as [services.eris-server](#opt-services.eris-server.enable).
+
- hardware/infiniband.nix adds infiniband subnet manager support using an [opensm](https://github.com/linux-rdma/opensm) systemd-template service, instantiated on card guids. The module also adds kernel modules and cli tooling to help administrators debug and measure performance. Available as [hardware.infiniband.enable](#opt-hardware.infiniband.enable).
+
- [Honk](https://humungus.tedunangst.com/r/honk), a complete ActivityPub server with minimal setup and support costs.
Available as [services.honk](#opt-services.honk.enable).
+58
nixos/modules/hardware/infiniband.nix
···
+
{ config, lib, pkgs, ... }:
+
+
with lib;
+
+
let
+
+
cfg = config.hardware.infiniband;
+
opensm-services = {
+
"opensm@" = {
+
enable = true;
+
description = "Starts OpenSM Infiniband fabric Subnet Managers";
+
before = [ "network.target"];
+
unitConfig = {
+
ConditionPathExists = "/sys/class/infiniband_mad/abi_version";
+
};
+
serviceConfig = {
+
Type = "simple";
+
ExecStart = "${pkgs.opensm}/bin/opensm --guid %I --log_file /var/log/opensm.%I.log";
+
};
+
};
+
} // (builtins.listToAttrs (map (guid: {
+
name = "opensm@${guid}";
+
value = {
+
enable = true;
+
wantedBy = [ "machines.target" ];
+
overrideStrategy = "asDropin";
+
};
+
} ) cfg.guids));
+
+
in
+
+
{
+
options.hardware.infiniband = {
+
enable = mkEnableOption "Infiniband support";
+
guids = mkOption {
+
type = with types; listOf str;
+
default = [];
+
example = [ "0xe8ebd30000eee2e1" ];
+
description = lib.mdDoc ''
+
A list of infiniband port guids on the system. This is discoverable using `ibstat -p`
+
'';
+
};
+
};
+
+
config = mkIf cfg.enable {
+
boot.initrd.kernelModules = [
+
"mlx5_core" "mlx5_ib" "ib_cm"
+
"rdma_cm" "rdma_ucm" "rpcrdma"
+
"ib_ipoib" "ib_isert" "ib_umad" "ib_uverbs"
+
];
+
# rdma-core exposes ibstat, mstflint exposes mstconfig (which can be needed for
+
# setting link configurations), qperf needed to affirm link speeds
+
environment.systemPackages = with pkgs; [
+
rdma-core mstflint qperf
+
];
+
systemd.services = opensm-services;
+
};
+
}
+1
nixos/modules/module-list.nix
···
./hardware/gpgsmartcards.nix
./hardware/hackrf.nix
./hardware/i2c.nix
+
./hardware/infiniband.nix
./hardware/keyboard/qmk.nix
./hardware/keyboard/teck.nix
./hardware/keyboard/uhk.nix