Greg Hartman | e3e9615 | 2014-12-12 14:06:04 -0800 | [diff] [blame] | 1 | # 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 | |
| 20 | next_set_interface=1 |
| 21 | |
| 22 | set_route_props_from_list() |
| 23 | { |
| 24 | while [[ $# -ge 2 ]]; do |
| 25 | setprop dhcp.${interface}.route${next_set_interface}.dest $1 |
Greg Hartman | 9c52954 | 2014-12-18 15:21:03 -0800 | [diff] [blame] | 26 | shift |
Greg Hartman | e3e9615 | 2014-12-12 14:06:04 -0800 | [diff] [blame] | 27 | setprop dhcp.${interface}.route${next_set_interface}.via $1 |
Greg Hartman | 9c52954 | 2014-12-18 15:21:03 -0800 | [diff] [blame] | 28 | shift |
Greg Hartman | e3e9615 | 2014-12-12 14:06:04 -0800 | [diff] [blame] | 29 | next_set_interface=$(($next_set_interface + 1)) |
| 30 | done |
| 31 | } |
| 32 | |
| 33 | unset_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 | |
| 48 | set_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 | |
| 58 | case "${reason}" in |
| 59 | BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT) set_route_props;; |
| 60 | EXPIRE|FAIL|IPV4LL|RELEASE|STOP) unset_route_props;; |
| 61 | esac |