]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
start, namespace: move ns_info to namespace.{c,h}
authorChristian Brauner <christian.brauner@canonical.com>
Mon, 31 Oct 2016 14:54:42 +0000 (15:54 +0100)
committerChristian Brauner <christian.brauner@canonical.com>
Sat, 19 Nov 2016 04:11:41 +0000 (05:11 +0100)
It's much more appropriate there and makes start.{c,h} cleaner and leaner.

Signed-off-by: Christian Brauner <christian.brauner@canonical.com>
src/lxc/namespace.c
src/lxc/namespace.h
src/lxc/start.c
src/lxc/start.h

index 19b6593fd223cc5202086f9e6232c1119f9a63ce..bb76f4c90364390353425f61fc92d485f3291d10 100644 (file)
@@ -64,29 +64,29 @@ pid_t lxc_clone(int (*fn)(void *), void *arg, int flags)
        ret = clone(do_clone, stack  + stack_size, flags | SIGCHLD, &clone_arg);
 #endif
        if (ret < 0)
-               ERROR("failed to clone (%#x): %s", flags, strerror(errno));
+               ERROR("Failed to clone (%#x): %s.", flags, strerror(errno));
 
        return ret;
 }
 
-static const char * const namespaces_list[] = {
-       "MOUNT", "PID", "UTSNAME", "IPC",
-       "USER", "NETWORK"
-};
-static const int cloneflags_list[] = {
-       CLONE_NEWNS, CLONE_NEWPID, CLONE_NEWUTS, CLONE_NEWIPC,
-       CLONE_NEWUSER, CLONE_NEWNET
+const struct ns_info ns_info[LXC_NS_MAX] = {
+       [LXC_NS_MNT] = {"mnt", CLONE_NEWNS, "CLONE_NEWNS"},
+       [LXC_NS_PID] = {"pid", CLONE_NEWPID, "CLONE_NEWPID"},
+       [LXC_NS_UTS] = {"uts", CLONE_NEWUTS, "CLONE_NEWUTS"},
+       [LXC_NS_IPC] = {"ipc", CLONE_NEWIPC, "CLONE_NEWIPC"},
+       [LXC_NS_USER] = {"user", CLONE_NEWUSER, "CLONE_NEWUSER"},
+       [LXC_NS_NET] = {"net", CLONE_NEWNET, "CLONE_NEWNET"},
+       [LXC_NS_CGROUP] = {"cgroup", CLONE_NEWCGROUP, "CLONE_NEWCGROUP"}
 };
 
 int lxc_namespace_2_cloneflag(char *namespace)
 {
-       int i, len;
-       len = sizeof(namespaces_list)/sizeof(namespaces_list[0]);
-       for (i = 0; i < len; i++)
-               if (!strcmp(namespaces_list[i], namespace))
-                       return cloneflags_list[i];
+       int i;
+       for (i = 0; i < LXC_NS_MAX; i++)
+               if (!strcasecmp(ns_info[i].proc_name, namespace))
+                       return ns_info[i].clone_flag;
 
-       ERROR("invalid namespace name %s", namespace);
+       ERROR("Invalid namespace name: %s.", namespace);
        return -1;
 }
 
@@ -96,7 +96,7 @@ int lxc_fill_namespace_flags(char *flaglist, int *flags)
        int aflag;
 
        if (!flaglist) {
-               ERROR("need at least one namespace to unshare");
+               ERROR("At least one namespace is needed.");
                return -1;
        }
 
index 027c765889f29d771820d4a2de70372523a02d42..57167f4d045300ad0e590d9d8e7700c9af910541 100644 (file)
 #  define CLONE_NEWNET            0x40000000
 #endif
 
+enum {
+       LXC_NS_MNT,
+       LXC_NS_PID,
+       LXC_NS_UTS,
+       LXC_NS_IPC,
+       LXC_NS_USER,
+       LXC_NS_NET,
+       LXC_NS_CGROUP,
+       LXC_NS_MAX
+};
+
+extern const struct ns_info {
+       const char *proc_name;
+       int clone_flag;
+       const char *flag_name;
+} ns_info[LXC_NS_MAX];
+
 #if defined(__ia64__)
 int __clone2(int (*__fn) (void *__arg), void *__child_stack_base,
              size_t __child_stack_size, int __flags, void *__arg, ...);
@@ -62,7 +79,6 @@ int clone(int (*fn)(void *), void *child_stack,
        /* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ );
 #endif
 
-
 extern pid_t lxc_clone(int (*fn)(void *), void *arg, int flags);
 
 extern int lxc_namespace_2_cloneflag(char *namespace);
index bac9be2f36c9ef2e0f110789ecbc2f30e1033391..f36653dff9e4ba6cd681edbc551aa6735c21137d 100644 (file)
 
 lxc_log_define(lxc_start, lxc);
 
-const struct ns_info ns_info[LXC_NS_MAX] = {
-       [LXC_NS_MNT] = {"mnt", CLONE_NEWNS},
-       [LXC_NS_PID] = {"pid", CLONE_NEWPID},
-       [LXC_NS_UTS] = {"uts", CLONE_NEWUTS},
-       [LXC_NS_IPC] = {"ipc", CLONE_NEWIPC},
-       [LXC_NS_USER] = {"user", CLONE_NEWUSER},
-       [LXC_NS_NET] = {"net", CLONE_NEWNET},
-       [LXC_NS_CGROUP] = {"cgroup", CLONE_NEWCGROUP}
-};
-
 extern void mod_all_rdeps(struct lxc_container *c, bool inc);
 static bool do_destroy_container(struct lxc_conf *conf);
 static int lxc_rmdir_onedev_wrapper(void *data);
@@ -1173,7 +1163,9 @@ static int lxc_spawn(struct lxc_handler *handler)
                SYSERROR("Failed to clone a new set of namespaces.");
                goto out_delete_net;
        }
-       INFO("Cloned a set of new namespaces.");
+       for (i = 0; i < LXC_NS_MAX; i++)
+               if (flags & ns_info[i].clone_flag)
+                       INFO("Cloned %s.", ns_info[i].flag_name);
 
        if (!preserve_ns(handler->nsfd, handler->clone_flags | preserve_mask, handler->pid))
                INFO("Failed to preserve namespace for lxc.hook.stop.");
index 65d553bfeb4deb39bb0ac2ec9c228fba601d876f..3bae8788ccf91e9a517b0297167d6055ed974866 100644 (file)
@@ -42,24 +42,6 @@ struct lxc_operations {
 
 struct cgroup_desc;
 
-enum {
-       LXC_NS_MNT,
-       LXC_NS_PID,
-       LXC_NS_UTS,
-       LXC_NS_IPC,
-       LXC_NS_USER,
-       LXC_NS_NET,
-       LXC_NS_CGROUP,
-       LXC_NS_MAX
-};
-
-struct ns_info {
-       const char *proc_name;
-       int clone_flag;
-};
-
-extern const struct ns_info ns_info[LXC_NS_MAX];
-
 struct lxc_handler {
        pid_t pid;
        char *name;