1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 This file is part of systemd.
7 Copyright 2015 Lennart Poettering
15 #include "conf-parser.h"
17 #include "nspawn-expose-ports.h"
18 #include "nspawn-mount.h"
20 typedef enum StartMode
{
21 START_PID1
, /* Run parameters as command line as process 1 */
22 START_PID2
, /* Use stub init process as PID 1, run parameters as command line as process 2 */
23 START_BOOT
, /* Search for init system, pass arguments as parameters */
25 _START_MODE_INVALID
= -1
28 typedef enum UserNamespaceMode
{
32 _USER_NAMESPACE_MODE_MAX
,
33 _USER_NAMESPACE_MODE_INVALID
= -1,
36 typedef enum ResolvConfMode
{
38 RESOLV_CONF_COPY_HOST
,
39 RESOLV_CONF_COPY_STATIC
,
40 RESOLV_CONF_BIND_HOST
,
41 RESOLV_CONF_BIND_STATIC
,
44 _RESOLV_CONF_MODE_MAX
,
45 _RESOLV_CONF_MODE_INVALID
= -1
48 typedef enum SettingsMask
{
49 SETTING_START_MODE
= UINT64_C(1) << 0,
50 SETTING_ENVIRONMENT
= UINT64_C(1) << 1,
51 SETTING_USER
= UINT64_C(1) << 2,
52 SETTING_CAPABILITY
= UINT64_C(1) << 3,
53 SETTING_KILL_SIGNAL
= UINT64_C(1) << 4,
54 SETTING_PERSONALITY
= UINT64_C(1) << 5,
55 SETTING_MACHINE_ID
= UINT64_C(1) << 6,
56 SETTING_NETWORK
= UINT64_C(1) << 7,
57 SETTING_EXPOSE_PORTS
= UINT64_C(1) << 8,
58 SETTING_READ_ONLY
= UINT64_C(1) << 9,
59 SETTING_VOLATILE_MODE
= UINT64_C(1) << 10,
60 SETTING_CUSTOM_MOUNTS
= UINT64_C(1) << 11,
61 SETTING_WORKING_DIRECTORY
= UINT64_C(1) << 12,
62 SETTING_USERNS
= UINT64_C(1) << 13,
63 SETTING_NOTIFY_READY
= UINT64_C(1) << 14,
64 SETTING_PIVOT_ROOT
= UINT64_C(1) << 15,
65 SETTING_SYSCALL_FILTER
= UINT64_C(1) << 16,
66 SETTING_HOSTNAME
= UINT64_C(1) << 17,
67 SETTING_NO_NEW_PRIVILEGES
= UINT64_C(1) << 18,
68 SETTING_OOM_SCORE_ADJUST
= UINT64_C(1) << 19,
69 SETTING_CPU_AFFINITY
= UINT64_C(1) << 20,
70 SETTING_RESOLV_CONF
= UINT64_C(1) << 21,
71 SETTING_RLIMIT_FIRST
= UINT64_C(1) << 22, /* we define one bit per resource limit here */
72 SETTING_RLIMIT_LAST
= UINT64_C(1) << (22 + _RLIMIT_MAX
- 1),
73 _SETTINGS_MASK_ALL
= (UINT64_C(1) << (22 + _RLIMIT_MAX
)) - 1,
74 _FORCE_ENUM_WIDTH
= UINT64_MAX
77 /* We want to use SETTING_RLIMIT_FIRST in shifts, so make sure it is really 64 bits
78 * when used in expressions. */
79 #define SETTING_RLIMIT_FIRST ((uint64_t) SETTING_RLIMIT_FIRST)
80 #define SETTING_RLIMIT_LAST ((uint64_t) SETTING_RLIMIT_LAST)
82 assert_cc(sizeof(SettingsMask
) == 8);
83 assert_cc(sizeof(SETTING_RLIMIT_FIRST
) == 8);
84 assert_cc(sizeof(SETTING_RLIMIT_LAST
) == 8);
86 typedef struct Settings
{
93 uint64_t drop_capability
;
95 unsigned long personality
;
96 sd_id128_t machine_id
;
97 char *working_directory
;
100 UserNamespaceMode userns_mode
;
101 uid_t uid_shift
, uid_range
;
103 char **syscall_whitelist
;
104 char **syscall_blacklist
;
105 struct rlimit
*rlimit
[_RLIMIT_MAX
];
107 int no_new_privileges
;
108 int oom_score_adjust
;
109 bool oom_score_adjust_set
;
111 unsigned cpuset_ncpus
;
112 ResolvConfMode resolv_conf
;
116 VolatileMode volatile_mode
;
117 CustomMount
*custom_mounts
;
118 size_t n_custom_mounts
;
124 char *network_bridge
;
126 char **network_interfaces
;
127 char **network_macvlan
;
128 char **network_ipvlan
;
129 char **network_veth_extra
;
130 ExposePort
*expose_ports
;
133 int settings_load(FILE *f
, const char *path
, Settings
**ret
);
134 Settings
* settings_free(Settings
*s
);
136 bool settings_network_veth(Settings
*s
);
137 bool settings_private_network(Settings
*s
);
139 DEFINE_TRIVIAL_CLEANUP_FUNC(Settings
*, settings_free
);
141 const struct ConfigPerfItem
* nspawn_gperf_lookup(const char *key
, GPERF_LEN_TYPE length
);
143 CONFIG_PARSER_PROTOTYPE(config_parse_capability
);
144 CONFIG_PARSER_PROTOTYPE(config_parse_id128
);
145 CONFIG_PARSER_PROTOTYPE(config_parse_expose_port
);
146 CONFIG_PARSER_PROTOTYPE(config_parse_volatile_mode
);
147 CONFIG_PARSER_PROTOTYPE(config_parse_pivot_root
);
148 CONFIG_PARSER_PROTOTYPE(config_parse_bind
);
149 CONFIG_PARSER_PROTOTYPE(config_parse_tmpfs
);
150 CONFIG_PARSER_PROTOTYPE(config_parse_overlay
);
151 CONFIG_PARSER_PROTOTYPE(config_parse_veth_extra
);
152 CONFIG_PARSER_PROTOTYPE(config_parse_network_zone
);
153 CONFIG_PARSER_PROTOTYPE(config_parse_boot
);
154 CONFIG_PARSER_PROTOTYPE(config_parse_pid2
);
155 CONFIG_PARSER_PROTOTYPE(config_parse_private_users
);
156 CONFIG_PARSER_PROTOTYPE(config_parse_syscall_filter
);
157 CONFIG_PARSER_PROTOTYPE(config_parse_hostname
);
158 CONFIG_PARSER_PROTOTYPE(config_parse_oom_score_adjust
);
159 CONFIG_PARSER_PROTOTYPE(config_parse_cpu_affinity
);
160 CONFIG_PARSER_PROTOTYPE(config_parse_resolv_conf
);
162 const char *resolv_conf_mode_to_string(ResolvConfMode a
) _const_
;
163 ResolvConfMode
resolv_conf_mode_from_string(const char *s
) _pure_
;