]>
git.proxmox.com Git - mirror_lxc.git/blob - src/lxc/start.h
2 * lxc: linux Container library
4 * (C) Copyright IBM Corp. 2007, 2008
7 * Daniel Lezcano <daniel.lezcano at free.fr>
8 * Serge Hallyn <serge@hallyn.com>
9 * Christian Brauner <christian.brauner@ubuntu.com>
11 * This library is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
16 * This library is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with this library; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30 #include <sys/param.h>
31 #include <sys/socket.h>
36 #include "namespace.h"
40 /* Record the clone for namespaces flags that the container requested.
43 * - All clone flags that were requested.
46 * - The clone flags for namespaces to actually use when calling
47 * lxc_clone(): After the container has started ns_on_clone_flags will
48 * list the clone flags that were unshare()ed rather then clone()ed
49 * because of ordering requirements (e.g. e.g. CLONE_NEWNET and
50 * CLONE_NEWUSER) or implementation details.
53 * - The clone flags for the namespaces that the container will inherit
54 * from the parent. They are not recorded in the handler itself but
55 * are present in the container's config.
58 * - The clone flags for the namespaces that the container will share
59 * with another process. They are not recorded in the handler itself
60 * but are present in the container's config.
64 int ns_on_clone_flags
;
67 /* File descriptor to pin the rootfs for privileged containers. */
70 /* Signal file descriptor. */
73 /* List of file descriptors referring to the namespaces of the
74 * container. Note that these are not necessarily identical to
75 * the "clone_flags" handler field in case namespace inheritance is
80 /* Abstract unix domain SOCK_DGRAM socketpair to pass arbitrary data
81 * between child and parent.
85 /* The socketpair() fds used to wait on successful daemonized startup. */
86 int state_socket_pair
[2];
88 /* Socketpair to synchronize processes during container creation. */
91 /* Pointer to the name of the container. Do not free! */
94 /* Pointer to the path the container. Do not free! */
97 /* Whether the container's startup process euid is 0. */
100 /* Indicates whether should we close std{in,out,err} on start. */
103 /* The child's pid. */
106 /* Whether the child has already exited. */
109 /* The signal mask prior to setting up the signal file descriptor. */
112 /* The container's in-memory configuration. */
113 struct lxc_conf
*conf
;
115 /* A set of operations to be performed at various stages of the
118 struct lxc_operations
*ops
;
120 /* This holds the cgroup information. Note that the data here is
121 * specific to the cgroup driver used.
125 /* Data to be passed to handler ops. */
128 /* Current state of the container. */
131 /* The exit status of the container; not defined unless ->init_died ==
137 struct execute_args
{
143 struct lxc_operations
{
144 int (*start
)(struct lxc_handler
*, void *);
145 int (*post_start
)(struct lxc_handler
*, void *);
148 extern int lxc_poll(const char *name
, struct lxc_handler
*handler
);
149 extern int lxc_set_state(const char *name
, struct lxc_handler
*handler
,
151 extern int lxc_serve_state_clients(const char *name
,
152 struct lxc_handler
*handler
,
154 extern void lxc_abort(const char *name
, struct lxc_handler
*handler
);
155 extern struct lxc_handler
*lxc_init_handler(const char *name
,
156 struct lxc_conf
*conf
,
159 extern void lxc_zero_handler(struct lxc_handler
*handler
);
160 extern void lxc_free_handler(struct lxc_handler
*handler
);
161 extern int lxc_init(const char *name
, struct lxc_handler
*handler
);
162 extern void lxc_fini(const char *name
, struct lxc_handler
*handler
);
164 /* lxc_check_inherited: Check for any open file descriptors and close them if
166 * @param[in] conf The container's configuration.
167 * @param[in] closeall Whether we should close all open file descriptors.
168 * @param[in] fds_to_ignore Array of file descriptors to ignore.
169 * @param[in] len_fds Length of fds_to_ignore array.
171 extern int lxc_check_inherited(struct lxc_conf
*conf
, bool closeall
,
172 int *fds_to_ignore
, size_t len_fds
);
173 extern int __lxc_start(const char *, struct lxc_handler
*,
174 struct lxc_operations
*, void *, const char *, bool,
177 extern int resolve_clone_flags(struct lxc_handler
*handler
);