blob: 3be5e02477ddab9f4819699f9a68904b6d3d392b (
plain)
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
|
#!/bin/bash
#
# /etc/dhcp/dhclient-exit-hooks
#
# This file is sourced by /sbin/dhclient-script.
#
# dhcp option 121 is defined in RFC3442. The following is the link.
# http://www.ietf.org/rfc/rfc3442.txt
#
# The code for this option is 121, and its minimum length is 5 bytes.
# This option can contain one or more static routes, each of which
# consists of a destination descriptor and the IP address of the router
# that should be used to reach that destination.
#
# Code Len Destination 1 Router 1
# +-----+---+----+-----+----+----+----+----+----+
# | 121 | n | d1 | ... | dN | r1 | r2 | r3 | r4 |
# +-----+---+----+-----+----+----+----+----+----+
#
# Destination 2 Router 2
# +----+-----+----+----+----+----+----+
# | d1 | ... | dN | r1 | r2 | r3 | r4 |
# +----+-----+----+----+----+----+----+
#
# In the above example, two static routes are specified.
#
# The following table contains some examples of how various subnet
# number/mask combinations can be encoded:
#
# Subnet number Subnet mask Destination descriptor
# 0 0 0
# 10.0.0.0 255.0.0.0 8.10
# 10.0.0.0 255.255.255.0 24.10.0.0
# 10.17.0.0 255.255.0.0 16.10.17
# 10.27.129.0 255.255.255.0 24.10.27.129
# 10.229.0.128 255.255.255.128 25.10.229.0.128
# 10.198.122.47 255.255.255.255 32.10.198.122.47
#
# For metadata service, the following is a valid route from nova-api that
# the VM instance can uses to retrieve metadata.
#
# 32 169 254 169 254 128 224 149 201
#
# In the above example, mask length of destination descriptor is always 32,
# destination is always "169.254.169.254", and the gateway is a valid IP address.
#
# The add_routes function takes an array of unsigned integer 8, separated by spaces,
# parse them, and added each of the routes into routing table.
#
function add_routes() {
while [ $# -ne 0 ]; do
mask=$1
shift
# Parse the arguments into a CIDR net/mask string
if [ $mask -eq 32 ]; then
destination="-host $1.$2.$3.$4"
shift; shift; shift; shift
elif [ $mask -gt 24 ]; then
destination="-net $1.$2.$3.$4/$mask"
shift; shift; shift; shift
elif [ $mask -gt 16 ]; then
destination="-net $1.$2.$3.0/$mask"
shift; shift; shift
elif [ $mask -gt 8 ]; then
destination="-net $1.$2.0.0/$mask"
shift; shift
else
destination="-net $1.0.0.0/$mask"
shift
fi
# Read the gateway
gateway="$1.$2.$3.$4"
shift; shift; shift; shift
# Add route into routing table
route add $destination gw $gateway
# Print it out if the route is added successfully
if [ $? = 0 ]; then
echo "Added route \"$destination gw $gateway\""
fi
done
}
# Call add_routes to add routes
if [ "x$new_classless_static_routes" != x ]; then
add_routes $new_classless_static_routes
fi
|