qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/5] qga: Add initial FreeBSD support


From: Alexander Ivanov
Subject: Re: [PATCH 2/5] qga: Add initial FreeBSD support
Date: Fri, 23 Sep 2022 11:32:39 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0


On 23.09.2022 09:56, Marc-André Lureau wrote:
Hi

On Thu, Sep 22, 2022 at 4:28 PM Alexander Ivanov <alexander.ivanov@virtuozzo.com> wrote:

    Add commands-bsd.c file with dumb functions, fix device path and make
    the code buildable in FreeBSD.

    Signed-off-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com>
    ---
     meson.build          |   2 +-
     qga/commands-bsd.c   | 121
    +++++++++++++++++++++++++++++++++++++++++++
     qga/commands-posix.c |   6 ++-
     qga/main.c           |  11 +++-
     qga/meson.build      |   3 ++
     5 files changed, 140 insertions(+), 3 deletions(-)
     create mode 100644 qga/commands-bsd.c

    diff --git a/meson.build b/meson.build
    index c2adb7caf4..574cc1e91e 100644
    --- a/meson.build
    +++ b/meson.build
    @@ -75,7 +75,7 @@ have_tools = get_option('tools') \
       .allowed()
     have_ga = get_option('guest_agent') \
       .disable_auto_if(not have_system and not have_tools) \
    -  .require(targetos in ['sunos', 'linux', 'windows'],
    +  .require(targetos in ['sunos', 'linux', 'windows', 'freebsd'],
                error_message: 'unsupported OS for QEMU guest agent') \
       .allowed()
     have_block = have_system or have_tools
    diff --git a/qga/commands-bsd.c b/qga/commands-bsd.c
    new file mode 100644
    index 0000000000..c1e3ed13e9
    --- /dev/null
    +++ b/qga/commands-bsd.c
    @@ -0,0 +1,121 @@
    +/*
    + * QEMU Guest Agent BSD-specific command implementations
    + *
    + * Copyright (c) Virtuozzo International GmbH.
    + *
    + * Authors:
    + *  Alexander Ivanov  <alexander.ivanov@virtuozzo.com>
    + *
    + * This work is licensed under the terms of the GNU GPL, version
    2 or later.
    + * See the COPYING file in the top-level directory.
    + */
    +
    +#include "qemu/osdep.h"
    +#include "qga-qapi-commands.h"
    +#include "qapi/qmp/qerror.h"
    +#include "qapi/error.h"
    +#include "qemu/queue.h"
    +#include "commands-common.h"
    +
    +#if defined(CONFIG_FSFREEZE) || defined(CONFIG_FSTRIM)
    +bool build_fs_mount_list(FsMountList *mounts, Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return false;
    +}
    +#endif
    +
    +#if defined(CONFIG_FSFREEZE)
    +int64_t qmp_guest_fsfreeze_do_freeze_list(bool has_mountpoints,
    +                                          strList *mountpoints,
    +                                          FsMountList mounts,
    +                                          Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return 0;
    +}
    +
    +int qmp_guest_fsfreeze_do_thaw(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return 0;
    +}
    +#endif
    +
    +GuestDiskInfoList *qmp_guest_get_disks(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return NULL;
    +}
    +
    +GuestDiskStatsInfoList *qmp_guest_get_diskstats(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return NULL;
    +}
    +
    +GuestCpuStatsList *qmp_guest_get_cpustats(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return NULL;
    +}
    +
    +GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return NULL;
    +}
    +
    +void qmp_guest_suspend_disk(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +}
    +
    +void qmp_guest_suspend_ram(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +}
    +
    +void qmp_guest_suspend_hybrid(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +}
    +
    +GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return NULL;
    +}
    +
    +int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus,
    Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return -1;
    +}
    +
    +void qmp_guest_set_user_password(const char *username,
    +                                 const char *password,
    +                                 bool crypted,
    +                                 Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +}
    +
    +GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return NULL;
    +}
    +
    +GuestMemoryBlockResponseList *
    +qmp_guest_set_memory_blocks(GuestMemoryBlockList *mem_blks, Error
    **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return NULL;
    +}
    +
    +GuestMemoryBlockInfo *qmp_guest_get_memory_block_info(Error **errp)
    +{
    +    error_setg(errp, QERR_UNSUPPORTED);
    +    return NULL;
    +}
    diff --git a/qga/commands-posix.c b/qga/commands-posix.c
    index 0bb8b9e2f3..3a1055d5c3 100644
    --- a/qga/commands-posix.c
    +++ b/qga/commands-posix.c
    @@ -31,6 +31,10 @@
     #include <utmpx.h>
     #endif

    +#ifdef __FreeBSD__
    +#undef HAVE_GETIFADDRS
    +#endif


