Commit e819e286 authored by Roger Pau Monné's avatar Roger Pau Monné Committed by Natanael Copa
Browse files

alpine-conf: modify setup-interfaces to create simple bridges

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.

Changes since v1:

 * Only ask to bridge interfaces if Xen Dom0 is detected
parent ce8a18b2
...@@ -106,4 +106,13 @@ askpassword() { ...@@ -106,4 +106,13 @@ askpassword() {
IFS=$_oifs IFS=$_oifs
} }
# Detect if we are running Xen
is_xen() {
test -d /proc/xen
}
# Detect if we are running Xen Dom0
is_xen_dom0() {
is_xen && \
grep -q "control_d" /proc/xen/capabilities
}
...@@ -5,6 +5,7 @@ PREFIX= ...@@ -5,6 +5,7 @@ PREFIX=
. $PREFIX/lib/libalpine.sh . $PREFIX/lib/libalpine.sh
bridges=""
detect_interfaces() { detect_interfaces() {
ip addr | grep -v ' lo:' | awk -F : '/^[0-9]*:/ { print $2}' ip addr | grep -v ' lo:' | awk -F : '/^[0-9]*:/ { print $2}'
...@@ -42,7 +43,30 @@ config_iface() { ...@@ -42,7 +43,30 @@ config_iface() {
local address local address
local netmask local netmask
local gateway local gateway
local bridge
local conf=$prefix$iface.conf local conf=$prefix$iface.conf
local answer
if is_xen_dom0; then
while [ "$answer" != "yes" ] && [ "$answer" != "no" ] ; do
echon "Do you want to bridge the interface $iface? [no] "
default_read answer no
done
else
answer="no"
fi
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 # use ipcalc to validate the address. we do accept /mask
# we are no interested in the result, only error code, so # we are no interested in the result, only error code, so
...@@ -55,7 +79,7 @@ config_iface() { ...@@ -55,7 +79,7 @@ config_iface() {
[ "$address" = "abort" ] && return [ "$address" = "abort" ] && return
if [ "$address" = "dhcp" ] ; then if [ "$address" = "dhcp" ] ; then
HAS_DHCP=yes HAS_DHCP=yes
echo "type=dhcp" > $conf echo "type=dhcp" >> $conf
rm $iface.noconf rm $iface.noconf
return return
fi fi
...@@ -87,7 +111,7 @@ config_iface() { ...@@ -87,7 +111,7 @@ config_iface() {
[ -z "$gateway" ] && break [ -z "$gateway" ] && break
done done
echo "type=static" > $conf echo "type=static" >> $conf
echo "address=${address%%/*}" >> $conf #strip off /mask if there echo "address=${address%%/*}" >> $conf #strip off /mask if there
echo "netmask=$netmask" >> $conf echo "netmask=$netmask" >> $conf
echo "gateway=$gateway" >> $conf echo "gateway=$gateway" >> $conf
...@@ -146,8 +170,20 @@ prompt_for_interfaces() { ...@@ -146,8 +170,20 @@ prompt_for_interfaces() {
iface=`basename $i .conf` iface=`basename $i .conf`
iface=${iface#[0-9]*~} iface=${iface#[0-9]*~}
. ./$i . ./$i
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 "auto $iface" >> interfaces
echo "iface $iface inet $type" >> interfaces echo "iface $iface inet $type" >> interfaces
fi
case $type in case $type in
dhcp) dhcp)
[ -n "$hostname" ] \ [ -n "$hostname" ] \
...@@ -160,7 +196,12 @@ prompt_for_interfaces() { ...@@ -160,7 +196,12 @@ prompt_for_interfaces() {
&& echo -e "\tgateway $gateway" >> interfaces && echo -e "\tgateway $gateway" >> interfaces
;; ;;
esac 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 echo "" >> interfaces
bridge=""
done done
while [ "$answer" != "yes" ] && [ "$answer" != "no" ] ; do while [ "$answer" != "yes" ] && [ "$answer" != "no" ] ; do
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment