Rework guest network configuration for QEMU+KVM demo 29/28429/2
authorScott Murray <scott.murray@konsulko.com>
Thu, 19 Jan 2023 00:56:24 +0000 (19:56 -0500)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Sun, 29 Jan 2023 14:29:37 +0000 (14:29 +0000)
Changes:
- Tweak agl-qemu-runner to make network options configurable.
- Add qemu-config-vmnet0 recipe that installs the required
  configuration files to set up a vmnet0 bridge device for QEMU to
  add the guests to, and to run dnsmasq against it to provide set
  IPs (in 172.16.10.0/8) to known MAC addresses that can be used to
  get the IVI and IC guests at stable IP addresses.
- As part of the above, disable connman DNS proxying to avoid
  conflicting with dnsmasq.  This does mean this package should
  only be used for simple host images where applications can live
  with less dynamic DNS configuration behavior.
- Update the various guest configuration files for agl-qemu-runner
  to set the new QEMU_NET_OPT variable as required.

Bug-AGL: SPEC-4618

Change-Id: I81d2ea9f0605a8bca7ac17d6e8f33c0b1a9f2c46
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
(cherry picked from commit 0219e6547b627f45936599fa54e02cad27dee4f4)

15 files changed:
recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf
recipes-config/qemu-config/files/agl-cluster-demo-platform.conf
recipes-config/qemu-config/files/agl-demo-platform.conf
recipes-config/qemu-config/files/agl-ivi-demo-platform-flutter.conf
recipes-config/qemu-config/files/bridge.conf [new file with mode: 0644]
recipes-config/qemu-config/files/connman-nodnsproxy.conf [new file with mode: 0644]
recipes-config/qemu-config/files/dnsmasq-qemu.conf [new file with mode: 0644]
recipes-config/qemu-config/files/vmnet0.netdev [new file with mode: 0644]
recipes-config/qemu-config/files/vmnet0.network [new file with mode: 0644]
recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb
recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform.bb
recipes-config/qemu-config/qemu-config-agl-demo-platform.bb
recipes-config/qemu-config/qemu-config-agl-ivi-demo-platform-flutter.bb
recipes-config/qemu-config/qemu-config-vmnet0.bb [new file with mode: 0644]
recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh

index 262f3c2..1ecefc4 100644 (file)
@@ -1,4 +1,5 @@
 QEMU_TASKSET_CPUS="4-7"
 QEMU_SMP_OPT="-smp 4"
 QEMU_MEM_OPT="-m 2G"
+QEMU_NET_OPT="-netdev bridge,br=vmnet0,id=net0 -device virtio-net-device,mac=52:54:00:12:00:03,netdev=net0"
 QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=2048M video=Virtual-1:1920x1080"
index 262f3c2..1ecefc4 100644 (file)
@@ -1,4 +1,5 @@
 QEMU_TASKSET_CPUS="4-7"
 QEMU_SMP_OPT="-smp 4"
 QEMU_MEM_OPT="-m 2G"
+QEMU_NET_OPT="-netdev bridge,br=vmnet0,id=net0 -device virtio-net-device,mac=52:54:00:12:00:03,netdev=net0"
 QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=2048M video=Virtual-1:1920x1080"
index e723867..70c716f 100644 (file)
@@ -3,4 +3,5 @@ QEMU_SMP_OPT="-smp 4"
 QEMU_MEM_OPT="-m 4G"
 QEMU_INPUT_OPT="-device virtio-tablet-device"
 QEMU_AUDIO_OPT="-audiodev alsa,id=agl -device intel-hda -device hda-duplex,audiodev=agl"
+QEMU_NET_OPT="-netdev bridge,br=vmnet0,id=net0 -device virtio-net-device,mac=52:54:00:12:00:02,netdev=net0"
 QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=4196M video=Virtual-1:1920x1080"
index e723867..70c716f 100644 (file)
@@ -3,4 +3,5 @@ QEMU_SMP_OPT="-smp 4"
 QEMU_MEM_OPT="-m 4G"
 QEMU_INPUT_OPT="-device virtio-tablet-device"
 QEMU_AUDIO_OPT="-audiodev alsa,id=agl -device intel-hda -device hda-duplex,audiodev=agl"
+QEMU_NET_OPT="-netdev bridge,br=vmnet0,id=net0 -device virtio-net-device,mac=52:54:00:12:00:02,netdev=net0"
 QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=4196M video=Virtual-1:1920x1080"
