| # Set dhcp.<iface>.routeN.dest and dhcp.<iface>.routeN.via properties with |
| # the static routes provided by the DHCP server. |
| |
| # CAUTION |
| # |
| # Placing this in the hooks directory will allow DHCP servers to push static |
| # routes to ALL of the interfaces that use the directory. |
| # |
| # To avoid this, create separate dhcpcd configurations, one for the interfaces |
| # that should accept static routes and another for the interfaces that should |
| # not accept static routes routes. |
| |
| # Add this script in the hooks directory only for the interfaces that should |
| # accept static routes. |
| # |
| # Add "nooption classless_static_routes, static_routes" to the dhcpcd.conf |
| # file for the interfaces that should not accept static routes. Do not add the |
| # script to the hooks directory. |
| |
| next_set_interface=1 |
| |
| set_route_props_from_list() |
| { |
| while [[ $# -ge 2 ]]; do |
| setprop dhcp.${interface}.route${next_set_interface}.dest $1 |
| shift |
| setprop dhcp.${interface}.route${next_set_interface}.via $1 |
| shift |
| next_set_interface=$(($next_set_interface + 1)) |
| done |
| } |
| |
| unset_route_props() |
| { |
| next_clear_interface=1 |
| while [[ ! -z "$(getprop dhcp.${interface}.route${next_clear_interface}.dest)" ]]; do |
| setprop dhcp.${interface}.route${next_clear_interface}.dest "" |
| setprop dhcp.${interface}.route${next_clear_interface}.via "" |
| next_clear_interface=$(($next_clear_interface + 1)) |
| done |
| while [[ ! -z "$(getprop dhcp.${interface}.route${next_clear_interface}.via)" ]]; do |
| setprop dhcp.${interface}.route${next_clear_interface}.dest "" |
| setprop dhcp.${interface}.route${next_clear_interface}.via "" |
| next_clear_interface=$(($next_clear_interface + 1)) |
| done |
| } |
| |
| set_route_props() |
| { |
| unset_route_props |
| if [[ ! -z "${new_classless_static_routes}" ]]; then |
| set_route_props_from_list ${new_classless_static_routes} |
| else |
| set_route_props_from_list ${new_static_routes} |
| fi |
| } |
| |
| case "${reason}" in |
| BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT) set_route_props;; |
| EXPIRE|FAIL|IPV4LL|RELEASE|STOP) unset_route_props;; |
| esac |