summaryrefslogtreecommitdiffstats
path: root/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/includes/setup_network.inc
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/includes/setup_network.inc')
-rw-r--r--core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/includes/setup_network.inc56
1 files changed, 56 insertions, 0 deletions
diff --git a/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/includes/setup_network.inc b/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/includes/setup_network.inc
new file mode 100644
index 00000000..73fb2518
--- /dev/null
+++ b/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/includes/setup_network.inc
@@ -0,0 +1,56 @@
+###################################
+# qemu/kvm include: Network setup #
+###################################
+# This now makes use of the qemu's bridge helper
+# which creates a tap device and adds it to the
+# bridge corresponding to the network type
+# TODO configurable network type
+setup_network() {
+ # list available models with:
+ # qemu-system-x86_64 -net nic,model=?
+ # e.g. as of 2.0.0:
+ # ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio
+ declare -rg NIC_MODEL="e1000"
+
+ # add MAC address and network card model
+ VIRTCMDOPTS+=( "-device" "${NIC_MODEL},mac=${VM_MAC_ADDR},netdev=guestnet0" )
+
+ # TODO support different network kinds for lectures in bwlehrpool-suite, just NAT for now
+ declare -g NETWORK_MODE="nat"
+
+ # detect if qemu's bridge helper binary is available
+ declare -g QEMU_BRIDGE_HELPER=
+ for HELPER_PATH in /usr/lib/qemu-bridge-helper /usr/local/libexec/qemu-bridge-helper; do
+ if [ -x "${HELPER_PATH}" ] && [ -u "${HELPER_PATH}" ]; then
+ QEMU_BRIDGE_HELPER="${HELPER_PATH}"
+ readonly QEMU_BRIDGE_HELPER
+ break
+ fi
+ done
+ if isempty QEMU_BRIDGE_HELPER; then
+ writelog "Could not find qemu-bridge-helper on this machine. Setting network mode to user."
+ # Even though falling back to creating tap devices ourselves, we should instead
+ # garantee the existance of qemu's helper on minilinux build time.
+ # qemu's user network mode allows tcp/udp connections in a nat-fashion and
+ # it allows access to the web which seems suffisant for a fallback.
+ NETWORK_MODE="user"
+ fi
+
+ case "${NETWORK_MODE}" in
+ nat*)
+ VIRTCMDOPTS+=( "-netdev" "bridge,br=nat1,id=guestnet0,helper=${QEMU_BRIDGE_HELPER}" )
+ ;;
+ bridge*)
+ VIRTCMDOPTS+=( "-netdev" "bridge,br=br0,id=guestnet0,helper=${QEMU_BRIDGE_HELPER}" )
+ ;;
+ host*)
+ VIRTCMDOPTS+=( "-netdev" "bridge,br=vsw2,id=guestnet0,helper=${QEMU_BRIDGE_HELPER}" )
+ ;;
+ user*|*)
+ VIRTCMDOPTS+=( "-netdev" "user,id=guestnet0" )
+ ;;
+ esac
+}
+
+## MAIN ##
+call_post_source setup_network