diff options
Diffstat (limited to 'package/base-files')
-rw-r--r-- | package/base-files/files/etc/hotplug.d/iface/00-netstate | 6 | ||||
-rwxr-xr-x | package/base-files/files/etc/init.d/boot | 1 | ||||
-rwxr-xr-x | package/base-files/files/lib/network/config.sh | 10 | ||||
-rwxr-xr-x | package/base-files/files/sbin/ifdown | 6 | ||||
-rwxr-xr-x | package/base-files/files/usr/share/udhcpc/default.script | 8 |
5 files changed, 25 insertions, 6 deletions
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 0000000..fce5472 --- /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 7181f8b..02519fb 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 8e19a6e..c6d909f 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 8ec568f..f8ce81b 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 53bb699..a3a696b 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 } |