diff options
author | rnhmjoj <rnhmjoj@inventati.org> | 2017-07-27 16:23:20 +0200 |
---|---|---|
committer | rnhmjoj <rnhmjoj@inventati.org> | 2018-02-17 13:57:58 +0100 |
commit | d00c91c5dab1428941c4ee61e341b01a26f14c90 (patch) | |
tree | 47bfbddbcea58c712e49084eaeb57a7c7a6c8ab5 /nixos/modules/tasks/network-interfaces-scripted.nix | |
parent | 05f5cdcf66ecc3e56df699c37bbdba7b1a8c107b (diff) | |
download | nixlib-d00c91c5dab1428941c4ee61e341b01a26f14c90.tar nixlib-d00c91c5dab1428941c4ee61e341b01a26f14c90.tar.gz nixlib-d00c91c5dab1428941c4ee61e341b01a26f14c90.tar.bz2 nixlib-d00c91c5dab1428941c4ee61e341b01a26f14c90.tar.lz nixlib-d00c91c5dab1428941c4ee61e341b01a26f14c90.tar.xz nixlib-d00c91c5dab1428941c4ee61e341b01a26f14c90.tar.zst nixlib-d00c91c5dab1428941c4ee61e341b01a26f14c90.zip |
nixos/networking-interfaces: make static routes configurable
Diffstat (limited to 'nixos/modules/tasks/network-interfaces-scripted.nix')
-rw-r--r-- | nixos/modules/tasks/network-interfaces-scripted.nix | 66 |
1 files changed, 45 insertions, 21 deletions
diff --git a/nixos/modules/tasks/network-interfaces-scripted.nix b/nixos/modules/tasks/network-interfaces-scripted.nix index 63d07832d105..9dba6d1bd0a2 100644 --- a/nixos/modules/tasks/network-interfaces-scripted.nix +++ b/nixos/modules/tasks/network-interfaces-scripted.nix @@ -185,33 +185,57 @@ let path = [ pkgs.iproute ]; script = '' - # FIXME: shouldn't this be done in network-link? - echo "bringing up interface..." - ip link set "${i.name}" up - state="/run/nixos/network/addresses/${i.name}" + mkdir -p $(dirname "$state") + ${flip concatMapStrings ips (ip: + let + cidr = "${ip.address}/${toString ip.prefixLength}"; + in + '' + echo "${cidr}" >> $state + echo -n "adding address ${cidr}... " + if out=$(ip addr add "${cidr}" dev "${i.name}" 2>&1); then + echo "done" + elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then + echo "failed" + exit 1 + fi + '' + )} + + state="/run/nixos/network/routes/${i.name}" mkdir -p $(dirname "$state") - '' + flip concatMapStrings (ips) (ip: - let - address = "${ip.address}/${toString ip.prefixLength}"; - in - '' - echo "${address}" >> $state - if out=$(ip addr add "${address}" dev "${i.name}" 2>&1); then - echo "added ip ${address}" - elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then - echo "failed to add ${address}" - exit 1 - fi - ''); + ${flip concatMapStrings (i.ipv4Routes ++ i.ipv6Routes) (route: + let + cidr = "${route.address}/${toString route.prefixLength}"; + nextHop = optionalString (route.nextHop != null) ''via "${route.nextHop}"''; + in + '' + echo "${cidr}" >> $state + echo -n "adding route ${cidr}... " + if out=$(ip route add "${cidr}" ${route.options} ${nextHop} dev "${i.name}" 2>&1); then + echo "done" + elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then + echo "failed" + exit 1 + fi + '' + )} + ''; preStop = '' + state="/run/nixos/network/routes/${i.name}" + while read cidr; do + echo -n "deleting route $cidr... " + ip route del "$cidr" dev "${i.name}" >/dev/null 2>&1 && echo "done" || echo "failed" + done < "$state" + rm -f "$state" + state="/run/nixos/network/addresses/${i.name}" - while read address; do - echo -n "deleting $address..." - ip addr del "$address" dev "${i.name}" >/dev/null 2>&1 || echo -n " Failed" - echo "" + while read cidr; do + echo -n "deleting address $cidr... " + ip addr del "$cidr" dev "${i.name}" >/dev/null 2>&1 && echo "done" || echo "failed" done < "$state" rm -f "$state" ''; |