Message ID | 20220922132001.940334-3-alexander.ivanov@virtuozzo.com |
---|---|
State | New |
Headers | show |
Series | [1/5] qga: Move Linux-specific commands code to separate file | expand |
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) > + > #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? > +#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 ? > +#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
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
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 + #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" +#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"); +#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',
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