[oe-commits] [openembedded-core] 49/49: runqemu: Add network bridge support

git at git.openembedded.org git at git.openembedded.org
Thu Jan 9 09:20:49 UTC 2020


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit 6879278dd9833d563701713a13e87d002467ee7f
Author: Joshua Watt <jpewhacker at gmail.com>
AuthorDate: Wed Jan 8 13:48:07 2020 -0600

    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.
    
    Signed-off-by: Joshua Watt <JPEWhacker at gmail.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 .../qemu/qemu-helper-native_1.0.bb                 |  7 +++++-
 .../qemu/qemu-helper/qemu-oe-bridge-helper         | 25 ++++++++++++++++++++++
 scripts/runqemu                                    | 13 +++++++++--
 3 files changed, 42 insertions(+), 3 deletions(-)

diff --git a/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb b/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
index 372eebd..2fc0766 100644
--- a/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
+++ b/meta/recipes-devtools/qemu/qemu-helper-native_1.0.bb
@@ -5,7 +5,10 @@ PR = "r1"
 
 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}"
 
@@ -18,6 +21,8 @@ do_compile() {
 do_install() {
 	install -d ${D}${bindir}
 	install tunctl ${D}${bindir}/
+
+    install -m 755 ${WORKDIR}/qemu-oe-bridge-helper ${D}${bindir}/
 }
 
 DEPENDS += "qemu-system-native"
diff --git a/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper
new file mode 100755
index 0000000..f057d4e
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu-helper/qemu-oe-bridge-helper
@@ -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
+
diff --git a/scripts/runqemu b/scripts/runqemu
index c324982..dd0aa4b 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -165,6 +165,7 @@ class BaseConfig(object):
         self.kvm_enabled = False
         self.vhost_enabled = False
         self.slirp_enabled = False
+        self.net_bridge = None
         self.nfs_instance = 0
         self.nfs_running = False
         self.serialconsole = False
@@ -485,6 +486,8 @@ class BaseConfig(object):
                 self.vhost_enabled = True
             elif arg == 'slirp':
                 self.slirp_enabled = True
+            elif arg.startswith('bridge='):
+                self.net_bridge = '%s' % arg[len('bridge='):]
             elif arg == 'snapshot':
                 self.snapshot = True
             elif arg == 'publicvnc':
@@ -802,7 +805,7 @@ class BaseConfig(object):
     def check_and_set(self):
         """Check configs sanity and set when needed"""
         self.validate_paths()
-        if not self.slirp_enabled:
+        if not self.slirp_enabled and not self.net_bridge:
             check_tun()
         # Check audio
         if self.audio_enabled:
@@ -1020,6 +1023,10 @@ class BaseConfig(object):
 
         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):
         """Setup user networking"""
 
@@ -1161,7 +1168,9 @@ class BaseConfig(object):
         if sys.stdin.isatty():
             self.saved_stty = subprocess.check_output(("stty", "-g")).decode('utf-8').strip()
         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()
         else:
             self.setup_tap()

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list