1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3 
4 #include "missing_sched.h"
5 
6 /* The combination of all namespace flags defined by the kernel. The right type for this isn't clear. setns() and
7  * unshare() expect these flags to be passed as (signed) "int", while clone() wants them as "unsigned long". The latter
8  * is definitely more appropriate for a flags parameter, and also the larger type of the two, hence let's stick to that
9  * here. */
10 #define NAMESPACE_FLAGS_ALL                                             \
11         ((unsigned long) (CLONE_NEWCGROUP|                              \
12                           CLONE_NEWIPC|                                 \
13                           CLONE_NEWNET|                                 \
14                           CLONE_NEWNS|                                  \
15                           CLONE_NEWPID|                                 \
16                           CLONE_NEWUSER|                                \
17                           CLONE_NEWUTS))
18 
19 #define NAMESPACE_FLAGS_INITIAL  ULONG_MAX
20 
21 int namespace_flags_from_string(const char *name, unsigned long *ret);
22 int namespace_flags_to_string(unsigned long flags, char **ret);
23 const char *namespace_single_flag_to_string(unsigned long flag);
24 
25 struct namespace_flag_map {
26         unsigned long flag;
27         const char *name;
28 };
29 
30 extern const struct namespace_flag_map namespace_flag_map[];
31