From 9a7766e054231209c63e1eef21f440ec92c580d1 Mon Sep 17 00:00:00 2001 From: "William A. Kennington III" Date: Wed, 7 Jan 2015 14:34:15 -0800 Subject: nixos/network-interfaces: Add mstpd support for bridges --- nixos/modules/tasks/network-interfaces-scripted.nix | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'nixos/modules/tasks/network-interfaces-scripted.nix') diff --git a/nixos/modules/tasks/network-interfaces-scripted.nix b/nixos/modules/tasks/network-interfaces-scripted.nix index 9d61a4b0530..da0d8530241 100644 --- a/nixos/modules/tasks/network-interfaces-scripted.nix +++ b/nixos/modules/tasks/network-interfaces-scripted.nix @@ -37,6 +37,8 @@ let ip link del "${i}" 2>/dev/null || true ''; + needsMstpd = any ({ rstp, ... }: rstp) (attrValues cfg.bridges); + in { @@ -185,13 +187,14 @@ in in { description = "Bridge Interface ${n}"; wantedBy = [ "network.target" (subsystemDevice n) ]; - bindsTo = deps; - after = [ "network-pre.target" ] ++ deps + bindsTo = deps ++ optional v.rstp "mstpd.service"; + partOf = optional v.rstp "mstpd.service"; + after = [ "network-pre.target" "mstpd.service" ] ++ deps ++ concatMap (i: [ "network-addresses-${i}.service" "network-link-${i}.service" ]) v.interfaces; before = [ "network-interfaces.target" (subsystemDevice n) ]; serviceConfig.Type = "oneshot"; serviceConfig.RemainAfterExit = true; - path = [ pkgs.iproute ]; + path = [ pkgs.iproute ] ++ optional v.rstp pkgs.mstpd; script = '' # Remove Dead Interfaces echo "Removing old bridge ${n}..." @@ -206,6 +209,13 @@ in ip link set "${i}" up '')} + # Enable rstp on the interface + ${optionalString v.rstp '' + echo 1 >/sys/class/net/${n}/bridge/stp_state + mstpctl addbridge "${n}" + mstpctl setforcevers "${n}" rstp + ''} + ip link set "${n}" up ''; postStop = '' @@ -343,6 +353,8 @@ in KERNEL=="tun", TAG+="systemd" ''; + services.mstpd = mkIf needsMstpd { enable = true; }; + }; } -- cgit 1.4.1