liminix/modules/bridge/members.nix

36 lines
964 B
Nix
Raw Normal View History

{
liminix
, ifwait
, lib
}:
let
inherit (liminix.networking) interface;
inherit (liminix.services) bundle oneshot;
inherit (liminix.lib) typeChecked;
inherit (lib) mkOption types;
t = {
members = mkOption {
type = types.listOf liminix.lib.types.service;
description = "interfaces to add to the bridge";
};
primary = mkOption {
type = liminix.lib.types.service;
description = "bridge interface to add them to";
};
};
in
params:
let
inherit (typeChecked "bridge-members" t params) members primary;
addif = member :
oneshot {
name = "add-${member.device}-to-br-${primary.device}";
up = "${ifwait}/bin/ifwait ${member.device} running && ip link set dev ${member.device} master ${primary.device}";
down = "ip link set dev ${member.device} nomaster";
dependencies = [ primary member ];
};
in bundle {
name = "bridge-${primary.device}-members";
contents = map addif members;
}