From 1ac7fd2661ed18ff59380f55927266d8b4828a62 Mon Sep 17 00:00:00 2001 From: jow Date: Sun, 19 Sep 2010 15:18:07 +0000 Subject: [PATCH] [backfire] merge r23087, r23091 and r23092 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@23094 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/base-files/Makefile | 2 +- package/base-files/files/etc/functions.sh | 17 ++++++ package/base-files/files/lib/network/config.sh | 65 +++++++++------------- .../files/usr/share/udhcpc/default.script | 6 +- 4 files changed, 47 insertions(+), 43 deletions(-) diff --git a/package/base-files/Makefile b/package/base-files/Makefile index ade72195d..6c57afda1 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=base-files -PKG_RELEASE:=43.3 +PKG_RELEASE:=43.4 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ PKG_BUILD_DEPENDS:=opkg/host diff --git a/package/base-files/files/etc/functions.sh b/package/base-files/files/etc/functions.sh index fa0ba0427..d58f92ce0 100755 --- a/package/base-files/files/etc/functions.sh +++ b/package/base-files/files/etc/functions.sh @@ -274,4 +274,21 @@ uci_apply_defaults() { uci commit } +service_kill() { + local name="${1}" + local pid="${2:-$(pidof "$name")}" + local grace="${3:-5}" + + [ -f "$pid" ] && pid="$(head -n1 "$pid" 2>/dev/null)" + + for pid in $pid; do + [ -d "/proc/$pid" ] || continue + local try=0 + kill -TERM $pid 2>/dev/null && \ + while grep -qs "$name" "/proc/$pid/cmdline" && [ $((try++)) -lt $grace ]; do sleep 1; done + kill -KILL $pid 2>/dev/null && \ + while grep -qs "$name" "/proc/$pid/cmdline"; do sleep 1; done + done +} + [ -z "$IPKG_INSTROOT" -a -f /lib/config/uci.sh ] && . /lib/config/uci.sh diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index 8321b191b..674e7216b 100755 --- a/package/base-files/files/lib/network/config.sh +++ b/package/base-files/files/lib/network/config.sh @@ -339,40 +339,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" @@ -400,12 +392,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" } diff --git a/package/base-files/files/usr/share/udhcpc/default.script b/package/base-files/files/usr/share/udhcpc/default.script index 39527778a..92e3474bd 100755 --- a/package/base-files/files/usr/share/udhcpc/default.script +++ b/package/base-files/files/usr/share/udhcpc/default.script @@ -21,9 +21,9 @@ setup_interface () { local user_router [ -n "$ifc" ] && { - config_get old_ip "$ifc" ipaddr - config_get old_broadcast "$ifc" broadcast - config_get old_subnet "$ifc" netmask + old_ip="$(uci_get_state network "$ifc" ipaddr)" + old_broadcast="$(uci_get_state network "$ifc" broadcast)" + old_subnet="$(uci_get_state network "$ifc" netmask)" } [ "$ip" != "$old_ip" ] \ -- 2.11.0