mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
runqemu: Add network bridge support
Qemu supports attaching the virtual machine to an existing network bridge interface via the qemu-bridge-helper program (as long as the system is correctly configured to give the user permissions). Add support for runqemu to do this also via the "bridge=<INTERFACE>" argument. Note that for this to work correctly, the host qemu-bridge-helper must be used, not the one that might have been built by qemu-native. In order for qemu to correctly find this program, a qemu-oe-bridge-helper program has been added to qemu-helper-native, and runqemu will use this helper as the bridge helper. The helper will look for the host qemu-bridge-helper first by looking in the QEMU_BRIDGE_HELPER environment variable, then by search common paths where the helper is installed. (From OE-Core rev: 9e7b38c61c6b84b7f137c733ac5da9414025693d) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
1128c128ce
commit
08220028e5
|
@ -5,7 +5,10 @@ PR = "r1"
|
||||||
|
|
||||||
LIC_FILES_CHKSUM = "file://${WORKDIR}/tunctl.c;endline=4;md5=ff3a09996bc5fff6bc5d4e0b4c28f999"
|
LIC_FILES_CHKSUM = "file://${WORKDIR}/tunctl.c;endline=4;md5=ff3a09996bc5fff6bc5d4e0b4c28f999"
|
||||||
|
|
||||||
SRC_URI = "file://tunctl.c"
|
SRC_URI = "\
|
||||||
|
file://tunctl.c \
|
||||||
|
file://qemu-oe-bridge-helper \
|
||||||
|
"
|
||||||
|
|
||||||
S = "${WORKDIR}"
|
S = "${WORKDIR}"
|
||||||
|
|
||||||
|
@ -18,6 +21,8 @@ do_compile() {
|
||||||
do_install() {
|
do_install() {
|
||||||
install -d ${D}${bindir}
|
install -d ${D}${bindir}
|
||||||
install tunctl ${D}${bindir}/
|
install tunctl ${D}${bindir}/
|
||||||
|
|
||||||
|
install -m 755 ${WORKDIR}/qemu-oe-bridge-helper ${D}${bindir}/
|
||||||
}
|
}
|
||||||
|
|
||||||
DEPENDS += "qemu-system-native"
|
DEPENDS += "qemu-system-native"
|
||||||
|
|
25
meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper
Executable file
25
meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Copyright 2020 Garmin Ltd. or its subsidiaries
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
#
|
||||||
|
# Attempts to find and exec the host qemu-bridge-helper program
|
||||||
|
|
||||||
|
# If the QEMU_BRIDGE_HELPER variable is set by the user, exec it.
|
||||||
|
if [ -n "$QEMU_BRIDGE_HELPER" ]; then
|
||||||
|
exec "$QEMU_BRIDGE_HELPER" "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Search common paths for the helper program
|
||||||
|
BN="qemu-bridge-helper"
|
||||||
|
PATHS="/usr/libexec/ /usr/lib/qemu/"
|
||||||
|
|
||||||
|
for p in $PATHS; do
|
||||||
|
if [ -e "$p/$BN" ]; then
|
||||||
|
exec "$p/$BN" "$@"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "$BN not found!" > /dev/stderr
|
||||||
|
exit 1
|
||||||
|
|
|
@ -165,6 +165,7 @@ class BaseConfig(object):
|
||||||
self.kvm_enabled = False
|
self.kvm_enabled = False
|
||||||
self.vhost_enabled = False
|
self.vhost_enabled = False
|
||||||
self.slirp_enabled = False
|
self.slirp_enabled = False
|
||||||
|
self.net_bridge = None
|
||||||
self.nfs_instance = 0
|
self.nfs_instance = 0
|
||||||
self.nfs_running = False
|
self.nfs_running = False
|
||||||
self.serialconsole = False
|
self.serialconsole = False
|
||||||
|
@ -485,6 +486,8 @@ class BaseConfig(object):
|
||||||
self.vhost_enabled = True
|
self.vhost_enabled = True
|
||||||
elif arg == 'slirp':
|
elif arg == 'slirp':
|
||||||
self.slirp_enabled = True
|
self.slirp_enabled = True
|
||||||
|
elif arg.startswith('bridge='):
|
||||||
|
self.net_bridge = '%s' % arg[len('bridge='):]
|
||||||
elif arg == 'snapshot':
|
elif arg == 'snapshot':
|
||||||
self.snapshot = True
|
self.snapshot = True
|
||||||
elif arg == 'publicvnc':
|
elif arg == 'publicvnc':
|
||||||
|
@ -802,7 +805,7 @@ class BaseConfig(object):
|
||||||
def check_and_set(self):
|
def check_and_set(self):
|
||||||
"""Check configs sanity and set when needed"""
|
"""Check configs sanity and set when needed"""
|
||||||
self.validate_paths()
|
self.validate_paths()
|
||||||
if not self.slirp_enabled:
|
if not self.slirp_enabled and not self.net_bridge:
|
||||||
check_tun()
|
check_tun()
|
||||||
# Check audio
|
# Check audio
|
||||||
if self.audio_enabled:
|
if self.audio_enabled:
|
||||||
|
@ -1020,6 +1023,10 @@ class BaseConfig(object):
|
||||||
|
|
||||||
self.nfs_running = True
|
self.nfs_running = True
|
||||||
|
|
||||||
|
def setup_net_bridge(self):
|
||||||
|
self.set('NETWORK_CMD', '-netdev bridge,br=%s,id=net0,helper=%s -device virtio-net-pci,netdev=net0 ' % (
|
||||||
|
self.net_bridge, os.path.join(self.bindir_native, 'qemu-oe-bridge-helper')))
|
||||||
|
|
||||||
def setup_slirp(self):
|
def setup_slirp(self):
|
||||||
"""Setup user networking"""
|
"""Setup user networking"""
|
||||||
|
|
||||||
|
@ -1161,7 +1168,9 @@ class BaseConfig(object):
|
||||||
if sys.stdin.isatty():
|
if sys.stdin.isatty():
|
||||||
self.saved_stty = subprocess.check_output(("stty", "-g")).decode('utf-8').strip()
|
self.saved_stty = subprocess.check_output(("stty", "-g")).decode('utf-8').strip()
|
||||||
self.network_device = self.get('QB_NETWORK_DEVICE') or self.network_device
|
self.network_device = self.get('QB_NETWORK_DEVICE') or self.network_device
|
||||||
if self.slirp_enabled:
|
if self.net_bridge:
|
||||||
|
self.setup_net_bridge()
|
||||||
|
elif self.slirp_enabled:
|
||||||
self.setup_slirp()
|
self.setup_slirp()
|
||||||
else:
|
else:
|
||||||
self.setup_tap()
|
self.setup_tap()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user