From f4ce0a7c08263adc81f78e1b447adca83297d4fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20W=C3=BChrer?= Date: Wed, 30 Jan 2019 10:34:45 +0100 Subject: [PATCH] c-lib: added set_page_server_address_port MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Andrei Vagin --- 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 11dc6e846..6d299835d 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 8acd342ab..ceb303538 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));