diff options
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.inc | 56 |
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 |