From 97ca42e813d5a0a03bd1a70576375dad8469044a Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 16 Jun 2007 00:01:33 +0000 Subject: keep track of the network interface states (stored in uci format in /var/state/network, overlay over /etc/config/network) git-svn-id: svn://svn.openwrt.org/openwrt/trunk@7643 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/base-files/files/etc/hotplug.d/iface/00-netstate | 6 ++++++ package/base-files/files/etc/init.d/boot | 1 + package/base-files/files/lib/network/config.sh | 10 +++++----- package/base-files/files/sbin/ifdown | 6 ++++++ package/base-files/files/usr/share/udhcpc/default.script | 8 +++++++- 5 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 package/base-files/files/etc/hotplug.d/iface/00-netstate (limited to 'package/base-files') diff --git a/package/base-files/files/etc/hotplug.d/iface/00-netstate b/package/base-files/files/etc/hotplug.d/iface/00-netstate new file mode 100644 index 0000000000..fce5472cf2 --- /dev/null +++ b/package/base-files/files/etc/hotplug.d/iface/00-netstate @@ -0,0 +1,6 @@ +[ ifup = "$ACTION" ] && { + uci set "/var/state/network.$INTERFACE.up=1" + [ -z "$DEVICE" ] || { + uci set "/var/state/network.$INTERFACE.ifname=$DEVICE" + } +} diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot index 7181f8b004..02519fbbc7 100755 --- a/package/base-files/files/etc/init.d/boot +++ b/package/base-files/files/etc/init.d/boot @@ -35,6 +35,7 @@ start() { mkdir -p /var/run mkdir -p /var/log mkdir -p /var/lock + mkdir -p /var/state touch /var/log/wtmp touch /var/log/lastlog ln -s /tmp/resolv.conf.auto /tmp/resolv.conf diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index 8e19a6e996..c6d909fd0a 100755 --- a/package/base-files/files/lib/network/config.sh +++ b/package/base-files/files/lib/network/config.sh @@ -74,9 +74,7 @@ prepare_interface() { # if we're called for the bridge interface itself, don't bother trying # to create any interfaces here. The scripts have already done that, otherwise # the bridge interface wouldn't exist. - [ "br-$config" = "$iface" ] && return 0; - - [ -f "$iface" ] && return 0; + [ "br-$config" = "$iface" -o -f "$iface" ] && return 0; ifconfig "$iface" 2>/dev/null >/dev/null && { # make sure the interface is removed from any existing bridge and brought down @@ -155,9 +153,11 @@ setup_interface() { [ -z "$ip6addr" ] || $DEBUG ifconfig "$iface" add "$ip6addr" [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" [ -z "$bcast" ] || $DEBUG ifconfig "$iface" broadcast "$bcast" - [ -z "$dns" -o -f /tmp/resolv.conf.auto ] || { + [ -z "$dns" ] || { for ns in $dns; do - echo "nameserver $ns" >> /tmp/resolv.conf.auto + grep "$ns" /tmp/resolv.conf.auto 2>/dev/null >/dev/null || { + echo "nameserver $ns" >> /tmp/resolv.conf.auto + } done } diff --git a/package/base-files/files/sbin/ifdown b/package/base-files/files/sbin/ifdown index 8ec568ff6b..f8ce81bcbd 100755 --- a/package/base-files/files/sbin/ifdown +++ b/package/base-files/files/sbin/ifdown @@ -10,6 +10,12 @@ config_load network exit } + +# remove the interface's network state +FILE=/var/state/network.$$ +grep -v "^config_set '$1' " /var/state/network > "$FILE" +mv "$FILE" /var/state/network + include /lib/network scan_interfaces diff --git a/package/base-files/files/usr/share/udhcpc/default.script b/package/base-files/files/usr/share/udhcpc/default.script index 53bb6999f6..a3a696be70 100755 --- a/package/base-files/files/usr/share/udhcpc/default.script +++ b/package/base-files/files/usr/share/udhcpc/default.script @@ -13,7 +13,13 @@ hotplug_event() { config_get proto $ifc proto [ "$proto" = "dhcp" ] || continue - + [ ifup = "$1" ] && { + uci set "/var/state/network.$ifc.ipaddr=$ip" + uci set "/var/state/network.$ifc.netmask=${subnet:-255.255.255.0}" + uci set "/var/state/network.$ifc.dnsdomain=$domain" + uci set "/var/state/network.$ifc.dns=$dns" + uci set "/var/state/network.$ifc.gateway=$router" + } env -i ACTION="$1" INTERFACE="$ifc" DEVICE="$ifname" PROTO=dhcp /sbin/hotplug-call iface done } -- cgit v1.2.3