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