diff options
| author | Roy Marples <roy@marples.name> | 2007-11-01 22:25:53 +0000 | 
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2007-11-01 22:25:53 +0000 | 
| commit | 80124a050c626584f19fbac917276946224bcde7 (patch) | |
| tree | c94990be30f3bf00785a8577fb7ef7cf1bd46f21 /net.Linux/bridge.sh | |
| parent | a1f80bc7a74b5b3b899eadeb63ccfbdec6d860d0 (diff) | |
| download | openrc-80124a050c626584f19fbac917276946224bcde7.tar.xz | |
Work cleanly with bridges on kernels without TCP, #197791.
Diffstat (limited to 'net.Linux/bridge.sh')
| -rw-r--r-- | net.Linux/bridge.sh | 26 | 
1 files changed, 15 insertions, 11 deletions
diff --git a/net.Linux/bridge.sh b/net.Linux/bridge.sh index b1d4cfcf..301b1fac 100644 --- a/net.Linux/bridge.sh +++ b/net.Linux/bridge.sh @@ -33,7 +33,7 @@ bridge_pre_start() {  	if ! _is_bridge; then  		ebegin "Creating bridge ${IFACE}" -		if ! brctl addbr "${IFACE}" ; then +		if ! brctl addbr "${IFACE}"; then  			eend 1  			return 1  		fi @@ -50,15 +50,18 @@ bridge_pre_start() {  	done  	unset IFS -	if [ -n "${ports}" ] ; then +	if [ -n "${ports}" ]; then  		einfo "Adding ports to ${IFACE}"  		eindent +		local OIFACE="${IFACE}"  		for x in ${ports}; do  			ebegin "${x}" -			ifconfig "${x}" promisc up -			if ! brctl addif "${IFACE}" "${x}" ; then -				ifconfig "${x}" -promisc 2>/dev/null +			local IFACE="${x}" +			_set_flag promisc +			_up +			if ! brctl addif "${OIFACE}" "${x}"; then +				_set_flag -promisc  				eend 1  				return 1  			fi @@ -78,7 +81,7 @@ bridge_post_stop() {  	if _is_bridge ; then  		ebegin "Destroying bridge ${IFACE}"  		_down -		ports="$( brctl show 2>/dev/null | \ +		ports="$(brctl show 2>/dev/null | \  			sed -n -e '/^'"${IFACE}"'[[:space:]]/,/^\S/ { /^\('"${IFACE}"'[[:space:]]\|\t\)/s/^.*\t//p }')"  		delete=true  		iface=${IFACE} @@ -87,9 +90,9 @@ bridge_post_stop() {  		# Work out if we're added to a bridge for removal or not  		eval set -- $(brctl show 2>/dev/null | sed -e "s/'/'\\\\''/g" -e "s/$/'/g" -e "s/^/'/g")  		local line= -		for line in "$@" ; do +		for line in "$@"; do  			set -- ${line} -			if [ "$3" = "${IFACE}" ] ; then +			if [ "$3" = "${IFACE}" ]; then  				iface=$1  				break  			fi @@ -98,14 +101,15 @@ bridge_post_stop() {  		extra=" from ${iface}"  	fi -	for port in ${ports} ; do +	for port in ${ports}; do  		ebegin "Removing port ${port}${extra}" -		ifconfig "${port}" -promisc +		local IFACE="${port}" +		_set_flag -promisc  		brctl delif "${iface}" "${port}"  		eend $?  	done -	if ${delete} ; then +	if ${delete}; then  		eoutdent  		brctl delbr "${iface}"  		eend $?  | 
