summaryrefslogtreecommitdiff
path: root/package/base-files/files/etc/hotplug.d/iface/10-routes
blob: 9d0ea1d5fe8bdd788bb6759157aea1b1b87700b7 (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
add_route() {
	local config="$1"

	# is this route intended for the
	# $INTERFACE of this hotplug event
	config_get interface "$config" interface
	[ "$interface" != "$INTERFACE" ] && return 0
	
	# get the real interface name from network config
	config_get dev "$interface" ifname

	config_get target "$config" target
	config_get netmask "$config" netmask
	config_get gateway "$config" gateway
	config_get metric "$config" metric

	# make sure there is a gateway and a target
	[ -n "$target" ] || {
		echo "Missing target in route section $config"
		return 1
	}
	[ -n "$gateway" ] || {
		config_get gateway "$interface" gateway
	}

	# handle "0.0.0.0" and "interface" as "no gateway given"
	# to allow defining gateway-less routes while still
	# keeping the possibility to have static routes with a
	# proper gateway on interfaces with dynamic ips 
	[ "$gateway" = "0.0.0.0" -o \
		"$gateway" = "interface" ] && gateway=""

	dest="${netmask:+-net "$target" netmask "$netmask"}"
	dest="${dest:--host "$target"}"
	
	/sbin/route add $dest ${gateway:+gw "$gateway"} \
		${dev:+dev "$dev"} ${metric:+ metric "$metric"}
}

add_route6() {
	local config="$1"

	# is this route intended for the
	# $INTERFACE of this hotplug event
	config_get interface "$config" interface
	[ "$interface" != "$INTERFACE" ] && return 0
	
	# get the real interface name from network config
	config_get dev "$interface" ifname

	config_get target "$config" target
	config_get gateway "$config" gateway
	config_get metric "$config" metric

	# make sure there is a gateway and a target
	[ -n "$target" ] || {
		echo "Missing target in route section $config"
		return 1
	}
	[ -n "$gateway" ] || {
		config_get gateway "$interface" gateway
	}

	/sbin/route -A inet6 add $target ${gateway:+gw "$gateway"} \
		${dev:+dev "$dev"} ${metric:+ metric "$metric"}
}

case "$ACTION" in
	ifup)
		include /lib/network
		scan_interfaces
		config_foreach "add_route" route
		config_foreach "add_route6" route6
	;;
esac