Reviewed-by: Konstantin Kostiuk <kkost...@redhat.com> On Mon, Oct 3, 2022 at 12:58 PM Marc-André Lureau < marcandre.lur...@gmail.com> wrote:
> > > On Mon, Oct 3, 2022 at 1:39 PM Alexander Ivanov < > alexander.iva...@virtuozzo.com> wrote: > >> - Fix device path. >> - Fix virtio-serial channel initialization. >> - Make the code buildable in FreeBSD. >> >> Signed-off-by: Alexander Ivanov <alexander.iva...@virtuozzo.com> >> > > Acked-by: Marc-André Lureau <marcandre.lur...@redhat.com> > > >> --- >> meson.build | 2 +- >> qga/channel-posix.c | 19 +++++++++++++++++++ >> qga/commands-posix.c | 8 ++++++++ >> qga/main.c | 6 +++++- >> 4 files changed, 33 insertions(+), 2 deletions(-) >> >> diff --git a/meson.build b/meson.build >> index 8dc661363f..5c11abc8aa 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/channel-posix.c b/qga/channel-posix.c >> index 6796a02cff..568350ded4 100644 >> --- a/qga/channel-posix.c >> +++ b/qga/channel-posix.c >> @@ -149,6 +149,25 @@ static gboolean ga_channel_open(GAChannel *c, const >> gchar *path, >> return false; >> } >> #endif >> +#ifdef __FreeBSD__ >> + /* >> + * In the default state channel sends echo of every command to a >> + * client. The client programm doesn't expect this and raises an >> + * error. Suppress echo by resetting ECHO terminal flag. >> + */ >> + struct termios tio; >> + if (tcgetattr(fd, &tio) < 0) { >> + error_setg_errno(errp, errno, "error getting channel termios >> attrs"); >> + close(fd); >> + return false; >> + } >> + tio.c_lflag &= ~ECHO; >> + if (tcsetattr(fd, TCSAFLUSH, &tio) < 0) { >> + error_setg_errno(errp, errno, "error setting channel termios >> attrs"); >> + close(fd); >> + return false; >> + } >> +#endif /* __FreeBSD__ */ >> ret = ga_channel_client_add(c, fd); >> if (ret) { >> error_setg(errp, "error adding channel to main loop"); >> diff --git a/qga/commands-posix.c b/qga/commands-posix.c >> index eea819cff0..16d67e9f6d 100644 >> --- a/qga/commands-posix.c >> +++ b/qga/commands-posix.c >> @@ -51,6 +51,14 @@ >> #endif >> #endif >> >> +#ifdef __FreeBSD__ >> +/* >> + * The code under HAVE_GETIFADDRS condition can't be compiled in FreeBSD. >> + * Fix it in one of the following patches. >> + */ >> +#undef HAVE_GETIFADDRS >> +#endif >> + >> #ifdef HAVE_GETIFADDRS >> #include <arpa/inet.h> >> #include <sys/socket.h> >> diff --git a/qga/main.c b/qga/main.c >> index 5a9d8252e0..0d27c97d38 100644 >> --- a/qga/main.c >> +++ b/qga/main.c >> @@ -45,9 +45,13 @@ >> #endif >> >> #ifndef _WIN32 >> +#ifdef __FreeBSD__ >> +#define QGA_VIRTIO_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" >> +#endif /* __FreeBSD__ */ >> #define QGA_SERIAL_PATH_DEFAULT "/dev/ttyS0" >> +#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" >> -- >> 2.34.1 >> >> > > -- > Marc-André Lureau >