X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/90b20d79a9ec5b8a44bb92c8abdb21948aeb062c..408f7a2c28d32288e6d2e1935cd610fd8ff2b36a:/svc/tripe-ifup.in diff --git a/svc/tripe-ifup.in b/svc/tripe-ifup.in index 8ca0c99c..032142c5 100644 --- a/svc/tripe-ifup.in +++ b/svc/tripe-ifup.in @@ -25,6 +25,18 @@ export PATH TRIPEDIR if [ -d /proc/sys/net/ipv6 ]; then have6=t; else have6=nil; fi ###-------------------------------------------------------------------------- +### Error handling. + +win=t +try () { + if "$@"; then :; else + rc=$? + tripectl warn tripe-ifup command-failed rc=$rc "$*" + win=nil + fi +} + +###-------------------------------------------------------------------------- ### Collect arguments. ## Collect the simple arguments. @@ -46,14 +58,14 @@ esac case "${P_IFNAME+set}" in set) - ip link set "$ifname" name "$P_IFNAME" + try ip link set "$ifname" name "$P_IFNAME" ifname=$P_IFNAME $tripectl setifname "$peer" "$ifname" ;; esac ###-------------------------------------------------------------------------- -### Configure the point-to-point link. +### Configure the link. ## Split local addresses into v4 and v6 lists. unset l4addr l6addr @@ -80,13 +92,13 @@ haveaddr4=nil set -- $l4addr case $#,${r4addr+set} in [1-9]*,set) - ip addr add "$1" peer "$r4addr" dev "$ifname" + try ip addr add "$1" peer "$r4addr" dev "$ifname" haveaddr4=t shift ;; esac for a in "$@"; do - ip addr add "$a/32" dev "$ifname" + try ip addr add "$a" dev "$ifname" haveaddr4=t done @@ -96,13 +108,39 @@ haveaddr6=nil set -- $l6addr case $have6,$# in t,[1-9]*) + + ## If we're configured to set IPv6 addresses then we should ensure that + ## they're going to work, even if the default setting for new interfaces + ## is to disable IPv6. + try sysctl -q net.ipv6.conf."$ifname".disable_ipv6=0 + + ## Now add the source and destination addresses. for a in "$@"; do - ip addr add "$a/128" dev "$ifname" + try ip addr add "$a" dev "$ifname" haveaddr6=t done case ${r6addr+set} in - set) ip route add $r6addr/128 dev "$ifname" ;; + set) try ip route add $r6addr proto static dev "$ifname" ;; + esac + ;; +esac + +###-------------------------------------------------------------------------- +### Bring the interface up. + +case $haveaddr4,$haveaddr6 in + nil,nil) + ;; + *) + case "${P_MTU+set}" in + set) + mtu=$P_MTU;; + *) + pathmtu=$(pathmtu "$addr") + mtu=$(expr "$pathmtu" - 29 - $A_BULK_OVERHEAD) + ;; esac + try ip link set dev "$ifname" up mtu "$mtu" ;; esac @@ -123,7 +161,7 @@ set -- $route4 case $haveaddr4,$# in t,[1-9]*) for p in "$@"; do - ip route add $p via "$r4addr" + try ip route add $p proto static via "$r4addr" done ;; esac @@ -133,31 +171,12 @@ set -- $route6 case $haveaddr6,$# in t,[1-9]*) for p in "$@"; do - ip route add $p via "$r6addr" + try ip route add $p proto static via "${r6addr%/*}" done ;; esac ###-------------------------------------------------------------------------- -### Bring the interface up. - -case $haveaddr4,$haveaddr6 in - nil,nil) - ;; - *) - case "${P_MTU+set}" in - set) - mtu=$P_MTU;; - *) - pathmtu=$(pathmtu "$addr") - mtu=$(expr "$pathmtu" - 33 - $A_CIPHER_BLKSZ - $A_MAC_TAGSZ) - ;; - esac - ip link set dev "$ifname" up mtu "$mtu" - ;; -esac - -###-------------------------------------------------------------------------- ### Maybe invoke a follow-on script. case "${P_IFUPEXTRA+set}" in @@ -169,6 +188,9 @@ esac ###-------------------------------------------------------------------------- ### Issue a notification that we've won. -$tripectl notify tripe-ifup configured "$peer" +case $win in + t) $tripectl notify tripe-ifup configured "$peer" ;; + nil) $tripectl notify tripe-ifup configured "$peer" failed ;; +esac ###----- That's all, folks --------------------------------------------------