Why? leave a comment in code please (or in commit message if it's solved later in the series)

Now this code break building in FreeBSD. Maybe I'll add a note to the commit message and add a patch to fix it.


    +
     #ifdef HAVE_GETIFADDRS
     #include <arpa/inet.h>
     #include <sys/socket.h>
    @@ -763,7 +767,7 @@ void qmp_guest_file_flush(int64_t handle,
    Error **errp)
         }
     }

    -#if !defined(__linux__)
    +#if !(defined(__linux__) || defined(__FreeBSD__))

     void qmp_guest_suspend_disk(Error **errp)
     {
    diff --git a/qga/main.c b/qga/main.c
    index 5f1efa2333..22b3c0df11 100644
    --- a/qga/main.c
    +++ b/qga/main.c
    @@ -45,9 +45,14 @@
     #endif

     #ifndef _WIN32
    +#ifdef __FreeBSD__
    +#define QGA_VIRTIO_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0"
    +#define QGA_SERIAL_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0"


The same path for serial and virtio?

Hmm, I saw such an approach somewhere and it works. Will investigate this.


    +#else /* __FreeBSD__ */
     #define QGA_VIRTIO_PATH_DEFAULT
    "/dev/virtio-ports/org.qemu.guest_agent.0"
    -#define QGA_STATE_RELATIVE_DIR  "run"
     #define QGA_SERIAL_PATH_DEFAULT "/dev/ttyS0"
    +#endif /* __FreeBSD__ */
    +#define QGA_STATE_RELATIVE_DIR  "run"
     #else
     #define QGA_VIRTIO_PATH_DEFAULT
    "\\\\.\\Global\\org.qemu.guest_agent.0"
     #define QGA_STATE_RELATIVE_DIR  "qemu-ga"
    @@ -1475,7 +1480,11 @@ int main(int argc, char **argv)
         }

         if (config->method == NULL) {
    +#ifdef CONFIG_BSD
    +        config->method = g_strdup("isa-serial");


Why is isa serial the default ?

I think, an answer "because it works" is not enough? =) Will investigate.

Also I've read all your comments in other emails and will fix my patches accordingly.


    +#else
             config->method = g_strdup("virtio-serial");
    +#endif
         }

         socket_activation = check_socket_activation();
    diff --git a/qga/meson.build b/qga/meson.build
    index 409f49a000..456ba4c29f 100644
    --- a/qga/meson.build
    +++ b/qga/meson.build
    @@ -75,6 +75,9 @@ qga_ss.add(when: 'CONFIG_POSIX', if_true: files(
     qga_ss.add(when: 'CONFIG_LINUX', if_true: files(
       'commands-linux.c',
     ))
    +qga_ss.add(when: 'CONFIG_BSD', if_true: files(
    +  'commands-bsd.c',
    +))
     qga_ss.add(when: 'CONFIG_WIN32', if_true: files(
       'channel-win32.c',
       'commands-win32.c',
-- 2.34.1



otherwise, lgtm

--
Marc-André Lureau



reply via email to

[Prev in Thread] Current Thread [Next in Thread]