forked from dan/liminix
... and make bridge use it. We also had to convert bridge back into a pair of services. Downstreams want to depend on the bridge it self being configured even if not necessarily all the members are up. e.g. don't want to break ssh on lan if there's a misconfigured wlan device
26 lines
626 B
Nix
26 lines
626 B
Nix
{
|
|
liminix
|
|
, ifwait
|
|
, lib
|
|
}:
|
|
{ members, primary } :
|
|
|
|
let
|
|
inherit (liminix.networking) interface;
|
|
inherit (liminix.services) bundle oneshot;
|
|
inherit (lib) mkOption types;
|
|
addif = member :
|
|
oneshot {
|
|
name = "${primary.name}.member.${member.name}";
|
|
up = ''
|
|
dev=$(output ${member} ifname)
|
|
${ifwait}/bin/ifwait $dev running && ip link set dev $dev master $(output ${primary} ifname)
|
|
'';
|
|
down = "ip link set dev $(output ${member} ifname) nomaster";
|
|
dependencies = [ primary member ];
|
|
};
|
|
in bundle {
|
|
name = "${primary.name}.members";
|
|
contents = map addif members;
|
|
}
|