summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2023-01-18 19:56:24 -0500
committerScott Murray <scott.murray@konsulko.com>2023-01-19 15:34:12 -0500
commit0219e6547b627f45936599fa54e02cad27dee4f4 (patch)
tree23a9c53b57d732d0a9654cfe9f7bcf4a62178186
parentebeba2f0667d7195597d9131a12d880d503a399a (diff)
Rework guest network configuration for QEMU+KVM demo
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: I6807f08f11fc2f3aa4a5411b319ebc6d5283cdf8 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-rw-r--r--recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf1
-rw-r--r--recipes-config/qemu-config/files/agl-cluster-demo-platform.conf1
-rw-r--r--recipes-config/qemu-config/files/agl-demo-platform.conf1
-rw-r--r--recipes-config/qemu-config/files/agl-ivi-demo-platform-flutter.conf1
-rw-r--r--recipes-config/qemu-config/files/bridge.conf1
-rw-r--r--recipes-config/qemu-config/files/connman-nodnsproxy.conf3
-rw-r--r--recipes-config/qemu-config/files/dnsmasq-qemu.conf4
-rw-r--r--recipes-config/qemu-config/files/vmnet0.netdev3
-rw-r--r--recipes-config/qemu-config/files/vmnet0.network7
-rw-r--r--recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb2
-rw-r--r--recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform.bb2
-rw-r--r--recipes-config/qemu-config/qemu-config-agl-demo-platform.bb2
-rw-r--r--recipes-config/qemu-config/qemu-config-agl-ivi-demo-platform-flutter.bb2
-rw-r--r--recipes-config/qemu-config/qemu-config-vmnet0.bb41
-rwxr-xr-xrecipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh7
15 files changed, 70 insertions, 8 deletions
diff --git a/recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf b/recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf
index 262f3c2d4..1ecefc477 100644
--- a/recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf
+++ b/recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf
@@ -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"
diff --git a/recipes-config/qemu-config/files/agl-cluster-demo-platform.conf b/recipes-config/qemu-config/files/agl-cluster-demo-platform.conf
index 262f3c2d4..1ecefc477 100644
--- a/recipes-config/qemu-config/files/agl-cluster-demo-platform.conf
+++ b/recipes-config/qemu-config/files/agl-cluster-demo-platform.conf
@@ -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"
diff --git a/recipes-config/qemu-config/files/agl-demo-platform.conf b/recipes-config/qemu-config/files/agl-demo-platform.conf
index e72386789..70c716f3d 100644
--- a/recipes-config/qemu-config/files/agl-demo-platform.conf
+++ b/recipes-config/qemu-config/files/agl-demo-platform.conf
@@ -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/agl-ivi-demo-platform-flutter.conf b/recipes-config/qemu-config/files/agl-ivi-demo-platform-flutter.conf
index e72386789..70c716f3d 100644
--- a/recipes-config/qemu-config/files/agl-ivi-demo-platform-flutter.conf
+++ b/recipes-config/qemu-config/files/agl-ivi-demo-platform-flutter.conf
@@ -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
index 000000000..72c73f39f
--- /dev/null
+++ b/recipes-config/qemu-config/files/bridge.conf
@@ -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
index 000000000..9d7f74b8f
--- /dev/null
+++ b/recipes-config/qemu-config/files/connman-nodnsproxy.conf
@@ -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
index 000000000..4ab6ee3bf
--- /dev/null
+++ b/recipes-config/qemu-config/files/dnsmasq-qemu.conf
@@ -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
index 000000000..e25453174
--- /dev/null
+++ b/recipes-config/qemu-config/files/vmnet0.netdev
@@ -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
index 000000000..600f8ac01
--- /dev/null
+++ b/recipes-config/qemu-config/files/vmnet0.network
@@ -0,0 +1,7 @@
+[Match]
+Name=vmnet0
+
+[Network]
+Address=172.16.10.1/24
+IPForward=yes
+IPMasquerade=yes
diff --git a/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb b/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb
index c15528a6e..159d3939e 100644
--- a/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb
+++ b/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb
@@ -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-agl-cluster-demo-platform.bb b/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform.bb
index 4f9c5a92f..8e2aeb3e5 100644
--- a/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform.bb
+++ b/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform.bb
@@ -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-agl-demo-platform.bb b/recipes-config/qemu-config/qemu-config-agl-demo-platform.bb
index 1d5e0df22..da85b7a72 100644
--- a/recipes-config/qemu-config/qemu-config-agl-demo-platform.bb
+++ b/recipes-config/qemu-config/qemu-config-agl-demo-platform.bb
@@ -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-agl-ivi-demo-platform-flutter.bb b/recipes-config/qemu-config/qemu-config-agl-ivi-demo-platform-flutter.bb
index 5efb7a96c..10c30445e 100644
--- a/recipes-config/qemu-config/qemu-config-agl-ivi-demo-platform-flutter.bb
+++ b/recipes-config/qemu-config/qemu-config-agl-ivi-demo-platform-flutter.bb
@@ -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
index 000000000..bc634bf32
--- /dev/null
+++ b/recipes-config/qemu-config/qemu-config-vmnet0.bb
@@ -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"
diff --git a/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh b/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh
index d12764735..6bf2cc4f9 100755
--- a/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh
+++ b/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh
@@ -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