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
