e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering#pragma once
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering/***
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering This file is part of systemd.
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering Copyright 2015 Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering systemd is free software; you can redistribute it and/or modify it
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering under the terms of the GNU Lesser General Public License as published by
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering (at your option) any later version.
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering systemd is distributed in the hope that it will be useful, but
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering Lesser General Public License for more details.
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering You should have received a copy of the GNU Lesser General Public License
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering***/
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering#include <stdbool.h>
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringtypedef enum VolatileMode {
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering VOLATILE_NO,
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering VOLATILE_YES,
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering VOLATILE_STATE,
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering _VOLATILE_MODE_MAX,
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering _VOLATILE_MODE_INVALID = -1
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering} VolatileMode;
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringtypedef enum CustomMountType {
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering CUSTOM_MOUNT_BIND,
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering CUSTOM_MOUNT_TMPFS,
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering CUSTOM_MOUNT_OVERLAY,
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering _CUSTOM_MOUNT_TYPE_MAX,
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering _CUSTOM_MOUNT_TYPE_INVALID = -1
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering} CustomMountType;
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringtypedef struct CustomMount {
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering CustomMountType type;
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering bool read_only;
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering char *source; /* for overlayfs this is the upper directory */
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering char *destination;
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering char *options;
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering char *work_dir;
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering char **lower;
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering} CustomMount;
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart PoetteringCustomMount* custom_mount_add(CustomMount **l, unsigned *n, CustomMountType t);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringvoid custom_mount_free_all(CustomMount *l, unsigned n);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringint bind_mount_parse(CustomMount **l, unsigned *n, const char *s, bool read_only);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringint tmpfs_mount_parse(CustomMount **l, unsigned *n, const char *s);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringint custom_mount_compare(const void *a, const void *b);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
d167824896e583ffaca891b1c355ff852496ff66Iago López Galeirasint mount_all(const char *dest, bool use_userns, bool in_userns, bool use_netns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context);
d8fc6a000fe21b0c1ba27fbfed8b42d00b349a4bLennart Poetteringint mount_sysfs(const char *dest);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringint mount_cgroups(const char *dest, bool unified_requested, bool userns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringint mount_systemd_cgroup_writable(const char *dest, bool unified_requested);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringint mount_custom(const char *dest, CustomMount *mounts, unsigned n, bool userns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringint setup_volatile(const char *directory, VolatileMode mode, bool userns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poetteringint setup_volatile_state(const char *directory, VolatileMode mode, bool userns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context);
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart Poettering
e83bebeff7d9d734e17c3e38ac13daabc09518e1Lennart PoetteringVolatileMode volatile_mode_from_string(const char *s);