[5] | 1 | #!/bin/sh |
---|
| 2 | |
---|
| 3 | set -x |
---|
| 4 | |
---|
[6] | 5 | ## INTERFACES(5) |
---|
| 6 | # IFACE physical name of the interface being processed |
---|
| 7 | # METHOD method of the interface (e.g., static) |
---|
| 8 | # MODE start if run from ifup, stop if run from ifdown |
---|
| 9 | # PHASE as per MODE, but with finer granularity, distinguishing the pre- |
---|
| 10 | # up, post-up, pre-down and post-down phases. |
---|
[5] | 11 | |
---|
[6] | 12 | # optional arugument to set default gateway manually |
---|
| 13 | GATEWAY=$1 |
---|
[5] | 14 | |
---|
[6] | 15 | TID=`/sbin/ip addr show dev ${IFACE} | grep -w ${IFACE}: | cut -d : -f 1` |
---|
| 16 | |
---|
| 17 | if [ "${PHASE}" = "post-down" ]; then |
---|
[5] | 18 | # delete routing table and policy and exit |
---|
| 19 | ## routing table is automatically flushed, so 'route flush' can be removed |
---|
| 20 | /sbin/ip route flush table ${TID} |
---|
| 21 | ## device has no longer any IP addr, so do not use IPADDR |
---|
| 22 | /sbin/ip rule del table ${TID} priority ${TID} |
---|
| 23 | /sbin/ip route flush cache |
---|
[6] | 24 | echo "remove routing table and policy for ${IFACE}" |
---|
[5] | 25 | exit |
---|
| 26 | fi |
---|
| 27 | |
---|
| 28 | |
---|
| 29 | # get IP address, network mask, default gateway info |
---|
[6] | 30 | IPADDR=`/sbin/ip addr show dev ${IFACE} | grep -w inet | cut -d t -f 2 | cut -d ' ' -f 2 | cut -d / -f 1` |
---|
| 31 | NETWORK=`/sbin/ip route show dev ${IFACE} | grep -w ${IPADDR} | cut -d ' ' -f 1` |
---|
[5] | 32 | |
---|
| 33 | if [ -z "${GATEWAY}" ]; then |
---|
[6] | 34 | GATEWAY=`/sbin/ip route show dev ${IFACE} | grep -w default | cut -d ' ' -f 3` |
---|
[5] | 35 | fi |
---|
| 36 | if [ -z "${GATEWAY}" ]; then |
---|
| 37 | GATEWAY=`/sbin/ip route | grep -w default | cut -d ' ' -f 3` |
---|
| 38 | # this may add wrong default route especially on RHEL |
---|
| 39 | fi |
---|
| 40 | |
---|
| 41 | |
---|
| 42 | # set routing table |
---|
[6] | 43 | /sbin/ip route add ${NETWORK} dev ${IFACE} table ${TID} |
---|
| 44 | /sbin/ip route add default via ${GATEWAY} dev ${IFACE} table ${TID} |
---|
[5] | 45 | |
---|
| 46 | # set routing policy |
---|
| 47 | /sbin/ip rule add from ${IPADDR} table ${TID} priority ${TID} |
---|
| 48 | |
---|
| 49 | /sbin/ip route flush cache |
---|
[6] | 50 | echo "add routing table and policy for ${IFACE} on table ${TID}" |
---|