[CRIU] [PATCH] c-lib: added set_page_server_address_port

martin.wuehrer at artech.at martin.wuehrer at artech.at
Wed Jan 30 12:34:45 MSK 2019


From: Martin Wührer <martin.wuehrer at artech.at>

According to https://criu.org/API_compliance, the C-library
doesn't support the pageserver option.
This patch contains the functions
`criu_(local_)set_page_server_address_port()`
that allow to specify on which ip and tcp-port the pageserver
is listening.

This patch affects only the c-lib, as criu-rpc already supports the
pageserver settings.

Signed-off-by: Martin Wührer <martin.wuehrer at artech.at>
---
 lib/c/criu.c | 31 +++++++++++++++++++++++++++++++
 lib/c/criu.h |  2 ++
 2 files changed, 33 insertions(+)

diff --git a/lib/c/criu.c b/lib/c/criu.c
index 11dc6e84..6d299835 100644
--- a/lib/c/criu.c
+++ b/lib/c/criu.c
@@ -193,6 +193,11 @@ void criu_local_free_opts(criu_opts *opts)
 	}
 	opts->rpc->n_external = 0;
 
+	if(opts->rpc->ps) {
+		free(opts->rpc->ps->address);
+		free(opts->rpc->ps);
+	}
+
 	free(opts->rpc->cgroup_props_file);
 	free(opts->rpc->cgroup_props);
 	free(opts->rpc->parent_img);
@@ -1018,6 +1023,32 @@ int criu_add_external(char *key)
 	return criu_local_add_external(global_opts, key);
 }
 
+int criu_local_set_page_server_address_port(criu_opts *opts, const char *address, int port)
+{
+	opts->rpc->ps = malloc(sizeof(CriuPageServerInfo));
+	if (opts->rpc->ps) {
+		criu_page_server_info__init(opts->rpc->ps);
+
+		opts->rpc->ps->address = strdup(address);
+		if (!opts->rpc->ps->address) {
+			free(opts->rpc->ps);
+			opts->rpc->ps = NULL;
+			goto out;
+		}
+
+		opts->rpc->ps->has_port = true;
+		opts->rpc->ps->port = port;
+	}
+
+out:
+	return -ENOMEM;
+}
+
+int criu_set_page_server_address_port(const char *address, int port)
+{
+	return criu_local_set_page_server_address_port(global_opts, address, port);
+}
+
 static CriuResp *recv_resp(int socket_fd)
 {
 	unsigned char *buf = NULL;
diff --git a/lib/c/criu.h b/lib/c/criu.h
index 8acd342a..ceb30353 100644
--- a/lib/c/criu.h
+++ b/lib/c/criu.h
@@ -97,6 +97,7 @@ void criu_set_ghost_limit(unsigned int limit);
 int criu_add_irmap_path(char *path);
 int criu_add_inherit_fd(int fd, char *key);
 int criu_add_external(char *key);
+int criu_set_page_server_address_port(const char *address, int port);
 
 /*
  * The criu_notify_arg_t na argument is an opaque
@@ -211,6 +212,7 @@ int criu_local_add_cg_props_file(criu_opts *opts, char *path);
 int criu_local_add_cg_dump_controller(criu_opts *opts, char *name);
 int criu_local_add_inherit_fd(criu_opts *opts, int fd, char *key);
 int criu_local_add_external(criu_opts *opts, char *key);
+int criu_local_set_page_server_address_port(criu_opts *opts, const char *address, int port);
 
 void criu_local_set_notify_cb(criu_opts *opts, int (*cb)(char *action, criu_notify_arg_t na));
 
-- 
2.20.1



More information about the CRIU mailing list