It is pretty common use case for a network device to be configured
as DHCP client but having some fallback static IP address where it
would be reachable for, e.g., configuration.

This adds 'fallbackip' network config option, which will be used
on an interface until device receives an IP from DHCP server.

Signed-off-by: Roman Yeryomin <ro...@advem.lv>
---
 .../network/config/netifd/files/lib/netifd/dhcp.script    | 8 +++++++-
 .../network/config/netifd/files/lib/netifd/proto/dhcp.sh  | 7 +++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/package/network/config/netifd/files/lib/netifd/dhcp.script 
b/package/network/config/netifd/files/lib/netifd/dhcp.script
index db8deac9e6..da7c30f72c 100755
--- a/package/network/config/netifd/files/lib/netifd/dhcp.script
+++ b/package/network/config/netifd/files/lib/netifd/dhcp.script
@@ -98,7 +98,13 @@ setup_interface () {
 }
 
 deconfig_interface() {
-       proto_init_update "*" 0
+       if [ -z "$FALLBACKIP" ]; then
+               proto_init_update "*" 0
+       else
+               proto_init_update "*" 1
+               proto_add_ipv4_address "$FALLBACKIP" "255.255.255.0"
+       fi
+
        proto_send_update "$INTERFACE"
 }
 
diff --git a/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh 
b/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
index 636b4654ff..020038f0f8 100755
--- a/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
+++ b/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
@@ -10,6 +10,7 @@ proto_dhcp_init_config() {
        renew_handler=1
 
        proto_config_add_string 'ipaddr:ipaddr'
+       proto_config_add_string 'fallbackip:fallbackip'
        proto_config_add_string 'hostname:hostname'
        proto_config_add_string clientid
        proto_config_add_string vendorid
@@ -35,8 +36,8 @@ proto_dhcp_setup() {
        local config="$1"
        local iface="$2"
 
-       local ipaddr hostname clientid vendorid broadcast norelease reqopts 
defaultreqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes 
classlessroute
-       json_get_vars ipaddr hostname clientid vendorid broadcast norelease 
reqopts defaultreqopts iface6rd delegate zone6rd zone mtu6rd customroutes 
classlessroute
+       local ipaddr fallbackip hostname clientid vendorid broadcast norelease 
reqopts defaultreqopts iface6rd sendopts delegate zone6rd zone mtu6rd 
customroutes classlessroute
+       json_get_vars ipaddr fallbackip hostname clientid vendorid broadcast 
norelease reqopts defaultreqopts iface6rd delegate zone6rd zone mtu6rd 
customroutes classlessroute
 
        local opt dhcpopts
        for opt in $reqopts; do
@@ -63,6 +64,8 @@ proto_dhcp_setup() {
        [ "$classlessroute" = "0" ] || append dhcpopts "-O 121"
 
        proto_export "INTERFACE=$config"
+       proto_export "FALLBACKIP=$fallbackip"
+
        proto_run_command "$config" udhcpc \
                -p /var/run/udhcpc-$iface.pid \
                -s /lib/netifd/dhcp.script \
-- 
2.43.0


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to