Subject: [alpine-devel] [PATCH] alpine-conf: modify setup-interfaces to create simple bridges

From: Roger Pau Monne <[email-masked]>
Date: Thu, 29 Dec 2011 19:16:26 +0100

Modified setup-interfaces to create simple bridges (works only with
one interface per bridge). Useful when setting up a Xen system, since
interfaces need to be bridged in order for guests to have networking.
Some distributions automatically create one bridge for each interface
when Xen is installed, but I think this is too aggressive.
---
 setup-interfaces.in |   45 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/setup-interfaces.in b/setup-interfaces.in
index b461529..f78b23b 100755
--- a/setup-interfaces.in
+++ b/setup-interfaces.in
@@ -5,6 +5,7 @@ PREFIX=
 
 . $PREFIX/lib/libalpine.sh
 
+bridges=""
 
 detect_interfaces() {
 	ip addr | grep -v ' lo:' | awk -F : '/^[0-9]*:/ { print $2}'
@@ -42,7 +43,26 @@ config_iface() {
 	local address
 	local netmask
 	local gateway
+	local bridge
 	local conf=$prefix$iface.conf
+	local answer
+
+	while [ "$answer" != "yes" ] && [ "$answer" != "no" ] ; do
+		echon "Do you want to bridge the interface $iface? [no] "
+		default_read answer no
+	done
+
+	if [ "$answer" = "yes" ]; then
+		bridge="br"`echo $iface | sed 's/[^0-9]//g'`
+		while [ 1 ]; do
+			echon "Name of the bridge you would like to create: [$bridge] "
+			default_read bridge $bridge
+			`echo "$bridges" | grep -q "$bridge"` || break
+			echo "Name already in use, please choose another one"
+		done
+		echo "bridge=${bridge}" > $conf
+		bridges="$bridges $bridge"
+	fi
 
 	# use ipcalc to validate the address. we do accept /mask
 	# we are no interested in the result, only error code, so
@@ -55,7 +75,7 @@ config_iface() {
 		[ "$address" = "abort" ] && return
 		if [ "$address" = "dhcp" ] ; then
 			HAS_DHCP=yes
-			echo "type=dhcp" > $conf
+			echo "type=dhcp" >> $conf
 			rm $iface.noconf
 			return
 		fi
@@ -87,7 +107,7 @@ config_iface() {
 		[ -z "$gateway" ] && break
 	done
 	
-	echo "type=static" > $conf
+	echo "type=static" >> $conf
 	echo "address=${address%%/*}" >> $conf  #strip off /mask if there
 	echo "netmask=$netmask" >> $conf
 	echo "gateway=$gateway" >> $conf
@@ -146,8 +166,20 @@ prompt_for_interfaces() {
 		iface=`basename $i .conf`
 		iface=${iface#[0-9]*~}
 		. ./$i
-		echo "auto $iface" >> interfaces
-		echo "iface $iface inet $type" >> interfaces
+		if [ -n "$bridge" ]; then
+			echo "auto $iface $bridge" >> interfaces
+			echo "" >> interfaces
+			echo "iface $iface inet manual" >> interfaces
+			echo -e "\tup ip link set \$IFACE up" >> interfaces
+			echo -e "\tdown ip link set \$IFACE down" >> interfaces
+			echo "" >> interfaces
+			echo "iface $bridge inet $type" >> interfaces
+			echo -e "\tpre-up brctl addbr $bridge" >> interfaces
+			echo -e "\tpre-up brctl addif $bridge $iface" >> interfaces
+		else
+			echo "auto $iface" >> interfaces
+			echo "iface $iface inet $type" >> interfaces
+		fi
 		case $type in
 		dhcp)
 			[ -n "$hostname" ] \
@@ -160,7 +192,12 @@ prompt_for_interfaces() {
 				&& echo -e "\tgateway $gateway" >> interfaces
 			;;
 		esac
+		if [ -n "$bridge" ]; then
+			echo -e "\tpost-down brctl delif $bridge $iface" >> interfaces
+			echo -e "\tpost-down brctl delbr $bridge" >> interfaces
+		fi
 		echo "" >> interfaces
+		bridge=""
 	done
 	
 	while [ "$answer" != "yes" ] && [ "$answer" != "no" ] ; do
-- 
1.7.7.1

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---

---

From: Florian Heigl <[email-masked]>
Date: Thu, 29 Dec 2011 19:28:14 +0100

Hi,

> when Xen is installed, but I think this is too aggressive.

Yup, I think that is deprecated by xen devs too. The XL stack tries to
avoid messing with the OS networking setup. It used to be a PITA if
you have many bridges.

Does anyone have OpenVswitch on Alpine yet?
Because in practice I'll often have lacp+vlans and then quite a few
bridges per Vlan, things being made worse by issues with the bridges
(low general performance and lacp load balancing)

Greetings,
Florian

---

---

From: Natanael Copa <[email-masked]>
Date: Fri, 30 Dec 2011 10:36:49 +0100

On Thu, 29 Dec 2011 19:16:26 +0100

> when Xen is installed, but I think this is too aggressive.

Nice!

as mentioned in IRC, I think we should check only ask for bridge in
case its a xen dom0. I want try keep number of questions down to
minimum.

Thanks!

-nc

> ---
>  setup-interfaces.in |   45
> +++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 41
> insertions(+), 4 deletions(-)
> 
>  	echo "address=${address%%/*}" >> $conf  #strip off /mask if
> there echo "netmask=$netmask" >> $conf
>  				&& echo -e "\tgateway $gateway" >>
> interfaces ;;
>  		esac

---