Merge pull request #231481 from nikstur/rshim-user-space

rshim for Nvidia BlueField
This commit is contained in:
Ryan Lahfa 2023-05-15 09:03:50 +02:00 committed by GitHub
commit feb7fcde4b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 162 additions and 0 deletions

View file

@ -110,6 +110,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [v2rayA](https://v2raya.org), a Linux web GUI client of Project V which supports V2Ray, Xray, SS, SSR, Trojan and Pingtunnel. Available as [services.v2raya](options.html#opt-services.v2raya.enable).
- [rshim](https://github.com/Mellanox/rshim-user-space), the user-space rshim driver for the BlueField SoC. Available as [services.rshim](options.html#opt-services.rshim.enable).
- [wstunnel](https://github.com/erebe/wstunnel), a proxy tunnelling arbitrary TCP or UDP traffic through a WebSocket connection. Instances may be configured via [services.wstunnel](options.html#opt-services.wstunnel.enable).
- [ulogd](https://www.netfilter.org/projects/ulogd/index.html), a userspace logging daemon for netfilter/iptables related logging. Available as [services.ulogd](options.html#opt-services.ulogd.enable).

View file

@ -688,6 +688,7 @@
./services/misc/ripple-data-api.nix
./services/misc/rippled.nix
./services/misc/rmfakecloud.nix
./services/misc/rshim.nix
./services/misc/safeeyes.nix
./services/misc/sdrplay.nix
./services/misc/serviio.nix

View file

@ -0,0 +1,99 @@
{ config, lib, pkgs, ... }:
let
cfg = config.services.rshim;
rshimCommand = lib.escapeShellArgs ([ "${cfg.package}/bin/rshim" ]
++ lib.optionals (cfg.backend != null) [ "--backend ${cfg.backend}" ]
++ lib.optionals (cfg.device != null) [ "--device ${cfg.device}" ]
++ lib.optionals (cfg.index != null) [ "--index ${builtins.toString cfg.index}" ]
++ [ "--log-level ${builtins.toString cfg.log-level}" ])
;
in
{
options.services.rshim = {
enable = lib.mkEnableOption (lib.mdDoc "User-space rshim driver for the BlueField SoC");
package = lib.mkPackageOptionMD pkgs "rshim-user-space" { };
backend = lib.mkOption {
type = with lib.types; nullOr (enum [ "usb" "pcie" "pcie_lf" ]);
description = lib.mdDoc ''
Specify the backend to attach. If not specified, the driver will scan
all rshim backends unless the `device` option is given with a device
name specified.
'';
default = null;
example = "pcie";
};
device = lib.mkOption {
type = with lib.types; nullOr str;
description = lib.mdDoc ''
Specify the device name to attach. The backend driver can be deduced
from the device name, thus the `backend` option is not needed.
'';
default = null;
example = "pcie-04:00.2";
};
index = lib.mkOption {
type = with lib.types; nullOr int;
description = lib.mdDoc ''
Specify the index to create device path `/dev/rshim<index>`. It's also
used to create network interface name `tmfifo_net<index>`. This option
is needed when multiple rshim instances are running.
'';
default = null;
example = 1;
};
log-level = lib.mkOption {
type = lib.types.int;
description = lib.mdDoc ''
Specify the log level (0:none, 1:error, 2:warning, 3:notice, 4:debug).
'';
default = 2;
example = 4;
};
config = lib.mkOption {
type = with lib.types; attrsOf (oneOf [ int str ]);
description = lib.mdDoc ''
Structural setting for the rshim configuration file
(`/etc/rshim.conf`). It can be used to specify the static mapping
between rshim devices and rshim names. It can also be used to ignore
some rshim devices.
'';
default = { };
example = {
DISPLAY_LEVEL = 0;
rshim0 = "usb-2-1.7";
none = "usb-1-1.4";
};
};
};
config = lib.mkIf cfg.enable {
environment.etc = lib.mkIf (cfg.config != { }) {
"rshim.conf".text = lib.generators.toKeyValue
{ mkKeyValue = lib.generators.mkKeyValueDefault { } " "; }
cfg.config;
};
systemd.services.rshim = {
after = [ "network.target" ];
serviceConfig = {
Restart = "always";
Type = "forking";
ExecStart = [
(lib.concatStringsSep " \\\n" rshimCommand)
];
KillMode = "control-group";
};
wantedBy = [ "multi-user.target" ];
};
};
meta.maintainers = with lib.maintainers; [ nikstur ];
}

View file

@ -0,0 +1,58 @@
{ stdenv
, lib
, fetchFromGitHub
, autoconf
, automake
, pkg-config
, pciutils
, libusb1
, fuse
}:
stdenv.mkDerivation rec {
pname = "rshim-user-space";
version = "2.0.7";
src = fetchFromGitHub {
owner = "Mellanox";
repo = pname;
rev = "rshim-${version}";
hash = "sha256-Dyc16UrRxbC9jRNVZ/sCgidY2hSIX0PrWmHf68x07nE=";
};
nativeBuildInputs = [
autoconf
automake
pkg-config
];
buildInputs = [
pciutils
libusb1
fuse
];
strictDeps = true;
preConfigure = "./bootstrap.sh";
installPhase = ''
mkdir -p "$out"/bin
cp -a src/rshim "$out"/bin/
'';
meta = with lib; {
description = "user-space rshim driver for the BlueField SoC";
longDescription = ''
The rshim driver provides a way to access the rshim resources on the
BlueField target from external host machine. The current version
implements device files for boot image push and virtual console access.
It also creates virtual network interface to connect to the BlueField
target and provides a way to access the internal rshim registers.
'';
homepage = "https://github.com/Mellanox/rshim-user-space";
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = with maintainers; [ nikstur ];
};
}

View file

@ -11918,6 +11918,8 @@ with pkgs;
rshijack = callPackage ../tools/networking/rshijack { };
rshim-user-space = callPackage ../tools/misc/rshim-user-space { };
rsibreak = libsForQt5.callPackage ../applications/misc/rsibreak { };
rslint = callPackage ../development/tools/rslint { };