Message ID | 1599663177-53993-6-git-send-email-zhengchuan@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | *** Add Multifd support for TLS migration *** | expand |
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 <zhengchuan@huawei.com> > Signed-off-by: Yan Jin <jinyan12@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é <berrange@redhat.com> Regards, Daniel
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; }