From 489e3eda6f403f747f4609276ca6adfc4831edf2 Mon Sep 17 00:00:00 2001 From: Kroese Date: Fri, 28 Aug 2026 04:09:16 +0200 Subject: [PATCH] feat: Support simpler QMP configuration (#1403) --- docs/environment.md | 4 ++-- src/config.sh | 47 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/docs/environment.md b/docs/environment.md index d43e1d0..6d36eef 100644 --- a/docs/environment.md +++ b/docs/environment.md @@ -110,6 +110,6 @@ Also see [Dynamic memory allocation](https://github.com/qemus/qemu/blob/master/d | `DEBUG` | `N` | Enables verbose debug output. | | `TRACE` | `N` | Enables shell command tracing. | | `HOST_DEBUG` | `N` | Enables debug output for the DSM host helper. | -| `MONITOR` | | QEMU monitor configuration. | -| `QMP` | | QEMU Machine Protocol configuration. | +| `MONITOR` | | QEMU monitor, such as `/storage/monitor.sock` or `4444`. | +| `QMP` | | QEMU Machine Protocol, such as `/storage/qmp.sock` or `4444`. | | `ARGUMENTS` | | Additional raw arguments appended to the QEMU command line. | diff --git a/src/config.sh b/src/config.sh index eeac752..1aef64b 100644 --- a/src/config.sh +++ b/src/config.sh @@ -31,17 +31,54 @@ configureMemory() { return 0 } +normalizeSocket() { + + local value="$1" + local backend="${value%%,*}" + + if [[ "$backend" == *.sock && "$backend" != *:* ]]; then + value="unix:$value" + [[ ",$value," == *,server=* ]] || value+=",server=on" + if [[ ",$value," != *,wait=* ]] && [[ ",$value," != *,server=off,* ]]; then + value+=",wait=off" + fi + fi + + echo "$value" +} + +normalizePort() { + + local value="$1" + local protocol="$2" + + if [[ "$value" =~ ^[0-9]+$ ]]; then + value="$protocol:0.0.0.0:$value,server=on,wait=off" + fi + + echo "$value" +} + configureMonitor() { MON_OPTS="" - [ -n "$QMP" ] && MON_OPTS+=" -qmp $QMP" - [ -n "$MONITOR" ] && MON_OPTS+=" -monitor $MONITOR" - MON_OPTS="${MON_OPTS# }" - local name="${APP// /-}" - ID_OPTS="-name $name,process=$PROCESS,debug-threads=on" + if [ -n "$MONITOR" ]; then + MONITOR=$(normalizePort "$MONITOR" "telnet") + MONITOR=$(normalizeSocket "$MONITOR") + MON_OPTS+=" -monitor $MONITOR" + fi + + if [ -n "$QMP" ]; then + QMP=$(normalizePort "$QMP" "tcp") + QMP=$(normalizeSocket "$QMP") + MON_OPTS+=" -qmp $QMP" + fi + + ID_OPTS="-name ${APP// /-},process=$PROCESS" PID_OPTS="-pidfile $QEMU_PID" + MON_OPTS="${MON_OPTS# }" return 0 }