[CRIU] [PATCH 2/6] lib: Add support for setting new namespace flags via libcriu

Tycho Andersen tycho.andersen at canonical.com
Mon Aug 4 07:04:49 PDT 2014


On Mon, Aug 04, 2014 at 05:45:30PM +0400, Pavel Emelyanov wrote:
> On 08/04/2014 05:15 PM, Tycho Andersen wrote:
> > Hi Pavel,
> > 
> > On Mon, Aug 04, 2014 at 01:56:16PM +0400, Pavel Emelyanov wrote:
> >> On 07/29/2014 09:06 PM, Tycho Andersen wrote:
> >>
> >> Actually, right now --namespaces option is obsoleted. We used to have one
> >> before we had /proc/pid/ns/* files being links with IDs exported into the
> >> userspace. Right now criu can get the per-process nsmask on dump out of
> >> /proc and get one on restore out of the images.
> >>
> >> Do you need the --namespaces mask for something special?
> > 
> > I don't know, http://www.criu.org/LXC says pass -n, so that is what I
> > was doing :). 
> 
> Ah... The page worth being updated :) Andrey?
> 
> > Is there a better way to do this?
> 
> Just don't use the option -- criu currently detects all the namespace
> it needs itself.

Great, thanks! In that case, this patch can be ignored too.

Tycho

> > Tycho
> > 
> >> Thanks,
> >> Pavel
> >>
> >>> Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> >>> ---
> >>>  cr-service.c       | 3 +++
> >>>  lib/criu.c         | 6 ++++++
> >>>  lib/criu.h         | 2 ++
> >>>  protobuf/rpc.proto | 1 +
> >>>  4 files changed, 12 insertions(+)
> >>>
> >>> diff --git a/cr-service.c b/cr-service.c
> >>> index 11e9778..2041ed8 100644
> >>> --- a/cr-service.c
> >>> +++ b/cr-service.c
> >>> @@ -266,6 +266,9 @@ static int setup_opts_from_req(int sk, CriuOpts *req)
> >>>  	if (req->has_force_irmap)
> >>>  		opts.force_irmap = req->force_irmap;
> >>>  
> >>> +	if (req->has_ns_flags)
> >>> +		opts.rst_namespaces_flags = req->ns_flags;
> >>> +
> >>>  	if (req->n_exec_cmd > 0) {
> >>>  		opts.exec_cmd = xmalloc((req->n_exec_cmd + 1) * sizeof(char *));
> >>>  		memcpy(opts.exec_cmd, req->exec_cmd, req->n_exec_cmd * sizeof(char *));
> >>> diff --git a/lib/criu.c b/lib/criu.c
> >>> index 9d84c83..dbf35cd 100644
> >>> --- a/lib/criu.c
> >>> +++ b/lib/criu.c
> >>> @@ -163,6 +163,12 @@ void criu_set_cpu_cap(unsigned int cap)
> >>>  	opts->cpu_cap		= cap;
> >>>  }
> >>>  
> >>> +void criu_set_ns_flags(uint32_t flags)
> >>> +{
> >>> +	opts->has_ns_flags	= true;
> >>> +	opts->ns_flags		= flags;
> >>> +}
> >>> +
> >>>  int criu_set_exec_cmd(int argc, char *argv[])
> >>>  {
> >>>  	int i;
> >>> diff --git a/lib/criu.h b/lib/criu.h
> >>> index 5ab09c3..593aae3 100644
> >>> --- a/lib/criu.h
> >>> +++ b/lib/criu.h
> >>> @@ -20,6 +20,7 @@
> >>>  #define __CRIU_LIB_H__
> >>>  
> >>>  #include <stdbool.h>
> >>> +#include <inttypes.h>
> >>>  
> >>>  void criu_set_service_address(char *path);
> >>>  
> >>> @@ -47,6 +48,7 @@ void criu_set_log_level(int log_level);
> >>>  void criu_set_log_file(char *log_file);
> >>>  void criu_set_cpu_cap(unsigned int cap);
> >>>  void criu_set_root(char *root);
> >>> +void criu_set_ns_flags(uint32_t flags);
> >>>  int criu_add_action_script(char *script);
> >>>  int criu_set_exec_cmd(int argc, char *argv[]);
> >>>  int criu_add_ext_mount(char *key, char *val);
> >>> diff --git a/protobuf/rpc.proto b/protobuf/rpc.proto
> >>> index 1604f37..410b159 100644
> >>> --- a/protobuf/rpc.proto
> >>> +++ b/protobuf/rpc.proto
> >>> @@ -47,6 +47,7 @@ message criu_opts {
> >>>  	repeated ext_mount_map		ext_mnt		= 23;
> >>>  
> >>>  	repeated string			action_scripts	= 24;
> >>> +	optional uint32			ns_flags	= 25;
> >>>  }
> >>>  
> >>>  message criu_dump_resp {
> >>>
> >>
> > .
> > 
> 


More information about the CRIU mailing list