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 <[email protected]>
---
 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


Reply via email to