X-Git-Url: http://git.ozo.com/?p=openwrt-10.03%2F.git;a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Flib%2Fnetwork%2Fconfig.sh;h=4504fa7a31a4206d9d044f1ecee51690c6dc4784;hp=674e7216b92bd6c7e6cf130de4d118191e61aed6;hb=44e664fabe1bf527215e2edbfce91165eeec5124;hpb=1ac7fd2661ed18ff59380f55927266d8b4828a62 diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index 674e7216b..4504fa7a3 100755 --- a/package/base-files/files/lib/network/config.sh +++ b/package/base-files/files/lib/network/config.sh @@ -3,6 +3,12 @@ # DEBUG="echo" +do_sysctl() { + [ -n "$2" ] && \ + sysctl -n -e -w "$1=$2" >/dev/null || \ + sysctl -n -e "$1" +} + find_config() { local iftype device iface ifaces ifn for ifn in $interfaces; do @@ -164,15 +170,6 @@ prepare_interface() { local macaddr config_get macaddr "$config" macaddr [ -x /usr/sbin/brctl ] && { - # Remove IPv6 link local addr before adding the iface to the bridge - local llv6="$(ifconfig "$iface")" - case "$llv6" in - *fe80:*/64*) - llv6="${llv6#* fe80:}" - ifconfig "$iface" del "fe80:${llv6%% *}" - ;; - esac - ifconfig "br-$config" 2>/dev/null >/dev/null && { local newdevs devices config_get devices "$config" device @@ -181,6 +178,7 @@ prepare_interface() { done uci_set_state network "$config" device "$newdevs" $DEBUG ifconfig "$iface" 0.0.0.0 + $DEBUG do_sysctl "net.ipv6.conf.$iface.disable_ipv6" 1 $DEBUG brctl addif "br-$config" "$iface" # Bridge existed already. No further processing necesary } || { @@ -188,10 +186,12 @@ prepare_interface() { config_get_bool stp "$config" stp 0 $DEBUG brctl addbr "br-$config" $DEBUG brctl setfd "br-$config" 0 - $DEBUG ifconfig "br-$config" up $DEBUG ifconfig "$iface" 0.0.0.0 + $DEBUG do_sysctl "net.ipv6.conf.$iface.disable_ipv6" 1 $DEBUG brctl addif "br-$config" "$iface" $DEBUG brctl stp "br-$config" $stp + [ -z "$macaddr" -a -e "/sys/class/net/$iface/address" ] && macaddr="$(cat /sys/class/net/$iface/address)" + $DEBUG ifconfig "br-$config" ${macaddr:+hw ether "${macaddr}"} up # Creating the bridge here will have triggered a hotplug event, which will # result in another setup_interface() call, so we simply stop processing # the current event at this point. @@ -228,16 +228,22 @@ setup_interface_static() { config_get ip6addr "$config" ip6addr [ -z "$ipaddr" -o -z "$netmask" ] && [ -z "$ip6addr" ] && return 1 - local gateway ip6gw dns bcast + local gateway ip6gw dns bcast metric config_get gateway "$config" gateway config_get ip6gw "$config" ip6gw config_get dns "$config" dns config_get bcast "$config" broadcast + config_get metric "$config" metric + + case "$ip6addr" in + */*) ;; + *:*) ip6addr="$ip6addr/64" ;; + esac [ -z "$ipaddr" ] || $DEBUG ifconfig "$iface" "$ipaddr" netmask "$netmask" broadcast "${bcast:-+}" [ -z "$ip6addr" ] || $DEBUG ifconfig "$iface" add "$ip6addr" - [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" dev "$iface" - [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" dev "$iface" + [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" ${metric:+metric $metric} dev "$iface" + [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" ${metric:+metric $metric} dev "$iface" [ -z "$dns" ] || add_dns "$config" $dns config_get type "$config" TYPE @@ -324,7 +330,7 @@ setup_interface() { } # Interface settings - grep "$iface:" /proc/net/dev > /dev/null && { + grep -qE "^ *$iface:" /proc/net/dev && { local mtu macaddr config_get mtu "$config" mtu config_get macaddr "$config" macaddr @@ -343,12 +349,13 @@ setup_interface() { local pidfile="/var/run/dhcp-${iface}.pid" service_kill udhcpc "$pidfile" - local ipaddr netmask hostname proto1 clientid broadcast + local ipaddr netmask hostname proto1 clientid vendorid 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 vendorid "$config" vendorid config_get_bool broadcast "$config" broadcast 0 [ -z "$ipaddr" ] || \ @@ -363,6 +370,7 @@ setup_interface() { ${ipaddr:+-r $ipaddr} \ ${hostname:+-H $hostname} \ ${clientid:+-c $clientid} \ + ${vendorid:+-V $vendorid} \ -b -p "$pidfile" $broadcast \ ${dhcpopts:- -O rootpath -R &} ;; @@ -407,6 +415,7 @@ unbridge() { for brdev in $(brctl show | awk '$2 ~ /^[0-9].*\./ { print $1 }'); do brctl delif "$brdev" "$dev" 2>/dev/null >/dev/null + do_sysctl "net.ipv6.conf.$dev.disable_ipv6" 0 done } }