X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Flib%2Fnetwork%2Fconfig.sh;h=def1562901b5bfd110465cd6f58f4eb74fdc5d7d;hp=c948c83a85bbc21bcb3d0648a82402b93a4d3b4c;hb=6b18089547afaf51bfd543b0b77be1501ee64a74;hpb=e7df0d72fa029b8200202b45d89922667f2f1bde diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index c948c83a85..def1562901 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 } || { @@ -190,6 +188,7 @@ prepare_interface() { $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 # Creating the bridge here will have triggered a hotplug event, which will @@ -228,16 +227,17 @@ 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 [ -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 @@ -344,28 +344,36 @@ 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 reqopts 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 + config_get reqopts "$config" reqopts [ -z "$ipaddr" ] || \ $DEBUG ifconfig "$iface" "$ipaddr" ${netmask:+netmask "$netmask"} + # additional request options + local opt dhcpopts + for opt in $reqopts; do + append dhcpopts "-O $opt" + done + # 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" + [ "$proto1" != "$proto" ] && append dhcpopts "-n -q" || append dhcpopts "-O rootpath -R &" [ "$broadcast" = 1 ] && broadcast="-O broadcast" || broadcast= $DEBUG eval udhcpc -t 0 -i "$iface" \ ${ipaddr:+-r $ipaddr} \ ${hostname:+-H $hostname} \ ${clientid:+-c $clientid} \ + ${vendorid:+-V $vendorid} \ -b -p "$pidfile" $broadcast \ - ${dhcpopts:- -O rootpath -R &} + ${dhcpopts} ;; none) setup_interface_none "$iface" "$config" @@ -408,6 +416,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 } }