blob: c6b7c4a1e85bfb7902452c6ab1e159e88627d34f [file] [log] [blame]
Greg Hartmane3e96152014-12-12 14:06:04 -08001# Set dhcp.<iface>.routeN.dest and dhcp.<iface>.routeN.via properties with
2# the static routes provided by the DHCP server.
3
4# CAUTION
5#
6# Placing this in the hooks directory will allow DHCP servers to push static
7# routes to ALL of the interfaces that use the directory.
8#
9# To avoid this, create separate dhcpcd configurations, one for the interfaces
10# that should accept static routes and another for the interfaces that should
11# not accept static routes routes.
12
13# Add this script in the hooks directory only for the interfaces that should
14# accept static routes.
15#
16# Add "nooption classless_static_routes, static_routes" to the dhcpcd.conf
17# file for the interfaces that should not accept static routes. Do not add the
18# script to the hooks directory.
19
20next_set_interface=1
21
22set_route_props_from_list()
23{
24 while [[ $# -ge 2 ]]; do
25 setprop dhcp.${interface}.route${next_set_interface}.dest $1
Greg Hartman9c529542014-12-18 15:21:03 -080026 shift
Greg Hartmane3e96152014-12-12 14:06:04 -080027 setprop dhcp.${interface}.route${next_set_interface}.via $1
Greg Hartman9c529542014-12-18 15:21:03 -080028 shift
Greg Hartmane3e96152014-12-12 14:06:04 -080029 next_set_interface=$(($next_set_interface + 1))
30 done
31}
32
33unset_route_props()
34{
35 next_clear_interface=1
36 while [[ ! -z "$(getprop dhcp.${interface}.route${next_clear_interface}.dest)" ]]; do
37 setprop dhcp.${interface}.route${next_clear_interface}.dest ""
38 setprop dhcp.${interface}.route${next_clear_interface}.via ""
39 next_clear_interface=$(($next_clear_interface + 1))
40 done
41 while [[ ! -z "$(getprop dhcp.${interface}.route${next_clear_interface}.via)" ]]; do
42 setprop dhcp.${interface}.route${next_clear_interface}.dest ""
43 setprop dhcp.${interface}.route${next_clear_interface}.via ""
44 next_clear_interface=$(($next_clear_interface + 1))
45 done
46}
47
48set_route_props()
49{
50 unset_route_props
51 if [[ ! -z "${new_classless_static_routes}" ]]; then
52 set_route_props_from_list ${new_classless_static_routes}
53 else
54 set_route_props_from_list ${new_static_routes}
55 fi
56}
57
58case "${reason}" in
59BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT) set_route_props;;
60EXPIRE|FAIL|IPV4LL|RELEASE|STOP) unset_route_props;;
61esac