/etc/network/ifupdown-scripts-zg2.d/staticroutes is in ifupdown-scripts-zg2 0.6-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #!/bin/bash
# IFACE = Logical interface name
# MODE = start | stop
# METHOD = manual, otherwise exit!
# IF_ROUTEn = static routes (network/prefix gateway)
# IF_DEVICE = device to be used
. /etc/network/ifupdown-scripts-zg2.d/common-functions
case "$MODE" in
start)
# adds static routes given in config file
for R in ${!IF_ROUTE*}; do
eval S=\$$R
verbose "route entry $S"
# a "route_foo" statement in the config file can use two different
# forms of syntax:
# route_foo prefix gateway/device metric/table
# route_foo ip route <cmd line> and
# if the string after "route_foo" in the config file does not start
# with "ip route", the following words are interpreted as
# prefix - prefix for the route, used as "to" parameter.
# gateway/device - if IP address, gateway for the route,
# used as "via" parameter,
# otherwise, device for the route,
# used as "dev" parameter.
# metric/table - if numeric, metric for the route,
# used as "metric" parameter.
# otherwise, table for the route,
# used as "route" parameter.
# From these values, appropriate "ip route" command lines are
# constructed for interface startup and shutdown. This should cover
# almost all non-exotic cases.
# if the string after "route_foo" in the config file starts with
# "ip route", the remainder of the string is taken as a full ip route
# command line which will be appended to "ip route add" on interface
# startup and to "ip route del" on interface shutdown.
ROUTEPARM=""
if [[ "$S" = "ip route"* ]]; then
ROUTEPARM="${S#ip route }"
verbose "explicit ip command ip route $ROUTEPARM"
else
# parse prefix gateway/device metric/table to variables and build
# ROUTEPARM
# take each word in $S and prefix it with the first word of PARAMS.
# then cut each word from PARAMS.
# concatenate each of the resulting strings to a valid ip command line.
PARAMS="to gatewaydevice metrictable END"
for word in $S; do
if [ "$PARAMS" = "END" ]; then
abort "too many parameters in static route $S"
fi
PARAM="${PARAMS%% *}"
verbose "parse PARAM $PARAM word $word"
case "${PARAMS%% *}" in
gatewaydevice)
verbose "parse word $word"
if echo $word | grep --quiet '^\([0-9a-f:\.]\+\)\(%\([a-z0-9]\+\)\)\?$'; then
GATEWAY="$(echo $word | sed 's/^\([0-9a-f:\.]\+\)\(%\([a-z0-9]\+\)\)\?$/\1/')"
ROUTEPARM="$ROUTEPARM via $GATEWAY"
DEVICE="$(echo $word | sed 's/^\([0-9a-f:\.]\+\)\(%\([a-z0-9]\+\)\)\?$/\3/')"
verbose "parse GATEWAY $GATEWAY"
verbose "parse DEVICE $DEVICE"
if [ -n "$DEVICE" ]; then
ROUTEPARM="$ROUTEPARM dev $DEVICE"
fi
else
ROUTEPARM="$ROUTEPARM dev $word"
fi
;;
metrictable)
if echo $word | grep --quiet '^[0-9]\+$'; then
ROUTEPARM="$ROUTEPARM metric $word"
else
ROUTEPARM="$ROUTEPARM table $word"
fi
;;
*)
ROUTEPARM="$ROUTEPARM ${PARAMS%% *} $word"
;;
esac
PARAMS="${PARAMS#* }"
done
if [ "${PARAMS%% *}" = "dest" ]; then
# no destination given, take interface instead
ROUTEPARM="$ROUTEPARM dev $IF_DEVICE"
fi
verbose "constructed ip command ip route add/del $ROUTEPARM"
fi
cmd "ip route add $ROUTEPARM"
add_down "routes" "route del $ROUTEPARM"
done
;;
stop)
exec_down "routes" "ip"
;;
*)
;;
esac
# end of file
|