A wireless interface in station mode with DHCP enabled loses it's IP address whenever you run "wifi". This is because the existing udhcpc instance keeps running, while the wireless interface is deleted and recreated, so the IP configuration is lost but the udhcpc instance does not send a new DHCP request.
Solve this problem by killing the existing DHCP instance and starting a new one rather than keeping the old one. Signed-off-by: Stijn Tintel <st...@linux-ipv6.be> --- package/base-files/files/lib/network/config.sh | 55 +++++++++++------------- 1 files changed, 25 insertions(+), 30 deletions(-) diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index 8321b19..10bd08b 100755 --- a/package/base-files/files/lib/network/config.sh +++ b/package/base-files/files/lib/network/config.sh @@ -339,40 +339,35 @@ setup_interface() { setup_interface_static "$iface" "$config" ;; dhcp) - local lockfile="/var/lock/dhcp-$iface" - lock "$lockfile" - - # prevent udhcpc from starting more than once + # kill running udhcpc instance local pidfile="/var/run/dhcp-${iface}.pid" local pid="$(cat "$pidfile" 2>/dev/null)" if [ -d "/proc/$pid" ] && grep -qs udhcpc "/proc/${pid}/cmdline"; then - lock -u "$lockfile" - else - local ipaddr netmask hostname proto1 clientid broadcast - config_get ipaddr "$config" ipaddr - config_get netmask "$config" netmask - config_get hostname "$config" hostname - config_get proto1 "$config" proto - config_get clientid "$config" clientid - config_get_bool broadcast "$config" broadcast 0 - - [ -z "$ipaddr" ] || \ - $DEBUG ifconfig "$iface" "$ipaddr" ${netmask:+netmask "$netmask"} - - # don't stay running in background if dhcp is not the main proto on the interface (e.g. when using pptp) - local dhcpopts - [ ."$proto1" != ."$proto" ] && dhcpopts="-n -q" - [ "$broadcast" = 1 ] && broadcast="-O broadcast" || broadcast= - - $DEBUG eval udhcpc -t 0 -i "$iface" \ - ${ipaddr:+-r $ipaddr} \ - ${hostname:+-H $hostname} \ - ${clientid:+-c $clientid} \ - -b -p "$pidfile" $broadcast \ - ${dhcpopts:- -O rootpath -R &} - - lock -u "$lockfile" + kill $pid fi + + local ipaddr netmask hostname proto1 clientid broadcast + config_get ipaddr "$config" ipaddr + config_get netmask "$config" netmask + config_get hostname "$config" hostname + config_get proto1 "$config" proto + config_get clientid "$config" clientid + config_get_bool broadcast "$config" broadcast 0 + + [ -z "$ipaddr" ] || \ + $DEBUG ifconfig "$iface" "$ipaddr" ${netmask:+netmask "$netmask"} + + # don't stay running in background if dhcp is not the main proto on the interface (e.g. when using pptp) + local dhcpopts + [ ."$proto1" != ."$proto" ] && dhcpopts="-n -q" + [ "$broadcast" = 1 ] && broadcast="-O broadcast" || broadcast= + + $DEBUG eval udhcpc -t 0 -i "$iface" \ + ${ipaddr:+-r $ipaddr} \ + ${hostname:+-H $hostname} \ + ${clientid:+-c $clientid} \ + -b -p "$pidfile" $broadcast \ + ${dhcpopts:- -O rootpath -R &} ;; none) setup_interface_none "$iface" "$config" -- 1.7.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel