migration: unify the framework of socket-type channel
Currently, the only difference of tcp channel and unix channel in migration/socket.c is the way to build SocketAddress, but socket_parse() can handle these two types, so use it to instead of tcp_build_address() and unix_build_address(). The socket-type channel can be further unified based on the up, this would be helpful for us to add other socket-type channels. Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com> Message-Id: <20200806074030.174-2-longpeng2@huawei.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
3e39dac035
commit
d658f65c16
@ -378,21 +378,20 @@ void migrate_add_address(SocketAddress *address)
|
||||
|
||||
void qemu_start_incoming_migration(const char *uri, Error **errp)
|
||||
{
|
||||
const char *p;
|
||||
const char *p = NULL;
|
||||
|
||||
qapi_event_send_migration(MIGRATION_STATUS_SETUP);
|
||||
if (!strcmp(uri, "defer")) {
|
||||
deferred_incoming_migration(errp);
|
||||
} else if (strstart(uri, "tcp:", &p)) {
|
||||
tcp_start_incoming_migration(p, errp);
|
||||
} else if (strstart(uri, "tcp:", &p) ||
|
||||
strstart(uri, "unix:", NULL)) {
|
||||
socket_start_incoming_migration(p ? p : uri, errp);
|
||||
#ifdef CONFIG_RDMA
|
||||
} else if (strstart(uri, "rdma:", &p)) {
|
||||
rdma_start_incoming_migration(p, errp);
|
||||
#endif
|
||||
} else if (strstart(uri, "exec:", &p)) {
|
||||
exec_start_incoming_migration(p, errp);
|
||||
} else if (strstart(uri, "unix:", &p)) {
|
||||
unix_start_incoming_migration(p, errp);
|
||||
} else if (strstart(uri, "fd:", &p)) {
|
||||
fd_start_incoming_migration(p, errp);
|
||||
} else {
|
||||
@ -2094,7 +2093,7 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
|
||||
{
|
||||
Error *local_err = NULL;
|
||||
MigrationState *s = migrate_get_current();
|
||||
const char *p;
|
||||
const char *p = NULL;
|
||||
|
||||
if (!migrate_prepare(s, has_blk && blk, has_inc && inc,
|
||||
has_resume && resume, errp)) {
|
||||
@ -2102,16 +2101,15 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
|
||||
return;
|
||||
}
|
||||
|
||||
if (strstart(uri, "tcp:", &p)) {
|
||||
tcp_start_outgoing_migration(s, p, &local_err);
|
||||
if (strstart(uri, "tcp:", &p) ||
|
||||
strstart(uri, "unix:", NULL)) {
|
||||
socket_start_outgoing_migration(s, p ? p : uri, &local_err);
|
||||
#ifdef CONFIG_RDMA
|
||||
} else if (strstart(uri, "rdma:", &p)) {
|
||||
rdma_start_outgoing_migration(s, p, &local_err);
|
||||
#endif
|
||||
} else if (strstart(uri, "exec:", &p)) {
|
||||
exec_start_outgoing_migration(s, p, &local_err);
|
||||
} else if (strstart(uri, "unix:", &p)) {
|
||||
unix_start_outgoing_migration(s, p, &local_err);
|
||||
} else if (strstart(uri, "fd:", &p)) {
|
||||
fd_start_outgoing_migration(s, p, &local_err);
|
||||
} else {
|
||||
|
@ -50,34 +50,6 @@ int socket_send_channel_destroy(QIOChannel *send)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SocketAddress *tcp_build_address(const char *host_port, Error **errp)
|
||||
{
|
||||
SocketAddress *saddr;
|
||||
|
||||
saddr = g_new0(SocketAddress, 1);
|
||||
saddr->type = SOCKET_ADDRESS_TYPE_INET;
|
||||
|
||||
if (inet_parse(&saddr->u.inet, host_port, errp)) {
|
||||
qapi_free_SocketAddress(saddr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return saddr;
|
||||
}
|
||||
|
||||
|
||||
static SocketAddress *unix_build_address(const char *path)
|
||||
{
|
||||
SocketAddress *saddr;
|
||||
|
||||
saddr = g_new0(SocketAddress, 1);
|
||||
saddr->type = SOCKET_ADDRESS_TYPE_UNIX;
|
||||
saddr->u.q_unix.path = g_strdup(path);
|
||||
|
||||
return saddr;
|
||||
}
|
||||
|
||||
|
||||
struct SocketConnectData {
|
||||
MigrationState *s;
|
||||
char *hostname;
|
||||
@ -109,7 +81,8 @@ static void socket_outgoing_migration(QIOTask *task,
|
||||
object_unref(OBJECT(sioc));
|
||||
}
|
||||
|
||||
static void socket_start_outgoing_migration(MigrationState *s,
|
||||
static void
|
||||
socket_start_outgoing_migration_internal(MigrationState *s,
|
||||
SocketAddress *saddr,
|
||||
Error **errp)
|
||||
{
|
||||
@ -135,27 +108,18 @@ static void socket_start_outgoing_migration(MigrationState *s,
|
||||
NULL);
|
||||
}
|
||||
|
||||
void tcp_start_outgoing_migration(MigrationState *s,
|
||||
const char *host_port,
|
||||
void socket_start_outgoing_migration(MigrationState *s,
|
||||
const char *str,
|
||||
Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
SocketAddress *saddr = tcp_build_address(host_port, &err);
|
||||
SocketAddress *saddr = socket_parse(str, &err);
|
||||
if (!err) {
|
||||
socket_start_outgoing_migration(s, saddr, &err);
|
||||
socket_start_outgoing_migration_internal(s, saddr, &err);
|
||||
}
|
||||
error_propagate(errp, err);
|
||||
}
|
||||
|
||||
void unix_start_outgoing_migration(MigrationState *s,
|
||||
const char *path,
|
||||
Error **errp)
|
||||
{
|
||||
SocketAddress *saddr = unix_build_address(path);
|
||||
socket_start_outgoing_migration(s, saddr, errp);
|
||||
}
|
||||
|
||||
|
||||
static void socket_accept_incoming_migration(QIONetListener *listener,
|
||||
QIOChannelSocket *cioc,
|
||||
gpointer opaque)
|
||||
@ -173,7 +137,8 @@ static void socket_accept_incoming_migration(QIONetListener *listener,
|
||||
}
|
||||
|
||||
|
||||
static void socket_start_incoming_migration(SocketAddress *saddr,
|
||||
static void
|
||||
socket_start_incoming_migration_internal(SocketAddress *saddr,
|
||||
Error **errp)
|
||||
{
|
||||
QIONetListener *listener = qio_net_listener_new();
|
||||
@ -207,20 +172,13 @@ static void socket_start_incoming_migration(SocketAddress *saddr,
|
||||
}
|
||||
}
|
||||
|
||||
void tcp_start_incoming_migration(const char *host_port, Error **errp)
|
||||
void socket_start_incoming_migration(const char *str, Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
SocketAddress *saddr = tcp_build_address(host_port, &err);
|
||||
SocketAddress *saddr = socket_parse(str, &err);
|
||||
if (!err) {
|
||||
socket_start_incoming_migration(saddr, &err);
|
||||
socket_start_incoming_migration_internal(saddr, &err);
|
||||
}
|
||||
qapi_free_SocketAddress(saddr);
|
||||
error_propagate(errp, err);
|
||||
}
|
||||
|
||||
void unix_start_incoming_migration(const char *path, Error **errp)
|
||||
{
|
||||
SocketAddress *saddr = unix_build_address(path);
|
||||
socket_start_incoming_migration(saddr, errp);
|
||||
qapi_free_SocketAddress(saddr);
|
||||
}
|
||||
|
@ -23,13 +23,8 @@
|
||||
void socket_send_channel_create(QIOTaskFunc f, void *data);
|
||||
int socket_send_channel_destroy(QIOChannel *send);
|
||||
|
||||
void tcp_start_incoming_migration(const char *host_port, Error **errp);
|
||||
void socket_start_incoming_migration(const char *str, Error **errp);
|
||||
|
||||
void tcp_start_outgoing_migration(MigrationState *s, const char *host_port,
|
||||
Error **errp);
|
||||
|
||||
void unix_start_incoming_migration(const char *path, Error **errp);
|
||||
|
||||
void unix_start_outgoing_migration(MigrationState *s, const char *path,
|
||||
void socket_start_outgoing_migration(MigrationState *s, const char *str,
|
||||
Error **errp);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user