Hi,
I already posted this question on stackoverflow
https://stackoverflow.com/questions/68162860/how-can-i-expose-qemu-guest-agent-qmp-capabilities-to-the-qmp-tcp-server-in-qemu
but I didn't receive any answer.
I re-post the question here with some news.

I'm using qemu-system-x86_64 to run a vm exposing QMP commands via TCP
connection in this way:

qemu-system-x86_64 \
-smp 4 -m 4096 \
-vga std \
-display vnc=:0 \
-netdev user,id=n0 \
-device e1000,netdev=n0 \
-usb -device usb-tablet \
-qmp tcp:localhost:8124,server,nowait \
-k en-us \
-boot d \
-hda /filesystem/filesystem.img
Everything is ok, because I can send QMP commands to qemu locally via TCP
socket connection on port 8124.

Then I installed qemu-guest-agent on the vm (Ubuntu 21.04 desktop) and I
created the virtio ports required by the quemu-guest-agent service in this
way:

qemu-system-x86_64 \
-smp 4 -m 4096 \
-vga std \
-display vnc=:0 \
-netdev user,id=n0 \
-device e1000,netdev=n0 \
-chardev socket,path=/tmp/qga.sock,server,nowait,id=qga0 \
-device virtio-serial \
-device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 \
-usb -device usb-tablet \
-qmp tcp:localhost:8124,server,nowait \
-k en-us \
-boot d \
-hda /filesystem/filesystem.img

quemu-guest-agent systemd service is up and running as expected (obviously
on a local socket, not via TCP).

Now I want to see qemu-guest-agent QMP capabilities via TCP socket
connection. How can I achieve this?

Based on the official guide(https://wiki.qemu.org/Features/GuestAgent) I
have to change chardev in this way -chardev qga_proxy,id=qga0 \ but it's
not working. It seems an obsolete info in that guide, because this command
is not supported today. It throws error: qemu-system-x86_64: -chardev
qga_proxy,id=qga0: 'qga_proxy' is not a valid char driver name

Which is the correct way to expose guest-agent QMP commands through TCP
socket?

At the moment, I found this solution:

qemu-system-x86_64 \
-smp 4 -m 4096 \
-vga std \
-display vnc=:0 \
-netdev user,id=n0 \
-device e1000,netdev=n0 \
-chardev socket,id=qga0,port=8125,host:localhost,server,nowait \
-device virtio-serial \
-device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 \
-usb -device usb-tablet \
-qmp tcp:localhost:8124,server,nowait \
-k en-us \
-boot d \
-hda /filesystem/filesystem.img

but it opens 2 different TCP sockets on 2 different ports (8124, 8125). Is
there a better way?
"Poxying" guest agent capabilities via the same qmp connection on port 8124
seems the optimal solution in my use case. Is it possibile?

Thank you.

Reply via email to