diff options
| -rwxr-xr-x | package/base-files/files/lib/network/config.sh | 65 | 
1 files changed, 26 insertions, 39 deletions
| diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index a5bc9ac6f..c948c83a8 100755 --- a/package/base-files/files/lib/network/config.sh +++ b/package/base-files/files/lib/network/config.sh @@ -340,40 +340,32 @@ 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" -			fi +			service_kill udhcpc "$pidfile" + +			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" @@ -401,12 +393,7 @@ stop_interface_dhcp() {  	remove_dns "$config"  	local pidfile="/var/run/dhcp-${ifname}.pid" -	local pid="$(cat "$pidfile" 2>/dev/null)" -	[ -d "/proc/$pid" ] && { -		grep -qs udhcpc "/proc/$pid/cmdline" && kill -TERM $pid && \ -			while grep -qs udhcpc "/proc/$pid/cmdline"; do sleep 1; done -		rm -f "$pidfile" -	} +	service_kill udhcpc "$pidfile"  	uci -P /var/state revert "network.$config"  } | 
