X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/5b968d5e4aa26455c3ac7ac9fa3824c254994232..844abf94571ffdd3e113c518947073ff5375d748:/svc/tripe-ifup.in diff --git a/svc/tripe-ifup.in b/svc/tripe-ifup.in index ae447db8..032142c5 100644 --- a/svc/tripe-ifup.in +++ b/svc/tripe-ifup.in @@ -24,6 +24,18 @@ export PATH TRIPEDIR ## Determine whether we have IPv6 support. 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. @@ -46,7 +58,7 @@ 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" ;; @@ -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" dev "$ifname" + try ip addr add "$a" dev "$ifname" haveaddr4=t done @@ -96,12 +108,19 @@ 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" dev "$ifname" + try ip addr add "$a" dev "$ifname" haveaddr6=t done case ${r6addr+set} in - set) ip route add $r6addr proto static dev "$ifname" ;; + set) try ip route add $r6addr proto static dev "$ifname" ;; esac ;; esac @@ -121,7 +140,7 @@ case $haveaddr4,$haveaddr6 in mtu=$(expr "$pathmtu" - 29 - $A_BULK_OVERHEAD) ;; esac - ip link set dev "$ifname" up mtu "$mtu" + try ip link set dev "$ifname" up mtu "$mtu" ;; esac @@ -142,7 +161,7 @@ set -- $route4 case $haveaddr4,$# in t,[1-9]*) for p in "$@"; do - ip route add $p proto static via "$r4addr" + try ip route add $p proto static via "$r4addr" done ;; esac @@ -152,7 +171,7 @@ set -- $route6 case $haveaddr6,$# in t,[1-9]*) for p in "$@"; do - ip route add $p proto static via "${r6addr%/*}" + try ip route add $p proto static via "${r6addr%/*}" done ;; esac @@ -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 --------------------------------------------------