run qemu in smp mode
[tests.git] / system / template-qemu / qemu-bridge-init
index 879d1c2..a3e89b4 100755 (executable)
@@ -8,6 +8,10 @@
 #
 
 COMMAND=$(basename $0)
+cd $(dirname $0)
+
+# turn on verbosity
+set -x
 
 # constant
 INTERFACE_BRIDGE=br0
@@ -17,6 +21,12 @@ INTERFACE_LAN=eth0
 # Fonction de mise en place du pont
 start () {
 
+    echo "========== $COMMAND: entering start - beg"
+    hostname
+    uname -a
+    ifconfig
+    echo "========== $COMMAND: entering start - end"
+
     # take extra arg for ifname, if provided
     [ -n "$1" ] && { INTERFACE_LAN=$1; shift ; }
 
@@ -25,7 +35,7 @@ start () {
 
     #if we have already configured the same host_box no need to do it again
     /sbin/ifconfig $INTERFACE_BRIDGE &> /dev/null && {
-       echo "Interface bridge $INTERFACE_BRIDGE already exist."
+       echo "Bridge interface $INTERFACE_BRIDGE already set up - $COMMAND start exiting"
        exit 0
     }
     /sbin/ifconfig $INTERFACE_LAN &>/dev/null || {
@@ -34,10 +44,10 @@ start () {
     }
 
     #Getting host IP/masklen
-    address=$(/sbin/ip addr show $INTERFACE_LAN | grep -v inet6 | grep inet | awk '{print $2;}')
+    address=$(/sbin/ip addr show $INTERFACE_LAN | grep -v inet6 | grep inet | head --lines=1 | awk '{print $2;}')
     [ -z "$address" ] && { echo "ERROR: Could not determine IP address for $INTERFACE_LAN" ; exit 1 ; }
     
-    broadcast=$(/sbin/ip addr show $INTERFACE_LAN | grep -v inet6 | grep inet | awk '{print $4;}')
+    broadcast=$(/sbin/ip addr show $INTERFACE_LAN | grep -v inet6 | grep inet | head --lines=1 | awk '{print $4;}')
     [ -z "$broadcast" ] && echo "WARNING: Could not determine broadcast address for $INTERFACE_LAN"
 
     gateway=$(netstat -rn | grep '^0.0.0.0' | awk '{print $2;}')
@@ -47,12 +57,12 @@ start () {
     #Restarting udev
     echo "Starting udev ..."
     /sbin/udevd restart
-    if modprobe kqemu ; then
+    if modprobe kqemu &> /dev/null ; then
        echo "kqemu loadded"
     else
        echo "WARNING : Could not modprobe kqemu"
     fi
-    #Loding the tun/tap model
+    #Loading the tun/tap model
     if modprobe tun ; then
        echo "tun loaded"
         # Giving read/write access
@@ -64,27 +74,25 @@ start () {
     fi
 
     # creating the bridge
-    echo "Creating bridge $INTERFACE_BRIDGE"
+    echo "Creating bridge INTERFACE_BRIDGE=$INTERFACE_BRIDGE"
     brctl addbr $INTERFACE_BRIDGE
     #brctl stp $INTERFACE_BRIDGE yes
     brctl addif $INTERFACE_BRIDGE $INTERFACE_LAN
-    echo "Activating promiscuous mode  $INTERFACE_LAN..."
+    echo "Activating promiscuous mode INTERFACE_LAN=$INTERFACE_LAN"
     /sbin/ifconfig $INTERFACE_LAN 0.0.0.0 promisc up
     sleep 2
-    echo "Setting bridge $address $broadcast"
+    echo "Setting bridge address=$address broadcast=$broadcast"
     # static
     /sbin/ifconfig $INTERFACE_BRIDGE $address broadcast $broadcast up
     sleep 1
        
     #Reconfigure the routing table
-    echo "Configuring  the IP  Gateway @:" $gateway
+    echo "Configuring gateway=$gateway"
     route add default gw $gateway
 
-    # xxx this is *wrong*
-    # wipe the host firewall otherwise the guest qemu can't access the LAN
-    echo "Wiping the firewall..." 
-    iptables -F
-    
+    echo "========== $COMMAND: exiting start - beg"
+    ifconfig
+    echo "========== $COMMAND: exiting start - end"
 }
 
 #Adding a new interface to the bridge: this is used by qemu-ifup 
@@ -93,17 +101,37 @@ add () {
     [[ -z "$@" ]] && { echo "Usage: $COMMAND add ifname" ; exit 1 ; }
     INTERFACE_LAN=$1; shift
 
+    echo "========== $COMMAND: entering add - beg"
+    ifconfig
+    echo "========== $COMMAND: entering add - end"
+
     echo "Activating link for $INTERFACE_LAN..."
     /sbin/ip link set $INTERFACE_LAN up
     sleep 1
-    echo "Adding $INTERFACE_BRIDGE to $INTERFACE_BRIDGE"
+    echo "Adding $INTERFACE_LAN to $INTERFACE_BRIDGE"
     brctl addif $INTERFACE_BRIDGE $INTERFACE_LAN
-    # putting a virtual interface in promisc mode seems like an odd thing to do
-    # echo "Activating promiscuous mode on $INTERFACE_LAN ..."
-    # /sbin/ifconfig $INTERFACE_LAN 0.0.0.0 promisc up
-    # sleep 1
-    echo "Done."
 
+    # turn off filtering on this interface
+    ########## from the test environment
+    # expected vars are MACADDR, NODE_ISO, HOSTNAME, IP and TARGET_ARCH
+    CONFIG=qemu.conf
+    [ -f "$CONFIG" ] || { echo "Config file for qemu $CONFIG not found in $(pwd)" ; exit 1 ; }
+    . $CONFIG
+
+    echo "Tweaking iptables"
+    iptables-save > iptables.pre
+    # rewrite a new config - quick and dirty
+    ./iptables.py iptables.pre iptables.post $IP
+    iptables-restore < iptables.post
+
+    echo "========== $COMMAND: exiting add - beg"
+
+    ifconfig
+
+    echo "Installed iptables"
+    iptables-save
+    
+    echo "========== $COMMAND: exiting add - end"
 }
 
 #Stop the bridge and restore the original setting
@@ -115,25 +143,30 @@ stop () {
     type -p brctl &> /dev/null || { echo "brctl not found, please install bridge-utils" ; exit 1 ; }
 
     /sbin/ifconfig $INTERFACE_BRIDGE &> /dev/null || {
-       echo "Interface bridge $INTERFACE_BRIDGE does not exist."
+       echo "Bridge interface $INTERFACE_BRIDGE does not exist - $COMMAND stop exiting"
        exit 0
     }
     brctl delif $INTERFACE_BRIDGE $INTERFACE_LAN
     /sbin/ifconfig $INTERFACE_BRIDGE down
     brctl delbr $INTERFACE_BRIDGE
     /sbin/service network restart
+    /sbin/service iptables restart
+}
+
+function main () {
+
+    case "$1" in
+       start)
+           shift; start "$@" ;;
+       stop)
+           shift; stop "$@" ;;
+       add)
+            shift; add "$@" ;;
+       *)
+            echo $"Usage: env-qemu {start|add|stop} [interface]" ; exit 1 ;;
+    esac
+    exit 0
 }
 
-# 
-case "$1" in
-    start)
-       shift; start "$@" ;;
-    stop)
-       shift; stop "$@" ;;
-    add)
-        shift; add "$@" ;;
-    *)
-        echo $"Usage: env-qemu {start|add|stop} [interface]" ; exit 1 ;;
-esac
-
-exit 0
+# redirect stderr as well
+main "$@" 2>&1