summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominique Martinet <asmadeus@codewreck.org>2012-05-26 16:35:43 +0200
committerDominique Martinet <asmadeus@codewreck.org>2012-08-23 13:26:07 +0200
commit2a38aa29ba678a28a0a9591a0131d26b1da6818a (patch)
treea8dd80b83594528e45f455094d67b16aaac357f0
parent23c14d5164dadfe3c9a2dd294212389c45dd2863 (diff)
Attempt at multi-net-interfaces with different bridges
-rwxr-xr-xbootstrap/debian/bootstrap.sh3
-rw-r--r--kvm-wrapper.conf10
-rwxr-xr-xkvm-wrapper.sh63
-rwxr-xr-xnet/kvm-ifdown3
-rwxr-xr-xnet/kvm-ifup3
5 files changed, 62 insertions, 20 deletions
diff --git a/bootstrap/debian/bootstrap.sh b/bootstrap/debian/bootstrap.sh
index f195139..9eafc05 100755
--- a/bootstrap/debian/bootstrap.sh
+++ b/bootstrap/debian/bootstrap.sh
@@ -177,7 +177,8 @@ EOF
umount "$MNTDIR"
# Start VM to debootstrap, second stage
- desc_update_setting "KVM_NETWORK_MODEL" "virtio-net-pci" #put vhost_net if supported
+ desc_update_setting "KVM_IF0" "virtio-net-pci"
+ #desc_update_setting "KVM_NETOPT0" ",vhost=on"
test_blockdev "$KVM_DISK1" \
&& desc_update_setting "KVM_DRIVE_IF" "virtio-blk-pci,scsi=off"
desc_update_setting "KVM_KERNEL" "$BOOTSTRAP_KERNEL"
diff --git a/kvm-wrapper.conf b/kvm-wrapper.conf
index acb99d1..d897818 100644
--- a/kvm-wrapper.conf
+++ b/kvm-wrapper.conf
@@ -42,12 +42,16 @@ KVM_CPU_NUM="1"
KVM_CLUSTER_NODE="`hostname -s`"
-KVM_NETWORK_MODEL="rtl8139"
-KVM_MACADDRESS="`random_mac`"
-KVM_BRIDGE="br0"
+KVM_IF0="rtl8139"
+KVM_MACADDR0="`random_mac`"
+KVM_BR0="br0"
+KVM_NET_OPT0=""
+#KVM_NET_OPT0=",vhost=on"
+#KVM_{IF,MACADDR,BR,NET_OPT}[123]
KVM_BOOTDEVICE="-boot order=c"
#KVM_DISK1
+#KVM_DISK[234]
KVM_DRIVE_IF="ide-hd"
KVM_DRIVE_OPT=",cache=none,aio=native"
#KVM_CDROM
diff --git a/kvm-wrapper.sh b/kvm-wrapper.sh
index 39803f2..cc238d5 100755
--- a/kvm-wrapper.sh
+++ b/kvm-wrapper.sh
@@ -155,11 +155,11 @@ function kvm_init_env ()
function random_mac ()
{
BASE_MAC=${BASE_MAC:-"52:54:00:ff"}
- local MACADDRESS=`printf "$BASE_MAC:%02x:%02x" $((RANDOM % 256)) $((RANDOM % 256))`
+ local MACADDR=`printf "$BASE_MAC:%02x:%02x" $((RANDOM % 256)) $((RANDOM % 256))`
# check if it's not already used..
- grep -q "KVM_MACADDRESS=\"$MACADDRESS\"" $VM_DIR/*-vm \
+ grep -qe "KVM_MACADDR.*=\"$MACADDR\"" $VM_DIR/*-vm \
&& random_mac \
- || echo -n $MACADDRESS
+ || echo -n $MACADDR
}
# cluster helpers
@@ -436,28 +436,59 @@ function kvm_start_vm ()
[[ "$KVM_DRIVES" == "" ]] && echo "$KVM_BOOTDEVICE" | grep -qv "n" && \
fail_exit "Your VM $VM_NAME should at least use one cdrom or harddisk drive !\nPlease check your conf file :\n$VM_DESCRIPTOR"
local LINUXBOOT=""
- [[ -n "$KVM_KERNEL" ]] && LINUXBOOT="$LINUXBOOT -kernel \"$KVM_KERNEL\""
- [[ -n "$KVM_INITRD" ]] && LINUXBOOT="$LINUXBOOT -initrd \"$KVM_INITRD\""
- [[ -n "$KVM_APPEND" ]] && LINUXBOOT="$LINUXBOOT -append \"$KVM_APPEND\""
+ [[ -n "$KVM_KERNEL" ]] && LINUXBOOT+=" -kernel \"$KVM_KERNEL\""
+ [[ -n "$KVM_INITRD" ]] && LINUXBOOT+=" -initrd \"$KVM_INITRD\""
+ [[ -n "$KVM_APPEND" ]] && LINUXBOOT+=" -append \"$KVM_APPEND\""
# If drive is a lv in the main vg, activate the lv
prepare_disks "$KVM_DISK1" "$KVM_DISK2" "$KVM_DISK3" "$KVM_DISK4"
# Network scripts
- [[ -z "$KVM_BRIDGE" ]] && KVM_BRIDGE="kvmnat"
- export KVM_BRIDGE
- KVM_NET_SCRIPT="$ROOTDIR/net/kvm"
+ local KVM_NET_SCRIPT="$ROOTDIR/net"
+
+ local KVM_NET=""
+
+ #backward compatibility
+ KVM_MACADDR0="${KVM_MACADDR0-KVM_MACADDRESS}"
+ KVM_IF0="${KVM_IF0-KVM_NETWORK_MODEL}"
+ [[ "$KVM_IF0" = "vhost_net" ]] && (KVM_NET_OPT0=",vhost=on"; KVM_IF0="virtio-net-pci")
+ KVM_BR0="${KVM_BR0-KVM_BRIDGE}"
+
+ # Check for the bridge-specific symlinks an' make them otherwise
+ for KVM_BR in "$KVM_BR0" "$KVM_BR1" "$KVM_BR2" "$KVM_BR3"; do
+ test_exist "$KVM_NET_SCRIPT/kvm-$KVM_BR-ifup" || \
+ (cd "$KVM_NET_SCRIPT"; ln -s "kvm-$KVM_BR0-ifup" kvm-ifup)
+ test_exist "$KVM_NET_SCRIPT/kvm-$KVM_BR-ifdown" || \
+ (cd "$KVM_NET_SCRIPT"; ln -s "kvm-$KVM_BR0-ifdown" kvm-ifdown)
+ done
+
- [[ "$KVM_NETWORK_MODEL" = "vhost_net" ]] \
- && KVM_NET="-netdev type=tap,id=guest0,script=$KVM_NET_SCRIPT-ifup,downscript=$KVM_NET_SCRIPT-ifdown,vhost=on -device virtio-net-pci,netdev=guest0,mac=$KVM_MACADDRESS" \
- || KVM_NET="-netdev type=tap,id=guest0,script=$KVM_NET_SCRIPT-ifup,downscript=$KVM_NET_SCRIPT-ifdown -device $KVM_NETWORK_MODEL,netdev=guest0,mac=$KVM_MACADDRESS" \
+ [[ -n "$KVM_MACADDR0" ]] && KVM_NET+="-netdev type=tap,id=guest0,script=$KVM_NET_SCRIPT/kvm-$KVM_BR0-ifup,downscript=$KVM_NET_SCRIPT/kvm-$KVM_BR0-ifdown$KVM_NET_OPT0 -device $KVM_IF0,netdev=guest0,mac=$KVM_MACADDR0"
+ [[ -n "$KVM_MACADDR1" ]] && (
+ KVM_IF1="${KVM_IF1-KVM_IF0}"
+ KVM_NET_OPT1="${KVM_NET_OPT1-KVM_NET_OPT0}"
+ KVM_BR1="${KVM_BR1-KVM_BR0}"
+ KVM_NET+=" -netdev type=tap,id=guest1,script=$KVM_NET_SCRIPT/kvm-$KVM_BR1-ifup,downscript=$KVM_NET_SCRIPT/kvm-$KVM_BR1-ifdown$KVM_NET_OPT1 -device $KVM_IF1,netdev=guest1,mac=$KVM_MACADDR1"
+ )
+ [[ -n "$KVM_MACADDR2" ]] && (
+ KVM_IF2="${KVM_IF2-KVM_IF0}"
+ KVM_NET_OPT2="${KVM_NET_OPT2-KVM_NET_OPT0}"
+ KVM_BR2="${KVM_BR2-KVM_BR0}"
+ KVM_NET+=" -netdev type=tap,id=guest2,script=$KVM_NET_SCRIPT/kvm-$KVM_BR2-ifup,downscript=$KVM_NET_SCRIPT/kvm-$KVM_BR2-ifdown$KVM_NET_OPT2 -device $KVM_IF2,netdev=guest2,mac=$KVM_MACADDR2"
+ )
+ [[ -n "$KVM_MACADDR3" ]] && (
+ KVM_IF3="${KVM_IF3-KVM_IF0}"
+ KVM_NET_OPT3="${KVM_NET_OPT3-KVM_NET_OPT0}"
+ KVM_BR3="${KVM_BR3-KVM_BR0}"
+ KVM_NET+=" -netdev type=tap,id=guest3,script=$KVM_NET_SCRIPT/kvm-$KVM_BR3-ifup,downscript=$KVM_NET_SCRIPT/kvm-$KVM_BR3-ifdown$KVM_NET_OPT3 -device $KVM_IF3,netdev=guest3,mac=$KVM_MACADDR3"
+ )
# Monitor/serial devices
KVM_MONITORDEV="-monitor unix:$MONITOR_FILE,server,nowait"
KVM_SERIALDEV="-serial unix:$SERIAL_FILE,server,nowait"
# Build kvm exec string
- local EXEC_STRING="$KVM_BIN -name $VM_NAME,process="kvm-$VM_NAME" -m $KVM_MEM -smp $KVM_CPU_NUM $KVM_NET $KVM_DRIVES $KVM_BOOTDEVICE $KVM_KEYMAP $KVM_OUTPUT $LINUXBOOT $KVM_MONITORDEV $KVM_SERIALDEV -pidfile $PID_FILE $KVM_ADDITIONNAL_PARAMS"
+ local EXEC_STRING="$KVM_BIN -name $VM_NAME,process=\"kvm-$VM_NAME\" -m $KVM_MEM -smp $KVM_CPU_NUM $KVM_NET $KVM_DRIVES $KVM_BOOTDEVICE $KVM_KEYMAP $KVM_OUTPUT $LINUXBOOT $KVM_MONITORDEV $KVM_SERIALDEV -pidfile $PID_FILE $KVM_ADDITIONNAL_PARAMS"
# More sanity checks : VM running, monitor socket existing, etc.
if [[ -z "$FORCE" ]]; then
@@ -548,8 +579,8 @@ function kvm_run_disk ()
test_file_rw "$KVM_DISK1" || fail_exit "Error: Couldn't read/write image file:\n$KVM_DISK1"
# Build kvm exec string
- local EXEC_STRING="$KVM_BIN -net nic,model=$KVM_NETWORK_MODEL,macaddr=$KVM_MACADDRESS -net tap -hda $KVM_DISK1 -boot c $KVM_KEYMAP $KVM_OUTPUT $KVM_ADDITIONNAL_PARAMS"
- eval "$EXEC_STRING"
+ local EXEC_STRING="$KVM_BIN -net nic,model=rtl8139,macaddr=`random_mac` -net user -hda $KVM_DISK1 -boot c $KVM_KEYMAP $KVM_OUTPUT $KVM_ADDITIONNAL_PARAMS"
+ echo "$EXEC_STRING"
unprepare_disks "$KVM_DISK1"
@@ -661,7 +692,7 @@ function kvm_create_descriptor ()
sed -i "s,##KVM_DISK1,$HDA_LINE,g" "$VM_DESCRIPTOR"
fi
- sed -i 's/#KVM_MACADDRESS="`random_mac`/KVM_MACADDRESS="'`random_mac`'/g' "$VM_DESCRIPTOR"
+ sed -i 's/#KVM_MACADDR0="`random_mac`/KVM_MACADDR0="'`random_mac`'/g' "$VM_DESCRIPTOR"
sed -i 's/#KVM_CLUSTER_NODE="`hostname -s`/KVM_CLUSTER_NODE="'`hostname -s`'/g' "$VM_DESCRIPTOR"
diff --git a/net/kvm-ifdown b/net/kvm-ifdown
index a70f24b..317764a 100755
--- a/net/kvm-ifdown
+++ b/net/kvm-ifdown
@@ -3,6 +3,9 @@
# Script called by kvm on tap interface deletion
#
+KVM_BR=`basename $0 -ifdown|sed -e 's/^[^-]*-\?//'`
+KVM_BRIDGE=${KVM_BR:-$KVM_BRIGE}
+
echo "$0:"
echo "Removing $1 from bridge $KVM_BRIDGE"
ip link set "$1" down
diff --git a/net/kvm-ifup b/net/kvm-ifup
index 53c5c3d..54ffc2d 100755
--- a/net/kvm-ifup
+++ b/net/kvm-ifup
@@ -3,6 +3,9 @@
# Script called by kvm on tap interface creation
#
+KVM_BR=`basename $0 -ifup|sed -e 's/^[^-]*-\?//'`
+KVM_BRIDGE=${KVM_BR:-$KVM_BRIGE}
+
echo "$0:"
echo "Adding $1 to bridge interface $KVM_BRIDGE"
brctl addif "$KVM_BRIDGE" "$1"