X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/e84d52912732b2bfd82755f308a3e85532392b40..5cd6d51b7641a9ade3654ef425d3c796c537d27b:/package/base-files/files/lib/network/config.sh?ds=sidebyside

diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh
index c08fd69bc..b8f350de8 100755
--- a/package/base-files/files/lib/network/config.sh
+++ b/package/base-files/files/lib/network/config.sh
@@ -88,10 +88,10 @@ prepare_interface() {
 
 	# Setup bridging
 	config_get iftype "$config" type
+	config_get stp "$config" stp
 	case "$iftype" in
 		bridge)
 			[ -x /usr/sbin/brctl ] && {
-				ifconfig "$iface" up 2>/dev/null >/dev/null
 				ifconfig "br-$config" 2>/dev/null >/dev/null && {
 					$DEBUG brctl addif "br-$config" "$iface"
 					# Bridge existed already. No further processing necesary
@@ -100,10 +100,12 @@ prepare_interface() {
 					$DEBUG brctl setfd "br-$config" 0
 					$DEBUG ifconfig "br-$config" up
 					$DEBUG brctl addif "br-$config" "$iface"
+					$DEBUG brctl stp "br-$config" ${stp:-off}
 					# 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.
 				}
+				ifconfig "$iface" up 2>/dev/null >/dev/null
 				return 1
 			}
 		;;
@@ -137,22 +139,25 @@ setup_interface() {
 	config_get mtu "$config" mtu
 	config_get macaddr "$config" macaddr
 	$DEBUG ifconfig "$iface" ${macaddr:+hw ether "$macaddr"} ${mtu:+mtu $mtu} up
+	uci set "/var/state/network.$config.ifname=$iface"
 
 	pidfile="/var/run/$iface.pid"
 	case "$proto" in
 		static)
 			config_get ipaddr "$config" ipaddr
 			config_get netmask "$config" netmask
-			[ -z "$ipaddr" -o -z "$netmask" ] && return 1
-			
 			config_get ip6addr "$config" ip6addr
+			[ -z "$ipaddr" -o -z "$netmask" ] && [ -z "$ip6addr" ] && return 1
+			
 			config_get gateway "$config" gateway
+			config_get ip6gw "$config" ip6gw
 			config_get dns "$config" dns
 			config_get bcast "$config" broadcast
 			
 			[ -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"
+			[ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw"
 			[ -z "$dns" ] || {
 				for ns in $dns; do
 					grep "$ns" /tmp/resolv.conf.auto 2>/dev/null >/dev/null || {
@@ -176,13 +181,14 @@ setup_interface() {
 			config_get netmask "$config" netmask
 			config_get hostname "$config" hostname
 			config_get proto1 "$config" proto
+			config_get clientid "$config" clientid
 
 			[ -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)
 			[ ."$proto1" != ."$proto" ] && dhcpopts="-n -q"
-			$DEBUG eval udhcpc -t 0 -i "$iface" ${ipaddr:+-r $ipaddr} ${hostname:+-H $hostname} -b -p "$pidfile" ${dhcpopts:- -R &}
+			$DEBUG eval udhcpc -t 0 -i "$iface" ${ipaddr:+-r $ipaddr} ${hostname:+-H $hostname} ${clientid:+-c $clientid} -b -p "$pidfile" ${dhcpopts:- -R &}
 			lock -u "/var/lock/dhcp-$iface"
 		;;
 		*)