{
  liminix
, ifwait
, lib
}:
{ members, ifname } :
let
  inherit (liminix.networking) interface;
  inherit (liminix.services) bundle oneshot;
  inherit (lib) mkOption types;
  primary = interface {
    device = ifname;
    type = "bridge";
  };
  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 = [ primary ] ++ map addif members;
}) // { device = primary.device; }