netifd: Request DHCP option 121 (classless route) by default
authorBaptiste Jonglez <git@bitsofnetworks.org>
Sun, 9 Oct 2016 09:23:27 +0000 (11:23 +0200)
committerJohn Crispin <john@phrozen.org>
Wed, 26 Oct 2016 13:16:51 +0000 (15:16 +0200)
This option, defined by RFC3442, allows a DHCP server to send static
routes to a client.  But the client has to request this option
explicitely.

Static routes are useful when the gateway configured by DHCP cannot be
in the same subnet as the client.  This happens, for instance, when
using DHCP to hand out addresses in /32 subnets.

A new configuration option "classlessroute" is available, allowing
users to disable this feature (the option defaults to true).

Other DHCP clients already request this option by default (dhcpcd, for
instance, and possibly Windows).  If a DHCP server does not support
this option, it will simply ignore it.

Signed-off-by: Baptiste Jonglez <git@bitsofnetworks.org>
package/network/config/netifd/files/lib/netifd/proto/dhcp.sh

index 1d3a2091060aac6b89d8d10f915b11b251011a85..ea02d68bb4fb00a2365c4f9bfd68ea1c3b7d34ba 100755 (executable)
@@ -21,14 +21,15 @@ proto_dhcp_init_config() {
        proto_config_add_string zone
        proto_config_add_string mtu6rd
        proto_config_add_string customroutes
+       proto_config_add_boolean classlessroute
 }
 
 proto_dhcp_setup() {
        local config="$1"
        local iface="$2"
 
-       local ipaddr hostname clientid vendorid broadcast release reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes
-       json_get_vars ipaddr hostname clientid vendorid broadcast release reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes
+       local ipaddr hostname clientid vendorid broadcast release reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes classlessroute
+       json_get_vars ipaddr hostname clientid vendorid broadcast release reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes classlessroute
 
        local opt dhcpopts
        for opt in $reqopts; do
@@ -49,6 +50,8 @@ proto_dhcp_setup() {
        [ -n "$mtu6rd" ] && proto_export "MTU6RD=$mtu6rd"
        [ -n "$customroutes" ] && proto_export "CUSTOMROUTES=$customroutes"
        [ "$delegate" = "0" ] && proto_export "IFACE6RD_DELEGATE=0"
+       # Request classless route option (see RFC 3442) by default
+       [ "$classlessroute" = "0" ] || append dhcpopts "-O 121"
 
        proto_export "INTERFACE=$config"
        proto_run_command "$config" udhcpc \