On Wed, Sep 09, 2020 at 10:52:55PM +0800, Chuan Zheng wrote: > add multifd_channel_connect to support for tls check. > > Signed-off-by: Chuan Zheng <zhengch...@huawei.com> > Signed-off-by: Yan Jin <jinya...@huawei.com> > --- > migration/multifd.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 45 insertions(+), 2 deletions(-) > > diff --git a/migration/multifd.c b/migration/multifd.c > index b2e741c..b2076d7 100644 > --- a/migration/multifd.c > +++ b/migration/multifd.c > @@ -20,6 +20,7 @@ > #include "ram.h" > #include "migration.h" > #include "socket.h" > +#include "tls.h" > #include "qemu-file.h" > #include "trace.h" > #include "multifd.h" > @@ -718,6 +719,47 @@ out: > return NULL; > } > > +static void multifd_tls_channel_connect(MultiFDSendParams *p, > + QIOChannel *ioc, > + Error **errp) > +{ > + /* TODO */ > +} > + > +static bool multifd_channel_connect(MultiFDSendParams *p, > + QIOChannel *ioc, > + Error *error) > +{ > + MigrationState *s = p->s; > + > + if (!error) { > + if (s->parameters.tls_creds && > + *s->parameters.tls_creds && > + !object_dynamic_cast(OBJECT(ioc), > + TYPE_QIO_CHANNEL_TLS)) { > + multifd_tls_channel_connect(p, ioc, &error); > + if (!error) { > + /* > + * tls_channel_connect will call back to this > + * function after the TLS handshake, > + * so we mustn't call multifd_send_thread until then > + */ > + return false; > + } else { > + return true; > + } > + } else { > + /* update for tls qio channel */ > + p->c = ioc; > + qemu_thread_create(&p->thread, p->name, multifd_send_thread, p, > + QEMU_THREAD_JOINABLE); > + } > + return false; > + } > + > + return true; > +} > + > static void multifd_new_send_channel_cleanup(MultiFDSendParams *p, > QIOChannel *ioc, Error *err) > { > @@ -749,8 +791,9 @@ static void multifd_new_send_channel_async(QIOTask *task, > gpointer opaque) > p->c = QIO_CHANNEL(sioc); > qio_channel_set_delay(p->c, false); > p->running = true; > - qemu_thread_create(&p->thread, p->name, multifd_send_thread, p, > - QEMU_THREAD_JOINABLE); > + if (multifd_channel_connect(p, sioc, local_err)) { > + goto cleanup; > + } > return; > }
If this is squashed with the following patch then Reviewed-by: Daniel P. Berrangé <berra...@redhat.com> Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|