diff mbox series

[v2,2/2] runqemu: add an option to enable guest-agent virtio device

Message ID 20230224153157.20305-2-peron.clem@gmail.com
State New
Headers show
Series [v2,1/2] qemu: split out qemu-guest-agent, add startup scripts | expand

Commit Message

Clément Péron Feb. 24, 2023, 3:31 p.m. UTC
Add support to the runqemu script for a new option, 'guestagent', that
enables the virtio serial port for host-to-guest communication.

Signed-off-by: Brenda Streiff <brenda.streiff@ni.com>
Signed-off-by: Clément Péron <peron.clem@gmail.com>
---
 scripts/runqemu | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

Comments

Alexander Kanavin March 6, 2023, 6:30 a.m. UTC | #1
Can you please explain the use case? Who would want to enable the
option, and what could they do when there's a running qemu?

This kind of information needs to go to the commit message, so we can
document those things for the users.

Alex

On Sun, 5 Mar 2023 at 21:10, Clément Péron <peron.clem@gmail.com> wrote:
>
> Add support to the runqemu script for a new option, 'guestagent', that
> enables the virtio serial port for host-to-guest communication.
>
> Signed-off-by: Brenda Streiff <brenda.streiff@ni.com>
> Signed-off-by: Clément Péron <peron.clem@gmail.com>
> ---
>  scripts/runqemu | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
>
> diff --git a/scripts/runqemu b/scripts/runqemu
> index def11ea911..e71a1e8828 100755
> --- a/scripts/runqemu
> +++ b/scripts/runqemu
> @@ -82,6 +82,7 @@ of the following environment variables (in any order):
>      kvm-vhost - enable KVM with vhost when running x86/x86_64 (VT-capable CPU required)
>      publicvnc - enable a VNC server open to all hosts
>      audio - enable audio
> +    guestagent - enable guest agent communication
>      [*/]ovmf* - OVMF firmware file or base name for booting with UEFI
>    tcpserial=<port> - specify tcp serial port number
>    qemuparams=<xyz> - specify custom parameters to QEMU
> @@ -216,6 +217,8 @@ class BaseConfig(object):
>          self.cleaned = False
>          # Files to cleanup after run
>          self.cleanup_files = []
> +        self.guest_agent = False
> +        self.guest_agent_sockpath = '/tmp/qga.sock'
>
>      def acquire_taplock(self, error=True):
>          logger.debug("Acquiring lockfile %s..." % self.taplock)
> @@ -526,6 +529,10 @@ class BaseConfig(object):
>              elif arg == 'publicvnc':
>                  self.publicvnc = True
>                  self.qemu_opt_script += ' -vnc :0'
> +            elif arg == 'guestagent':
> +                self.guest_agent = True
> +            elif arg.startswith('guestagent-sockpath='):
> +                self.guest_agent_sockpath = '%s' % arg[len('guestagent-sockpath='):]
>              elif arg.startswith('tcpserial='):
>                  self.tcpserial_portnum = '%s' % arg[len('tcpserial='):]
>              elif arg.startswith('qemuparams='):
> @@ -1366,6 +1373,12 @@ class BaseConfig(object):
>              raise RunQemuError("Failed to boot, QB_SYSTEM_NAME is NULL!")
>          self.qemu_system = qemu_system
>
> +    def setup_guest_agent(self):
> +        if self.guest_agent == True:
> +            self.qemu_opt += ' -chardev socket,path=' + self.guest_agent_sockpath + ',server,nowait,id=qga0 '
> +            self.qemu_opt += ' -device virtio-serial '
> +            self.qemu_opt += ' -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 '
> +
>      def setup_vga(self):
>          if self.nographic == True:
>              if self.sdl == True:
> @@ -1496,6 +1509,7 @@ class BaseConfig(object):
>          if self.snapshot:
>              self.qemu_opt += " -snapshot"
>
> +        self.setup_guest_agent()
>          self.setup_serial()
>          self.setup_vga()
>
> --
> 2.34.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#178051): https://lists.openembedded.org/g/openembedded-core/message/178051
> Mute This Topic: https://lists.openembedded.org/mt/97410707/1686489
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kanavin@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Clément Péron March 8, 2023, 9:32 a.m. UTC | #2
Hi Alexander,

On Mon, 6 Mar 2023 at 07:30, Alexander Kanavin <alex.kanavin@gmail.com> wrote:
>
> Can you please explain the use case? Who would want to enable the
> option, and what could they do when there's a running qemu?


Guest agent communication is useful to retrieve some information about
a running VM.

In my case, I use it to get the IP address of a VM configured using
macvtap which is not able to directly talk to the host over IP.

BR,
Clement

