XenBridgeScript

Aus Xen-Forum-Wiki

Wechseln zu: Navigation, Suche

Dieses Script ermöglicht das Erstellen von Bridges und bindet Interfaces an diese. Leider fehlt eine Kommentierung der Zeilen, eventuell mache ich (oder jemand anderes) das noch.

Hinweis: Das Script hatte ich bei XEN 3.0.0 benutzt. Nun mit XEN 3.0.2 und höher funktionieren die XEN-eigenen Scripte bestens, daher sollten vorzugsweise diese benutzt werden.

#!/bin/sh
# Exit if anything goes wrong.
#set -e

# First arg is the operation.
OP=$1
shift

# Safety Belt for problem-free bootup
# [ "$1" != "go" ] && exit 0

setup_bridge() {
	br=$1
	if=$2
	mode=$3
	brctl addbr $br
	brctl stp $br off
	brctl setfd $br 0
	if [ isle = "$mode" ]; then
		ifconfig $br 0.0.0.0 up
		return 0
	fi
	brctl addif $br $if
	if [ pt != "$mode" ]; then
		ifip=`ifconfig $if | grep 'inet addr' | sed 's/.*inet addr:\([\.0-9]\+\).*/\1/'`
		ifmask=`ifconfig $if | grep Mask | sed 's/.*Mask:\(.*\)$/\1/'`
		ifconfig $br $ifip netmask $ifmask up
		echo "##### br=$br ip=$ifip mask=$ipmask" >> /tmp/xxx
		ip route | grep "dev $if" | (
			while read ifline; do
				ifnet=`echo "$ifline" | cut -d\  -f1`
				echo "#####  net=$ifnet" >> /tmp/xxx
				if [ "" != "$ifip" -a "" != "$ifnet" ]; then
					echo "nw-up: if[$if]($ifip:$ifnet) -> $br"
					ip route del $ifnet dev $if
				fi
			done
		)
	else
		ifconfig $if down
		ifconfig $if 0.0.0.0 up
	fi
	ifconfig $br up
}

remove_bridge() {
	br=$1
	if=$2
	mode=$3
	if [ "" = "$mode" ]; then
		ip route | grep "dev $br" | (
			while read ifline; do
				ifip=`echo "$ifline" | sed 's/.*src.\(.*\)/\1/'`
				ifnet=`echo "$ifline" | cut -d\  -f1`
				if [ "" != "$ifip" -a "" != "$ifnet" ]; then
					ip route del $ifnet dev $br
					ip route add $ifnet dev $if src $ifip
				fi
			done
		)
	fi
	ifconfig $br down
	if [ "isle" != "$mode" ];then
		brctl delif $br $if
	fi
	brctl delbr $br
}

case ${OP} in
  start)
	setup_bridge gate eth0
	setup_bridge lan eth1
	setup_bridge xenbr0 - isle
        ;;

    stop)
	remove_bridge gate eth0
	remove_bridge lan eth1
	remove_bridge xenbr0 - isle
        ;;

    *)
       echo 'Unknown command: ' ${OP}
       echo 'Valid commands are: start, stop'
       exit 1
esac

--McAldo 22:07, 29. Okt 2006 (CET)

Persönliche Werkzeuge