[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