>
> This kind of information needs to go to the commit message, so we can
> document those things for the users.
>
> Alex
>
> On Sun, 5 Mar 2023 at 21:10, Clément Péron <peron.clem@gmail.com> wrote:
> >
> > Add support to the runqemu script for a new option, 'guestagent', that
> > enables the virtio serial port for host-to-guest communication.
> >
> > Signed-off-by: Brenda Streiff <brenda.streiff@ni.com>
> > Signed-off-by: Clément Péron <peron.clem@gmail.com>
> > ---
> >  scripts/runqemu | 14 ++++++++++++++
> >  1 file changed, 14 insertions(+)
> >
> > diff --git a/scripts/runqemu b/scripts/runqemu
> > index def11ea911..e71a1e8828 100755
> > --- a/scripts/runqemu
> > +++ b/scripts/runqemu
> > @@ -82,6 +82,7 @@ of the following environment variables (in any order):
> >      kvm-vhost - enable KVM with vhost when running x86/x86_64 (VT-capable CPU required)
> >      publicvnc - enable a VNC server open to all hosts
> >      audio - enable audio
> > +    guestagent - enable guest agent communication
> >      [*/]ovmf* - OVMF firmware file or base name for booting with UEFI
> >    tcpserial=<port> - specify tcp serial port number
> >    qemuparams=<xyz> - specify custom parameters to QEMU
> > @@ -216,6 +217,8 @@ class BaseConfig(object):
> >          self.cleaned = False
> >          # Files to cleanup after run
> >          self.cleanup_files = []
> > +        self.guest_agent = False
> > +        self.guest_agent_sockpath = '/tmp/qga.sock'
> >
> >      def acquire_taplock(self, error=True):
> >          logger.debug("Acquiring lockfile %s..." % self.taplock)
> > @@ -526,6 +529,10 @@ class BaseConfig(object):
> >              elif arg == 'publicvnc':
> >                  self.publicvnc = True
> >                  self.qemu_opt_script += ' -vnc :0'
> > +            elif arg == 'guestagent':
> > +                self.guest_agent = True
> > +            elif arg.startswith('guestagent-sockpath='):
> > +                self.guest_agent_sockpath = '%s' % arg[len('guestagent-sockpath='):]
> >              elif arg.startswith('tcpserial='):
> >                  self.tcpserial_portnum = '%s' % arg[len('tcpserial='):]
> >              elif arg.startswith('qemuparams='):
> > @@ -1366,6 +1373,12 @@ class BaseConfig(object):
> >              raise RunQemuError("Failed to boot, QB_SYSTEM_NAME is NULL!")
> >          self.qemu_system = qemu_system
> >
> > +    def setup_guest_agent(self):
> > +        if self.guest_agent == True:
> > +            self.qemu_opt += ' -chardev socket,path=' + self.guest_agent_sockpath + ',server,nowait,id=qga0 '
> > +            self.qemu_opt += ' -device virtio-serial '
> > +            self.qemu_opt += ' -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 '
> > +
> >      def setup_vga(self):
> >          if self.nographic == True:
> >              if self.sdl == True:
> > @@ -1496,6 +1509,7 @@ class BaseConfig(object):
> >          if self.snapshot:
> >              self.qemu_opt += " -snapshot"
> >
> > +        self.setup_guest_agent()
> >          self.setup_serial()
> >          self.setup_vga()
> >
> > --
> > 2.34.1
> >
> >
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#178051): https://lists.openembedded.org/g/openembedded-core/message/178051
> > Mute This Topic: https://lists.openembedded.org/mt/97410707/1686489
> > Group Owner: openembedded-core+owner@lists.openembedded.org
> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kanavin@gmail.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> >
diff mbox series

Patch

diff --git a/scripts/runqemu b/scripts/runqemu
index def11ea911..e71a1e8828 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -82,6 +82,7 @@  of the following environment variables (in any order):
     kvm-vhost - enable KVM with vhost when running x86/x86_64 (VT-capable CPU required)
     publicvnc - enable a VNC server open to all hosts
     audio - enable audio
+    guestagent - enable guest agent communication
     [*/]ovmf* - OVMF firmware file or base name for booting with UEFI
   tcpserial=<port> - specify tcp serial port number
   qemuparams=<xyz> - specify custom parameters to QEMU
@@ -216,6 +217,8 @@  class BaseConfig(object):
         self.cleaned = False
         # Files to cleanup after run
         self.cleanup_files = []
+        self.guest_agent = False
+        self.guest_agent_sockpath = '/tmp/qga.sock'
 
     def acquire_taplock(self, error=True):
         logger.debug("Acquiring lockfile %s..." % self.taplock)
@@ -526,6 +529,10 @@  class BaseConfig(object):
             elif arg == 'publicvnc':
                 self.publicvnc = True
                 self.qemu_opt_script += ' -vnc :0'
+            elif arg == 'guestagent':
+                self.guest_agent = True
+            elif arg.startswith('guestagent-sockpath='):
+                self.guest_agent_sockpath = '%s' % arg[len('guestagent-sockpath='):]
             elif arg.startswith('tcpserial='):
                 self.tcpserial_portnum = '%s' % arg[len('tcpserial='):]
             elif arg.startswith('qemuparams='):
@@ -1366,6 +1373,12 @@  class BaseConfig(object):
             raise RunQemuError("Failed to boot, QB_SYSTEM_NAME is NULL!")
         self.qemu_system = qemu_system
 
+    def setup_guest_agent(self):
+        if self.guest_agent == True:
+            self.qemu_opt += ' -chardev socket,path=' + self.guest_agent_sockpath + ',server,nowait,id=qga0 '
+            self.qemu_opt += ' -device virtio-serial '
+            self.qemu_opt += ' -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 '
+
     def setup_vga(self):
         if self.nographic == True:
             if self.sdl == True:
@@ -1496,6 +1509,7 @@  class BaseConfig(object):
         if self.snapshot:
             self.qemu_opt += " -snapshot"
 
+        self.setup_guest_agent()
         self.setup_serial()
         self.setup_vga()