summaryrefslogtreecommitdiffstats
path: root/qga/channel-posix.c
diff options
context:
space:
mode:
authorAlexander Ivanov2022-10-17 09:28:19 +0200
committerKonstantin Kostiuk2022-10-26 19:35:07 +0200
commitc6cd588bb3a29a831c862780631a7d2145ade5de (patch)
treea5003e207e1285709b9d8e0fc85cdf8626327ecd /qga/channel-posix.c
parentMerge tag 'trivial-branch-for-7.2-pull-request' of https://gitlab.com/laurent... (diff)
downloadqemu-c6cd588bb3a29a831c862780631a7d2145ade5de.tar.gz
qemu-c6cd588bb3a29a831c862780631a7d2145ade5de.tar.xz
qemu-c6cd588bb3a29a831c862780631a7d2145ade5de.zip
qga: Add initial FreeBSD support
- Fix device path. - Fix virtio-serial channel initialization. - Make the code buildable in FreeBSD. Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com> Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Diffstat (limited to 'qga/channel-posix.c')
-rw-r--r--qga/channel-posix.c19
1 files changed, 19 insertions, 0 deletions
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");