#!/bin/sh # # /etc/network/if-up.d/reachable # /etc/network/if-down.d/reachable # # Specify reachable destination networks inside # an interface stanca: # # iface eth2 # address 10.0.0.1 # netmask 255.255.255.255 # reachable 10.0.0.2 10.0.0.3 # reachable-foo 10.0.0.2 10.0.0.3 # reachable-bar 10.0.0.4 10.0.0.5 # # subnet reachable via Gateway # reachable-baz via 10.0.0.2 10.0.0.128/25 # # Stefan Tomanek # http://wertarbyte.de/debian/ CMD_IP=/bin/ip if [ ! -x $CMD_IP ]; then exit 0 fi if [ "$MODE" = "start" ]; then OP="add" else OP="del" fi REACHABLE="$(/usr/bin/awk 'BEGIN { for (key in ENVIRON) { if (key ~ /^IF_REACHABLE(_|$)/) { split(ENVIRON[key], A); GW=""; if (A[1] == "via") { GW=A[2]; delete A[1]; delete A[2]; } for (j in A) { print A[j], GW; } } } }')" # Nothing to do? if [ -z "$REACHABLE" ]; then exit 0 fi echo "$REACHABLE" | while read DEST GW; do [ -n "$GW" ] && RPATH="via $GW" || RPATH="dev $IFACE"; FULL_CMD="$CMD_IP route $OP $DEST $RPATH" $FULL_CMD || \ echo "Error executing: $FULL_CMD" >&2 done