diff --git a/recipes-config/qemu-config/files/bridge.conf b/recipes-config/qemu-config/files/bridge.conf
new file mode 100644 (file)
index 0000000..72c73f3
--- /dev/null
@@ -0,0 +1 @@
+allow vmnet0
diff --git a/recipes-config/qemu-config/files/connman-nodnsproxy.conf b/recipes-config/qemu-config/files/connman-nodnsproxy.conf
new file mode 100644 (file)
index 0000000..9d7f74b
--- /dev/null
@@ -0,0 +1,3 @@
+[Service]
+ExecStart=
+ExecStart=/usr/sbin/connmand -n --nodnsproxy
diff --git a/recipes-config/qemu-config/files/dnsmasq-qemu.conf b/recipes-config/qemu-config/files/dnsmasq-qemu.conf
new file mode 100644 (file)
index 0000000..4ab6ee3
--- /dev/null
@@ -0,0 +1,4 @@
+interface=vmnet0
+dhcp-range=172.16.10.1,172.16.10.5,255.255.255.0,12h
+dhcp-host=52:54:00:12:00:02,172.16.10.2
+dhcp-host=52:54:00:12:00:03,172.16.10.3
diff --git a/recipes-config/qemu-config/files/vmnet0.netdev b/recipes-config/qemu-config/files/vmnet0.netdev
new file mode 100644 (file)
index 0000000..e254531
--- /dev/null
@@ -0,0 +1,3 @@
+[NetDev]
+Name=vmnet0
+Kind=bridge
diff --git a/recipes-config/qemu-config/files/vmnet0.network b/recipes-config/qemu-config/files/vmnet0.network
new file mode 100644 (file)
index 0000000..600f8ac
--- /dev/null
@@ -0,0 +1,7 @@
+[Match]
+Name=vmnet0
+
+[Network]
+Address=172.16.10.1/24
+IPForward=yes
+IPMasquerade=yes
index c15528a..159d393 100644 (file)
@@ -26,4 +26,4 @@ do_install() {
 
 FILES:${PN} += "${systemd_system_unitdir}"
 
-RDEPENDS:${PN} += "agl-qemu-runner"
+RDEPENDS:${PN} += "agl-qemu-runner qemu-config-vmnet0"
index 4f9c5a9..8e2aeb3 100644 (file)
@@ -26,4 +26,4 @@ do_install() {
 
 FILES:${PN} += "${systemd_system_unitdir}"
 
-RDEPENDS:${PN} += "agl-qemu-runner"
+RDEPENDS:${PN} += "agl-qemu-runner qemu-config-vmnet0"
index 1d5e0df..da85b7a 100644 (file)
@@ -26,4 +26,4 @@ do_install() {
 
 FILES:${PN} += "${systemd_system_unitdir}"
 
-RDEPENDS:${PN} += "agl-qemu-runner"
+RDEPENDS:${PN} += "agl-qemu-runner qemu-config-vmnet0"
index 5efb7a9..10c3044 100644 (file)
@@ -26,4 +26,4 @@ do_install() {
 
 FILES:${PN} += "${systemd_system_unitdir}"
 
-RDEPENDS:${PN} += "agl-qemu-runner"
+RDEPENDS:${PN} += "agl-qemu-runner qemu-config-vmnet0"
diff --git a/recipes-config/qemu-config/qemu-config-vmnet0.bb b/recipes-config/qemu-config/qemu-config-vmnet0.bb
new file mode 100644 (file)
index 0000000..bc634bf
--- /dev/null
@@ -0,0 +1,41 @@
+SUMMARY     = "Setting files for QEMU networking for guest VMs"
+LICENSE     = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit systemd allarch
+
+SRC_URI = "file://vmnet0.netdev \
+           file://vmnet0.network \
+          file://bridge.conf \
+          file://dnsmasq-qemu.conf \
+          file://connman-nodnsproxy.conf \
+"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+QEMU_IMAGE = "agl-cluster-demo-platform"
+QEMU_UNIT = "agl-qemu-runner@${QEMU_IMAGE}.service"
+
+do_install() {
+    # Install systemd-networkd vmnet0 configuration
+    install -d ${D}${systemd_unitdir}/network
+    install -m 0644 ${WORKDIR}/vmnet0.netdev ${D}${systemd_unitdir}/network/
+    install -m 0644 ${WORKDIR}/vmnet0.network ${D}${systemd_unitdir}/network/
+
+    # Install QEMU bridge configuration
+    install -d ${D}${sysconfdir}/qemu
+    install -m 0644 ${WORKDIR}/bridge.conf ${D}${sysconfdir}/qemu/
+
+    # Configure dnsmasq to serve DHCP to the guests
+    install -d ${D}${sysconfdir}/dnsmasq.d
+    install -m 0644 ${WORKDIR}/dnsmasq-qemu.conf ${D}${sysconfdir}/dnsmasq.d/
+
+    # Disable ConnMan's local DNS proxy to not conflict with dnsmasq
+    install -d ${D}${systemd_system_unitdir}/connman.service.d/
+    install -m 0644 ${WORKDIR}/connman-nodnsproxy.conf ${D}${systemd_system_unitdir}/connman.service.d/    
+}
+
+FILES:${PN} += "${systemd_unitdir}/network ${systemd_system_unitdir}"
+
+RDEPENDS:${PN} += "agl-qemu-runner dnsmasq connman"
index d127647..6bf2cc4 100755 (executable)
@@ -58,14 +58,13 @@ qemu-system-${arch} \
        -drive id=disk0,file=${disk},format=raw,if=none \
        -serial mon:pty \
        -object rng-random,filename=/dev/urandom,id=rng0 \
-       -netdev user,id=net-user \
        -device virtio-blk-device,drive=disk0 \
-       -device virtio-net-device,netdev=net-user,mac=52:54:00:12:00:02 \
        -device virtio-rng-device,rng=rng0 \
+       ${QEMU_NET_OPT} \
        ${QEMU_INPUT_OPT} \
        -global virtio-mmio.force-legacy=false \
        -device virtio-gpu-gl-device \
        -display sdl,gl=on -vga std \
-               ${QEMU_AUDIO_OPT} \
-               ${QEMU_EXTRA_OPT} \
+       ${QEMU_AUDIO_OPT} \
+       ${QEMU_EXTRA_OPT} \
        -full-screen