mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-18 09:05:10 +00:00
Known issue: * currently only namespaces with the same root is supported * nested namespaces can be dumped and restored only if the root task has own mount namespace. All nested namespaces are restored in a root namespace in temporary directories. All mount points restored in one tree and then they are divided into namesaces. The task with minimal pid for each namespaces unshared mntns and then it makes pivot_root in a proper temporary directory. All other tasks makes setns to enter into a mount namespace of the task with minimal pid. v2: clean up Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
#ifndef __CR_NS_H__
|
|
#define __CR_NS_H__
|
|
|
|
#include "files.h"
|
|
|
|
struct ns_desc {
|
|
unsigned int cflag;
|
|
char *str;
|
|
size_t len;
|
|
};
|
|
|
|
struct ns_id {
|
|
unsigned int kid;
|
|
unsigned int id;
|
|
pid_t pid;
|
|
struct ns_desc *nd;
|
|
struct ns_id *next;
|
|
futex_t created; /* boolean */
|
|
};
|
|
extern struct ns_id *ns_ids;
|
|
|
|
#define NS_DESC_ENTRY(_cflag, _str) \
|
|
{ \
|
|
.cflag = _cflag, \
|
|
.str = _str, \
|
|
.len = sizeof(_str) - 1, \
|
|
}
|
|
|
|
extern bool check_ns_proc(struct fd_link *link);
|
|
|
|
extern struct ns_desc pid_ns_desc;
|
|
extern struct ns_desc user_ns_desc;
|
|
extern unsigned long current_ns_mask;
|
|
|
|
extern const struct fdtype_ops nsfile_dump_ops;
|
|
extern struct collect_image_info nsfile_cinfo;
|
|
|
|
extern int dump_namespaces(struct pstree_item *item, unsigned int ns_flags);
|
|
extern int prepare_namespace(struct pstree_item *item, unsigned long clone_flags);
|
|
extern int try_show_namespaces(int pid);
|
|
|
|
extern int switch_ns(int pid, struct ns_desc *nd, int *rst);
|
|
extern int restore_ns(int rst, struct ns_desc *nd);
|
|
|
|
extern int dump_task_ns_ids(struct pstree_item *);
|
|
extern int rst_add_ns_id(unsigned int id, pid_t pid, struct ns_desc *nd);
|
|
extern struct ns_id *lookup_ns_by_id(unsigned int id, struct ns_desc *nd);
|
|
|
|
extern int gen_predump_ns_mask(void);
|
|
|
|
#endif /* __CR_NS_H__ */
|