A pair for .char_add_client(), to be used to support backend-transfer
migration of chardev attached to vhost-user-blk in following commits.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
chardev/char-socket.c | 7 +++++++
chardev/char.c | 6 ++++++
include/chardev/char.h | 4 ++++
3 files changed, 17 insertions(+)
diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index 0a5738c158..51bb9d0a2d 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -929,6 +929,12 @@ static int tcp_chr_new_client(Chardev *chr, QIOChannelSocket *sioc)
return 0;
}
+static int tcp_chr_get_client(Chardev *chr)
+{
+ SocketChardev *s = SOCKET_CHARDEV(chr);
+
+ return s->sioc->fd;
+}
static int tcp_chr_add_client(Chardev *chr, int fd)
{
@@ -1591,6 +1597,7 @@ static void char_socket_class_init(ObjectClass *oc, const void *data)
cc->get_msgfds = tcp_get_msgfds;
cc->set_msgfds = tcp_set_msgfds;
cc->chr_add_client = tcp_chr_add_client;
+ cc->chr_get_client = tcp_chr_get_client;
cc->chr_add_watch = tcp_chr_add_watch;
cc->chr_update_read_handler = tcp_chr_update_read_handler;
diff --git a/chardev/char.c b/chardev/char.c
index b68d44e394..3c2ed972f1 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -247,6 +247,12 @@ int qemu_chr_add_client(Chardev *s, int fd)
CHARDEV_GET_CLASS(s)->chr_add_client(s, fd) : -1;
}
+int qemu_chr_get_client(Chardev *s)
+{
+ return CHARDEV_GET_CLASS(s)->chr_get_client ?
+ CHARDEV_GET_CLASS(s)->chr_get_client(s) : -1;
+}
+
static bool qemu_char_open(Chardev *chr, ChardevBackend *backend,
const char *default_filename, Error **errp)
{
diff --git a/include/chardev/char.h b/include/chardev/char.h
index d2e01f0f9c..671f64cb7e 100644
--- a/include/chardev/char.h
+++ b/include/chardev/char.h
@@ -216,6 +216,7 @@ void qemu_chr_be_update_read_handlers(Chardev *s,
void qemu_chr_be_event(Chardev *s, QEMUChrEvent event);
int qemu_chr_add_client(Chardev *s, int fd);
+int qemu_chr_get_client(Chardev *s);
Chardev *qemu_chr_find(const char *name);
bool qemu_chr_has_feature(Chardev *chr,
@@ -316,6 +317,9 @@ struct ChardevClass {
/* accept the given fd */
int (*chr_add_client)(Chardev *chr, int fd);
+ /* get fd back */
+ int (*chr_get_client)(Chardev *chr);
+
/* wait for a connection */
int (*chr_wait_connected)(Chardev *chr, Error **errp);
--
2.48.1