1 | #!/bin/sh |
---|
2 | |
---|
3 | set -x |
---|
4 | |
---|
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. |
---|
11 | |
---|
12 | # optional arugument to set default gateway manually |
---|
13 | GATEWAY=$1 |
---|
14 | |
---|
15 | TID=`/sbin/ip addr show dev ${IFACE} | grep -w ${IFACE}: | cut -d : -f 1` |
---|
16 | |
---|
17 | if [ "${PHASE}" = "post-down" ]; then |
---|
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 |
---|
24 | echo "remove routing table and policy for ${IFACE}" |
---|
25 | exit |
---|
26 | fi |
---|
27 | |
---|
28 | |
---|
29 | # get IP address, network mask, default gateway info |
---|
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 | if [ -z ${IPADDR} ]; then |
---|
32 | # fail to bind IP address to device |
---|
33 | echo "${IFACE} has no IP address." |
---|
34 | exit |
---|
35 | fi |
---|
36 | NETWORK=`/sbin/ip route show dev ${IFACE} | grep -w ${IPADDR} | cut -d ' ' -f 1` |
---|
37 | |
---|
38 | if [ -z "${GATEWAY}" ]; then |
---|
39 | GATEWAY=`/sbin/ip route show dev ${IFACE} | grep -w default | cut -d ' ' -f 3` |
---|
40 | fi |
---|
41 | if [ -z "${GATEWAY}" ]; then |
---|
42 | GATEWAY=`/sbin/ip route | grep -w default | cut -d ' ' -f 3` |
---|
43 | # this may add wrong default route especially on RHEL |
---|
44 | fi |
---|
45 | |
---|
46 | |
---|
47 | # set routing table |
---|
48 | /sbin/ip route add ${NETWORK} dev ${IFACE} table ${TID} |
---|
49 | /sbin/ip route add default via ${GATEWAY} dev ${IFACE} table ${TID} |
---|
50 | |
---|
51 | # set routing policy |
---|
52 | /sbin/ip rule add from ${IPADDR} table ${TID} priority ${TID} |
---|
53 | |
---|
54 | /sbin/ip route flush cache |
---|
55 | echo "add routing table and policy for ${IFACE} on table ${TID}" |
---|