Signed-off-by: Fabiano Rosas <[email protected]>
---
migration/file.c | 2 +-
migration/file.h | 1 +
migration/migration.c | 6 ++++++
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/migration/file.c b/migration/file.c
index cf5b1bf365..ec069ef329 100644
--- a/migration/file.c
+++ b/migration/file.c
@@ -19,7 +19,7 @@
/* Remove the offset option from @filespec and return it in @offsetp. */
-static int file_parse_offset(char *filespec, uint64_t *offsetp, Error **errp)
+int file_parse_offset(char *filespec, uint64_t *offsetp, Error **errp)
{
char *option = strstr(filespec, OFFSET_OPTION);
int ret;
diff --git a/migration/file.h b/migration/file.h
index 90fa4849e0..3888a57105 100644
--- a/migration/file.h
+++ b/migration/file.h
@@ -11,4 +11,5 @@ void file_start_incoming_migration(const char *filename,
Error **errp);
void file_start_outgoing_migration(MigrationState *s, const char *filename,
Error **errp);
+int file_parse_offset(char *filespec, uint64_t *offsetp, Error **errp);
#endif
diff --git a/migration/migration.c b/migration/migration.c
index c1108f409c..e3608d7f60 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -465,6 +465,12 @@ static bool migrate_uri_parse(const char *uri,
}
addr->u.socket.type = saddr->type;
addr->u.socket.u = saddr->u;
+ } else if (strstart(uri, "file:", NULL)) {
+ addr->transport = MIGRATION_ADDRESS_TYPE_FILE;
+ addr->u.file.path = g_strdup(uri + strlen("file:"));
+ if (file_parse_offset(addr->u.file.path, &addr->u.file.offset, errp)) {
+ return false;
+ }
} else {
error_setg(errp, "unknown migration protocol: %s", uri);
return false;
--
2.35.3