5 * Copyright © 2012 Serge Hallyn <serge.hallyn@ubuntu.com>.
6 * Copyright © 2012 Canonical Ltd.
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 #ifndef __LXC_CONTAINER_H
24 #define __LXC_CONTAINER_H
27 #include <semaphore.h>
32 #include <lxc/attach_options.h>
38 #define LXC_CLONE_KEEPNAME (1 << 0) /*!< Do not edit the rootfs to change the hostname */
39 #define LXC_CLONE_KEEPMACADDR (1 << 1) /*!< Do not change the MAC address on network interfaces */
40 #define LXC_CLONE_SNAPSHOT (1 << 2) /*!< Snapshot the original filesystem(s) */
41 #define LXC_CLONE_KEEPBDEVTYPE (1 << 3) /*!< Use the same bdev type */
42 #define LXC_CLONE_MAYBE_SNAPSHOT (1 << 4) /*!< Snapshot only if bdev supports it, else copy */
43 #define LXC_CLONE_MAXFLAGS (1 << 5) /*!< Number of \c LXC_CLONE_* flags */
44 #define LXC_CLONE_ALLOW_RUNNING (1 << 6) /*!< allow snapshot creation even if source container is running */
45 #define LXC_CREATE_QUIET (1 << 0) /*!< Redirect \c stdin to \c /dev/zero and \c stdout and \c stderr to \c /dev/null */
46 #define LXC_CREATE_MAXFLAGS (1 << 1) /*!< Number of \c LXC_CREATE* flags */
47 #define LXC_MOUNT_API_V1 1
57 struct lxc_console_log
;
66 * Note that changing the order of struct members is an API change, as callers
67 * will end up having the wrong offset when calling a function. So when making
68 * changes, whenever possible stick to simply appending new members.
70 struct lxc_container
{
80 * Full path to configuration file.
92 * Container semaphore lock.
94 struct lxc_lock
*slock
;
98 * Container private lock.
100 struct lxc_lock
*privlock
;
104 * Number of references to this container.
105 * \note protected by privlock.
111 * Container configuration.
113 * \internal FIXME: do we want the whole lxc_handler?
115 struct lxc_conf
*lxc_conf
;
118 /*! Human-readable string representing last error */
121 /*! Last error number */
124 /*! Whether container wishes to be daemonized */
127 /*! Full path to configuration file */
131 * \brief Determine if \c /var/lib/lxc/$name/config exists.
133 * \param c Container.
135 * \return \c true if container is defined, else \c false.
137 bool (*is_defined
)(struct lxc_container
*c
);
140 * \brief Determine state of container.
142 * \param c Container.
144 * \return Static upper-case string representing state of container.
146 * \note Returned string must not be freed.
148 const char *(*state
)(struct lxc_container
*c
);
151 * \brief Determine if container is running.
153 * \param c Container.
155 * \return \c true on success, else \c false.
157 bool (*is_running
)(struct lxc_container
*c
);
160 * \brief Freeze running container.
162 * \param c Container.
164 * \return \c true on success, else \c false.
166 bool (*freeze
)(struct lxc_container
*c
);
169 * \brief Thaw a frozen container.
171 * \param c Container.
173 * \return \c true on success, else \c false.
175 bool (*unfreeze
)(struct lxc_container
*c
);
178 * \brief Determine process ID of the containers init process.
180 * \param c Container.
182 * \return pid of init process as seen from outside the
185 pid_t (*init_pid
)(struct lxc_container
*c
);
188 * \brief Load the specified configuration for the container.
190 * \param c Container.
191 * \param alt_file Full path to alternate configuration file, or
192 * \c NULL to use the default configuration file.
194 * \return \c true on success, else \c false.
196 bool (*load_config
)(struct lxc_container
*c
, const char *alt_file
);
199 * \brief Start the container.
201 * \param c Container.
202 * \param useinit Use lxcinit rather than \c /sbin/init.
203 * \param argv Array of arguments to pass to init.
205 * \return \c true on success, else \c false.
207 bool (*start
)(struct lxc_container
*c
, int useinit
, char * const argv
[]);
210 * \brief Start the container (list variant).
212 * \param c Container.
213 * \param useinit Use lxcinit rather than \c /sbin/init.
214 * \param ... Command-line to pass to init (must end in \c NULL).
216 * \return \c true on success, else \c false.
218 * \note Identical to \ref start except that that the init
219 * arguments are specified via a list rather than an array of
222 bool (*startl
)(struct lxc_container
*c
, int useinit
, ...);
225 * \brief Stop the container.
227 * \param c Container.
229 * \return \c true on success, else \c false.
231 bool (*stop
)(struct lxc_container
*c
);
234 * \brief Change whether the container wants to run disconnected
237 * \param c Container.
238 * \param state Value for the daemonize bit (0 or 1).
240 * \return \c true on success, else \c false.
242 bool (*want_daemonize
)(struct lxc_container
*c
, bool state
);
245 * \brief Change whether the container wishes all file descriptors
246 * to be closed on startup.
248 * \param c Container.
249 * \param state Value for the close_all_fds bit (0 or 1).
251 * \return \c true on success, else \c false.
253 bool (*want_close_all_fds
)(struct lxc_container
*c
, bool state
);
256 * \brief Return current config file name.
258 * \param c Container.
260 * \return config file name, or \c NULL on error.
262 * \note The result is allocated, so the caller must free the result.
264 char *(*config_file_name
)(struct lxc_container
*c
);
267 * \brief Wait for container to reach a particular state.
269 * \param c Container.
270 * \param state State to wait for.
271 * \param timeout Timeout in seconds.
273 * \return \c true if state reached within \p timeout, else \c false.
275 * \note A \p timeout of \c -1 means wait forever. A \p timeout
276 * of \c 0 means do not wait.
278 bool (*wait
)(struct lxc_container
*c
, const char *state
, int timeout
);
281 * \brief Set a key/value configuration option.
283 * \param c Container.
284 * \param key Name of option to set.
285 * \param value Value of \p name to set.
287 * \return \c true on success, else \c false.
289 bool (*set_config_item
)(struct lxc_container
*c
, const char *key
, const char *value
);
292 * \brief Delete the container.
294 * \param c Container.
296 * \return \c true on success, else \c false.
298 * \note Container must be stopped and have no dependent snapshots.
300 bool (*destroy
)(struct lxc_container
*c
);
303 * \brief Save configuration to a file.
305 * \param c Container.
306 * \param alt_file Full path to file to save configuration in.
308 * \return \c true on success, else \c false.
310 bool (*save_config
)(struct lxc_container
*c
, const char *alt_file
);
313 * \brief Create a container.
315 * \param c Container (with lxcpath, name and a starting
316 * configuration set).
317 * \param t Template to execute to instantiate the root
318 * filesystem and adjust the configuration.
319 * \param bdevtype Backing store type to use (if \c NULL, \c dir will be used).
320 * \param specs Additional parameters for the backing store (for
321 * example LVM volume group to use).
322 * \param flags \c LXC_CREATE_* options (currently only \ref
323 * LXC_CREATE_QUIET is supported).
324 * \param argv Arguments to pass to the template, terminated by \c NULL (if no
325 * arguments are required, just pass \c NULL).
327 * \return \c true on success, else \c false.
329 bool (*create
)(struct lxc_container
*c
, const char *t
, const char *bdevtype
,
330 struct bdev_specs
*specs
, int flags
, char *const argv
[]);
333 * \brief Create a container (list variant).
335 * \param c Container (with lxcpath, name and a starting
336 * configuration set).
337 * \param t Template to execute to instantiate the root
338 * filesystem and adjust the configuration.
339 * \param bdevtype Backing store type to use (if \c NULL, \c dir will be used).
340 * \param specs Additional parameters for the backing store (for
341 * example LVM volume group to use).
342 * \param flags \c LXC_CREATE_* options (currently only \ref
343 * LXC_CREATE_QUIET is supported).
344 * \param ... Command-line to pass to init (must end in \c NULL).
346 * \return \c true on success, else \c false.
348 * \note Identical to \ref create except that the template
349 * arguments are specified as a list rather than an array of
352 bool (*createl
)(struct lxc_container
*c
, const char *t
, const char *bdevtype
,
353 struct bdev_specs
*specs
, int flags
, ...);
356 * \brief Rename a container
358 * \param c Container.
359 * \param newname New name to be used for the container.
361 * \return \c true on success, else \c false.
363 bool (*rename
)(struct lxc_container
*c
, const char *newname
);
366 * \brief Request the container reboot by sending it \c SIGINT.
368 * \param c Container.
370 * \return \c true if reboot request successful, else \c false.
372 bool (*reboot
)(struct lxc_container
*c
);
375 * \brief Request the container shutdown by sending it \c
378 * \param c Container.
379 * \param timeout Seconds to wait before returning false.
380 * (-1 to wait forever, 0 to avoid waiting).
382 * \return \c true if the container was shutdown successfully, else \c false.
384 bool (*shutdown
)(struct lxc_container
*c
, int timeout
);
387 * \brief Completely clear the containers in-memory configuration.
389 * \param c Container.
391 void (*clear_config
)(struct lxc_container
*c
);
394 * \brief Clear a configuration item.
396 * \param c Container.
397 * \param key Name of option to clear.
399 * \return \c true on success, else \c false.
401 * \note Analog of \ref set_config_item.
403 bool (*clear_config_item
)(struct lxc_container
*c
, const char *key
);
406 * \brief Retrieve the value of a config item.
408 * \param c Container.
409 * \param key Name of option to get.
410 * \param[out] retv Caller-allocated buffer to write value of \p key
411 * into (or \c NULL to determine length of value).
412 * \param inlen Length of \p retv (may be zero).
414 * \return Length of config items value, or < 0 on error.
416 * \note The caller can (and should) determine how large a buffer to allocate for
417 * \p retv by initially passing its value as \c NULL and considering the return value.
418 * This function can then be called again passing a newly-allocated suitably-sized buffer.
419 * \note If \p retv is NULL, \p inlen is ignored.
420 * \note If \p inlen is smaller than required, nothing will be written to \p retv and still return
421 * the length of config item value.
423 int (*get_config_item
)(struct lxc_container
*c
, const char *key
, char *retv
, int inlen
);
427 * \brief Retrieve the value of a config item from running container.
429 * \param c Container.
430 * \param key Name of option to get.
432 * \return the item or NULL on error.
434 * \note Returned string must be freed by the caller.
436 char* (*get_running_config_item
)(struct lxc_container
*c
, const char *key
);
439 * \brief Retrieve a list of config item keys given a key
442 * \param c Container.
443 * \param key Name of option to get.
444 * \param[out] retv Caller-allocated buffer to write list of keys to
445 * (or \c NULL to determine overall length of keys list).
446 * \param inlen Length of \p retv (may be zero).
448 * \return Length of keys list, or < 0 on error.
450 * \note The list values written to \p retv are separated by
451 * a newline character ('\\n').
452 * \note The caller can (and should) determine how large a buffer to allocate for
453 * \p retv by initially passing its value as \c NULL and considering the return value.
454 * This function can then be called again passing a newly-allocated suitably-sized buffer.
455 * \note If \p retv is NULL, \p inlen is ignored.
456 * \note If \p inlen is smaller than required, the value written
457 * to \p retv will be truncated.
459 int (*get_keys
)(struct lxc_container
*c
, const char *key
, char *retv
, int inlen
);
462 * \brief Obtain a list of network interfaces.
463 * \param c Container.
465 * \return Newly-allocated array of network interfaces, or \c
468 * \note The returned array is allocated, so the caller must free it.
469 * \note The returned array is terminated with a \c NULL entry.
471 char** (*get_interfaces
)(struct lxc_container
*c
);
474 * \brief Determine the list of container IP addresses.
476 * \param c Container.
477 * \param interface Network interface name to consider.
478 * \param family Network family (for example "inet", "inet6").
479 * \param scope IPv6 scope id (ignored if \p family is not "inet6").
481 * \return Newly-allocated array of network interfaces, or \c
484 * \note The returned array is allocated, so the caller must free it.
485 * \note The returned array is terminated with a \c NULL entry.
487 char** (*get_ips
)(struct lxc_container
*c
, const char* interface
, const char* family
, int scope
);
490 * \brief Retrieve the specified cgroup subsystem value for the container.
492 * \param c Container.
493 * \param subsys cgroup subsystem to retrieve.
494 * \param[out] retv Caller-allocated buffer to write value of \p
495 * subsys into (or \c NULL to determine length of value).
496 * \param inlen length of \p retv (may be zero).
498 * \return Length of \p subsys value, or < 0 on error.
500 * \note If \p retv is \c NULL, \p inlen is ignored.
501 * \note If \p inlen is smaller than required, the value written
502 * to \p retv will be truncated.
504 int (*get_cgroup_item
)(struct lxc_container
*c
, const char *subsys
, char *retv
, int inlen
);
507 * \brief Set the specified cgroup subsystem value for the container.
509 * \param c Container.
510 * \param subsys cgroup subsystem to consider.
511 * \param value Value to set for \p subsys.
513 * \return \c true on success, else \c false.
515 bool (*set_cgroup_item
)(struct lxc_container
*c
, const char *subsys
, const char *value
);
518 * \brief Determine full path to the containers configuration file.
519 * Each container can have a custom configuration path. However
520 * by default it will be set to either the \c LXCPATH configure
521 * variable, or the lxcpath value in the \c LXC_GLOBAL_CONF configuration
522 * file (i.e. \c /etc/lxc/lxc.conf).
523 * The value for a specific container can be changed using
524 * \ref set_config_path. There is no other way to specify this in general at the moment.
526 * \param c Container.
528 * \return Static string representing full path to configuration
531 * \note Returned string must not be freed.
533 const char *(*get_config_path
)(struct lxc_container
*c
);
536 * \brief Set the full path to the containers configuration
539 * \param c Container.
540 * \param path Full path to configuration file.
542 * \return \c true on success, else \c false.
544 bool (*set_config_path
)(struct lxc_container
*c
, const char *path
);
547 * \brief Copy a stopped container.
549 * \param c Original container.
550 * \param newname New name for the container. If \c NULL, the same
551 * name is used and a new lxcpath MUST be specified.
552 * \param lxcpath lxcpath in which to create the new container. If
553 * \c NULL, the original container's lxcpath will be used.
554 * (XXX: should we use the default instead?)
555 * \param flags Additional \c LXC_CLONE* flags to change the cloning behaviour:
556 * - \ref LXC_CLONE_KEEPNAME
557 * - \ref LXC_CLONE_KEEPMACADDR
558 * - \ref LXC_CLONE_SNAPSHOT
559 * \param bdevtype Optionally force the cloned bdevtype to a specified plugin.
560 * By default the original is used (subject to snapshot requirements).
561 * \param bdevdata Information about how to create the new storage
562 * (i.e. fstype and fsdata).
563 * \param newsize In case of a block device backing store, an
564 * optional size. If \c 0, the original backing store's size will
565 * be used if possible. Note this only applies to the rootfs. For
566 * any other filesystems, the original size will be duplicated.
567 * \param hookargs Additional arguments to pass to the clone hook script.
569 * \return Newly-allocated copy of container \p c, or \p NULL on
572 * \note If devtype was not specified, and \p flags contains \ref
573 * LXC_CLONE_SNAPSHOT then use the native \p bdevtype if possible,
574 * else use an overlayfs.
576 struct lxc_container
*(*clone
)(struct lxc_container
*c
, const char *newname
,
577 const char *lxcpath
, int flags
, const char *bdevtype
,
578 const char *bdevdata
, uint64_t newsize
, char **hookargs
);
581 * \brief Allocate a console tty for the container.
583 * \param c Container.
584 * \param[in,out] ttynum Terminal number to attempt to allocate,
585 * or \c -1 to allocate the first available tty.
586 * \param[out] masterfd File descriptor referring to the master side of the pty.
588 * \return tty file descriptor number on success, or \c -1 on
591 * \note On successful return, \p ttynum will contain the tty number
592 * that was allocated.
593 * \note The returned file descriptor is used to keep the tty
594 * allocated. The caller should call close(2) on the returned file
595 * descriptor when no longer required so that it may be allocated
598 int (*console_getfd
)(struct lxc_container
*c
, int *ttynum
, int *masterfd
);
601 * \brief Allocate and run a console tty.
603 * \param c Container.
604 * \param ttynum Terminal number to attempt to allocate, \c -1 to
605 * allocate the first available tty or \c 0 to allocate the
607 * \param stdinfd File descriptor to read input from.
608 * \param stdoutfd File descriptor to write output to.
609 * \param stderrfd File descriptor to write error output to.
610 * \param escape The escape character (1 == 'a', 2 == 'b', ...).
612 * \return \c 0 on success, \c -1 on failure.
614 * \note This function will not return until the console has been
615 * exited by the user.
617 int (*console
)(struct lxc_container
*c
, int ttynum
,
618 int stdinfd
, int stdoutfd
, int stderrfd
, int escape
);
621 * \brief Create a sub-process attached to a container and run
622 * a function inside it.
624 * \param c Container.
625 * \param exec_function Function to run.
626 * \param exec_payload Data to pass to \p exec_function.
627 * \param options \ref lxc_attach_options_t.
628 * \param[out] attached_process Process ID of process running inside
629 * container \p c that is running \p exec_function.
631 * \return \c 0 on success, \c -1 on error.
633 int (*attach
)(struct lxc_container
*c
, lxc_attach_exec_t exec_function
,
634 void *exec_payload
, lxc_attach_options_t
*options
, pid_t
*attached_process
);
637 * \brief Run a program inside a container and wait for it to exit.
639 * \param c Container.
640 * \param options See \ref attach options.
641 * \param program Full path inside container of program to run.
642 * \param argv Array of arguments to pass to \p program.
644 * \return \c waitpid(2) status of exited process that ran \p
645 * program, or \c -1 on error.
647 int (*attach_run_wait
)(struct lxc_container
*c
, lxc_attach_options_t
*options
, const char *program
, const char * const argv
[]);
650 * \brief Run a program inside a container and wait for it to exit (list variant).
652 * \param c Container.
653 * \param options See \ref attach options.
654 * \param program Full path inside container of program to run.
655 * \param ... Command-line to pass to \p program (must end in \c NULL).
657 * \return \c waitpid(2) status of exited process that ran \p
658 * program, or \c -1 on error.
660 int (*attach_run_waitl
)(struct lxc_container
*c
, lxc_attach_options_t
*options
, const char *program
, const char *arg
, ...);
663 * \brief Create a container snapshot.
665 * Assuming default paths, snapshots will be created as
666 * \c /var/lib/lxc/\<c\>/snaps/snap\<n\>
667 * where \c \<c\> represents the container name and \c \<n\>
668 * represents the zero-based snapshot number.
670 * \param c Container.
671 * \param commentfile Full path to file containing a description
674 * \return -1 on error, or zero-based snapshot number.
676 * \note \p commentfile may be \c NULL but this is discouraged.
678 int (*snapshot
)(struct lxc_container
*c
, const char *commentfile
);
681 * \brief Obtain a list of container snapshots.
683 * \param c Container.
684 * \param[out] snapshots Dynamically-allocated Array of lxc_snapshot's.
686 * \return Number of snapshots.
688 * \note The array returned in \p snapshots is allocated, so the caller must free it.
689 * \note To free an individual snapshot as returned in \p
690 * snapshots, call the snapshots \c free function (see \c src/tests/snapshot.c for an example).
692 int (*snapshot_list
)(struct lxc_container
*c
, struct lxc_snapshot
**snapshots
);
695 * \brief Create a new container based on a snapshot.
697 * The restored container will be a copy (not snapshot) of the snapshot,
698 * and restored in the lxcpath of the original container.
699 * \param c Container.
700 * \param snapname Name of snapshot.
701 * \param newname Name to be used for the restored snapshot.
702 * \return \c true on success, else \c false.
703 * \warning If \p newname is the same as the current container
704 * name, the container will be destroyed. However, this will
705 * fail if the snapshot is overlay-based, since the snapshots
706 * will pin the original container.
707 * \note As an example, if the container exists as \c /var/lib/lxc/c1, snapname might be \c 'snap0'
708 * (representing \c /var/lib/lxc/c1/snaps/snap0). If \p newname is \p c2,
709 * then \c snap0 will be copied to \c /var/lib/lxc/c2.
711 bool (*snapshot_restore
)(struct lxc_container
*c
, const char *snapname
, const char *newname
);
714 * \brief Destroy the specified snapshot.
716 * \param c Container.
717 * \param snapname Name of snapshot.
719 * \return \c true on success, else \c false.
721 bool (*snapshot_destroy
)(struct lxc_container
*c
, const char *snapname
);
724 * \brief Determine if the caller may control the container.
726 * \param c Container.
728 * \return \c false if there is a control socket for the
729 * container monitor and the caller may not access it, otherwise
732 bool (*may_control
)(struct lxc_container
*c
);
735 * \brief Add specified device to the container.
737 * \param c Container.
738 * \param src_path Full path of the device.
739 * \param dest_path Alternate path in the container (or \p NULL
740 * to use \p src_path).
742 * \return \c true on success, else \c false.
744 bool (*add_device_node
)(struct lxc_container
*c
, const char *src_path
, const char *dest_path
);
747 * \brief Remove specified device from the container.
749 * \param c Container.
750 * \param src_path Full path of the device.
751 * \param dest_path Alternate path in the container (or \p NULL
752 * to use \p src_path).
754 * \return \c true on success, else \c false.
756 bool (*remove_device_node
)(struct lxc_container
*c
, const char *src_path
, const char *dest_path
);
758 /* Post LXC-1.0 additions */
761 * \brief Add specified netdev to the container.
763 * \param c Container.
764 * \param dev name of net device.
766 * \return \c true on success, else \c false.
768 bool (*attach_interface
)(struct lxc_container
*c
, const char *dev
, const char *dst_dev
);
771 * \brief Remove specified netdev from the container.
773 * \param c Container.
774 * \param dev name of net device.
776 * \return \c true on success, else \c false.
778 bool (*detach_interface
)(struct lxc_container
*c
, const char *dev
, const char *dst_dev
);
780 * \brief Checkpoint a container.
782 * \param c Container.
783 * \param directory The directory to dump the container to.
784 * \param stop Whether or not to stop the container after checkpointing.
785 * \param verbose Enable criu's verbose logs.
787 * \return \c true on success, else \c false.
788 * present at compile time).
790 bool (*checkpoint
)(struct lxc_container
*c
, char *directory
, bool stop
, bool verbose
);
793 * \brief Restore a container from a checkpoint.
795 * \param c Container.
796 * \param directory The directory to restore the container from.
797 * \param verbose Enable criu's verbose logs.
799 * \return \c true on success, else \c false.
802 bool (*restore
)(struct lxc_container
*c
, char *directory
, bool verbose
);
805 * \brief Delete the container and all its snapshots.
807 * \param c Container.
809 * \return \c true on success, else \c false.
811 * \note Container must be stopped.
813 bool (*destroy_with_snapshots
)(struct lxc_container
*c
);
816 * \brief Destroy all the container's snapshot.
818 * \param c Container.
820 * \return \c true on success, else \c false.
822 bool (*snapshot_destroy_all
)(struct lxc_container
*c
);
824 /* Post LXC-1.1 additions */
826 * \brief An API call to perform various migration operations
828 * \param cmd One of the MIGRATE_ constants.
829 * \param opts A migrate_opts struct filled with relevant options.
830 * \param size The size of the migrate_opts struct, i.e. sizeof(struct migrate_opts).
832 * \return \c 0 on success, nonzero on failure.
834 int (*migrate
)(struct lxc_container
*c
, unsigned int cmd
, struct migrate_opts
*opts
, unsigned int size
);
837 * \brief Query the console log of a container.
839 * \param c Container.
840 * \param opts A lxc_console_log struct filled with relevant options.
842 * \return \c 0 on success, nonzero on failure.
844 int (*console_log
)(struct lxc_container
*c
, struct lxc_console_log
*log
);
847 * \brief Request the container reboot by sending it \c SIGINT.
849 * \param c Container.
850 * \param timeout Seconds to wait before returning false.
851 * (-1 to wait forever, 0 to avoid waiting).
853 * \return \c true if the container was rebooted successfully, else \c false.
855 bool (*reboot2
)(struct lxc_container
*c
, int timeout
);
858 * \brief Mount the host's path `source` onto the container's path `target`.
860 int (*mount
)(struct lxc_container
*c
, const char *source
,
861 const char *target
, const char *filesystemtype
,
862 unsigned long mountflags
, const void *data
,
863 struct lxc_mount
*mnt
);
866 * \brief Unmount the container's path `target`.
868 int (*umount
)(struct lxc_container
*c
, const char *target
,
869 unsigned long mountflags
, struct lxc_mount
*mnt
);
871 int (*seccomp_notify_fd
)(struct lxc_container
*c
);
875 * \brief An LXC container snapshot.
877 struct lxc_snapshot
{
878 char *name
; /*!< Name of snapshot */
879 char *comment_pathname
; /*!< Full path to snapshots comment file (may be \c NULL) */
880 char *timestamp
; /*!< Time snapshot was created */
881 char *lxcpath
; /*!< Full path to LXCPATH for snapshot */
884 * \brief De-allocate the snapshot.
887 void (*free
)(struct lxc_snapshot
*s
);
892 * \brief Specifications for how to create a new backing store
895 char *fstype
; /*!< Filesystem type */
896 uint64_t fssize
; /*!< Filesystem size in bytes */
898 char *zfsroot
; /*!< ZFS root path */
901 char *vg
; /*!< LVM Volume Group name */
902 char *lv
; /*!< LVM Logical Volume name */
903 char *thinpool
; /*!< LVM thin pool to use, if any */
905 char *dir
; /*!< Directory path */
907 char *rbdname
; /*!< RBD image name */
908 char *rbdpool
; /*!< Ceph pool name */
913 * \brief Commands for the migrate API call.
919 MIGRATE_FEATURE_CHECK
,
923 * \brief Available feature checks.
925 #define FEATURE_MEM_TRACK (1ULL << 0)
926 #define FEATURE_LAZY_PAGES (1ULL << 1)
929 * \brief Options for the migrate API call.
931 struct migrate_opts
{
932 /* new members should be added at the end */
936 bool stop
; /* stop the container after dump? */
937 char *predump_dir
; /* relative to directory above */
938 char *pageserver_address
; /* where should memory pages be send? */
939 char *pageserver_port
;
941 /* This flag indicates whether or not the container's rootfs will have
942 * the same inodes on checkpoint and restore. In the case of e.g. zfs
943 * send or btrfs send, or an LVM snapshot, this will be true, but it
944 * won't if e.g. you rsync the filesystems between two machines.
946 bool preserves_inodes
;
948 /* Path to an executable script that will be registered as a criu
953 /* If CRIU >= 2.4 is detected the option to skip in-flight connections
954 * will be enabled by default. The flag 'disable_skip_in_flight' will
955 * unconditionally disable this feature. In-flight connections are
956 * not fully established TCP connections: SYN, SYN-ACK */
957 bool disable_skip_in_flight
;
959 /* This is the maximum file size for deleted files (which CRIU calls
960 * "ghost" files) that will be handled. 0 indicates the CRIU default,
961 * which at this time is 1MB.
963 uint64_t ghost_limit
;
965 /* Some features cannot be checked by comparing the CRIU version.
966 * Features like dirty page tracking or userfaultfd depend on
967 * the architecture/kernel/criu combination. This is a bitmask
968 * in which the desired feature checks can be encoded.
970 uint64_t features_to_check
;
973 struct lxc_console_log
{
974 /* Clear the console log. */
977 /* Retrieve the console log. */
980 /* This specifies the maximum size to read from the ringbuffer. Setting
981 * it to 0 means that the a read can be as big as the whole ringbuffer.
982 * On return callers can check how many bytes were actually read.
983 * If "read" and "clear" are set to false and a non-zero value is
984 * specified then up to "read_max" bytes of data will be discarded from
989 /* Data that was read from the ringbuffer. If "read_max" is 0 on return
996 * \brief Create a new container.
998 * \param name Name to use for container.
999 * \param configpath Full path to configuration file to use.
1001 * \return Newly-allocated container, or \c NULL on error.
1003 struct lxc_container
*lxc_container_new(const char *name
, const char *configpath
);
1006 * \brief Add a reference to the specified container.
1008 * \param c Container.
1010 * \return \c true on success, \c false on error.
1012 int lxc_container_get(struct lxc_container
*c
);
1015 * \brief Drop a reference to the specified container.
1017 * \param c Container.
1019 * \return \c 0 on success, \c 1 if reference was successfully dropped
1020 * and container has been freed, and \c -1 on error.
1022 * \warning If \c 1 is returned, \p c is no longer valid.
1024 int lxc_container_put(struct lxc_container
*c
);
1027 * \brief Obtain a list of all container states.
1028 * \param[out] states Caller-allocated array to hold all states (may be \c NULL).
1030 * \return Number of container states.
1032 * \note Passing \c NULL for \p states allows the caller to first
1033 * calculate how many states there are before calling the function again, the second time
1034 * providing a suitably-sized array to store the static string pointers
1036 * \note The \p states array should be freed by the caller, but not the strings the elements point to.
1038 int lxc_get_wait_states(const char **states
);
1041 * \brief Get the value for a global config key
1043 * \param key The name of the config key
1045 * \return String representing the current value for the key.
1047 const char *lxc_get_global_config_item(const char *key
);
1050 * \brief Determine version of LXC.
1051 * \return Static string representing version of LXC in use.
1053 * \note Returned string must not be freed.
1055 const char *lxc_get_version(void);
1058 * \brief Get a list of defined containers in a lxcpath.
1060 * \param lxcpath lxcpath under which to look.
1061 * \param names If not \c NULL, then a list of container names will be returned here.
1062 * \param cret If not \c NULL, then a list of lxc_containers will be returned here.
1064 * \return Number of containers found, or \c -1 on error.
1066 * \note Values returned in \p cret are sorted by container name.
1068 int list_defined_containers(const char *lxcpath
, char ***names
, struct lxc_container
***cret
);
1071 * \brief Get a list of active containers for a given lxcpath.
1073 * \param lxcpath Full \c LXCPATH path to consider.
1074 * \param[out] names Dynamically-allocated array of container names.
1075 * \param[out] cret Dynamically-allocated list of containers.
1077 * \return Number of containers found, or -1 on error.
1079 * \note Some of the containers may not be "defined".
1080 * \note Values returned in \p cret are sorted by container name.
1081 * \note \p names and \p cret may both (or either) be specified as \c NULL.
1082 * \note \p names and \p cret must be freed by the caller.
1084 int list_active_containers(const char *lxcpath
, char ***names
, struct lxc_container
***cret
);
1087 * \brief Get a complete list of all containers for a given lxcpath.
1089 * \param lxcpath Full \c LXCPATH path to consider.
1090 * \param[out] names Dynamically-allocated array of container name.
1091 * \param[out] cret Dynamically-allocated list of containers.
1093 * \return Number of containers, or -1 on error.
1095 * \note Some of the containers may not be "defined".
1096 * \note Values returned in \p cret are sorted by container name.
1097 * \note \p names and \p cret may both (or either) be specified as \c NULL.
1098 * \note \p names and \p cret must be freed by the caller.
1100 int list_all_containers(const char *lxcpath
, char ***names
, struct lxc_container
***cret
);
1104 const char *lxcpath
;
1112 *\brief Initialize the log
1114 *\param log lxc log configuration.
1116 int lxc_log_init(struct lxc_log
*log
);
1119 * \brief Close log file.
1121 void lxc_log_close(void);
1124 * \brief Check if the configuration item is supported by this LXC instance.
1126 * \param key Configuration item to check for.
1128 bool lxc_config_item_is_supported(const char *key
);
1131 * \brief Check if an API extension is supported by this LXC instance.
1133 * \param extension API extension to check for.
1135 bool lxc_has_api_extension(const char *extension
);