nixos/network-interfaces: Bond interface configuration must wait for the bond device service

Also fixes some formatting and removal of slave devices.
This commit is contained in:
William A. Kennington III 2014-10-07 23:06:35 -07:00
parent 71605beba1
commit 362699376a

View File

@ -773,23 +773,22 @@ in
wantedBy = [ "network.target" (subsystemDevice n) ]; wantedBy = [ "network.target" (subsystemDevice n) ];
bindsTo = deps; bindsTo = deps;
after = deps; after = deps;
before = [ "${n}-cfg.service" ];
serviceConfig.Type = "oneshot"; serviceConfig.Type = "oneshot";
serviceConfig.RemainAfterExit = true; serviceConfig.RemainAfterExit = true;
path = [ pkgs.ifenslave pkgs.iproute ]; path = [ pkgs.ifenslave pkgs.iproute ];
script = '' script = ''
# Remove Dead Interfaces
ip link set "${n}" down >/dev/null 2>&1 || true
ifenslave -d "${n}" >/dev/null 2>&1 || true
ip link del "${n}" >/dev/null 2>&1 || true
ip link add name "${n}" type bond ip link add name "${n}" type bond
# !!! There must be a better way to wait for the interface # !!! There must be a better way to wait for the interface
while [ ! -d /sys/class/net/${n} ]; do sleep 0.1; done; while [ ! -d /sys/class/net/${n} ]; do sleep 0.1; done;
# Ensure the link is down so that we can set options
ip link set "${n}" down
# Set the miimon and mode options # Set the miimon and mode options
${optionalString (v.miimon != null) ${optionalString (v.miimon != null)
"echo ${toString v.miimon} > /sys/class/net/${n}/bonding/miimon"} "echo \"${toString v.miimon}\" >/sys/class/net/${n}/bonding/miimon"}
${optionalString (v.mode != null) ${optionalString (v.mode != null)
"echo \"${v.mode}\" >/sys/class/net/${n}/bonding/mode"} "echo \"${v.mode}\" >/sys/class/net/${n}/bonding/mode"}
${optionalString (v.lacp_rate != null) ${optionalString (v.lacp_rate != null)
@ -804,8 +803,10 @@ in
'')} '')}
''; '';
postStop = '' postStop = ''
ip link set "${n}" down >dev/null 2>&1 || true ${flip concatMapStrings v.interfaces (i: ''
ifenslave -d "${n}" >/dev/null 2>&1 || true ifenslave -d "${n}" "${i}" >/dev/null 2>&1 || true
'')}
ip link set "${n}" down >/dev/null 2>&1 || true
ip link del "${n}" >/dev/null 2>&1 || true ip link del "${n}" >/dev/null 2>&1 || true
''; '';
}); });