1 /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 #pragma once 3 4 typedef struct Mount Mount; 5 6 #include "kill.h" 7 #include "dynamic-user.h" 8 #include "unit.h" 9 10 typedef enum MountExecCommand { 11 MOUNT_EXEC_MOUNT, 12 MOUNT_EXEC_UNMOUNT, 13 MOUNT_EXEC_REMOUNT, 14 _MOUNT_EXEC_COMMAND_MAX, 15 _MOUNT_EXEC_COMMAND_INVALID = -EINVAL, 16 } MountExecCommand; 17 18 typedef enum MountResult { 19 MOUNT_SUCCESS, 20 MOUNT_FAILURE_RESOURCES, /* a bit of a misnomer, just our catch-all error for errnos we didn't expect */ 21 MOUNT_FAILURE_TIMEOUT, 22 MOUNT_FAILURE_EXIT_CODE, 23 MOUNT_FAILURE_SIGNAL, 24 MOUNT_FAILURE_CORE_DUMP, 25 MOUNT_FAILURE_START_LIMIT_HIT, 26 MOUNT_FAILURE_PROTOCOL, 27 _MOUNT_RESULT_MAX, 28 _MOUNT_RESULT_INVALID = -EINVAL, 29 } MountResult; 30 31 typedef struct MountParameters { 32 char *what; 33 char *options; 34 char *fstype; 35 } MountParameters; 36 37 /* Used while looking for mount points that vanished or got added from/to /proc/self/mountinfo */ 38 typedef enum MountProcFlags { 39 MOUNT_PROC_IS_MOUNTED = 1 << 0, 40 MOUNT_PROC_JUST_MOUNTED = 1 << 1, 41 MOUNT_PROC_JUST_CHANGED = 1 << 2, 42 } MountProcFlags; 43 44 struct Mount { 45 Unit meta; 46 47 char *where; 48 49 MountParameters parameters_proc_self_mountinfo; 50 MountParameters parameters_fragment; 51 52 bool from_proc_self_mountinfo:1; 53 bool from_fragment:1; 54 55 MountProcFlags proc_flags; 56 57 bool sloppy_options; 58 59 bool lazy_unmount; 60 bool force_unmount; 61 62 bool read_write_only; 63 64 MountResult result; 65 MountResult reload_result; 66 MountResult clean_result; 67 68 mode_t directory_mode; 69 70 usec_t timeout_usec; 71 72 ExecCommand exec_command[_MOUNT_EXEC_COMMAND_MAX]; 73 74 ExecContext exec_context; 75 KillContext kill_context; 76 CGroupContext cgroup_context; 77 78 ExecRuntime *exec_runtime; 79 DynamicCreds dynamic_creds; 80 81 MountState state, deserialized_state; 82 83 ExecCommand* control_command; 84 MountExecCommand control_command_id; 85 pid_t control_pid; 86 87 sd_event_source *timer_event_source; 88 89 unsigned n_retry_umount; 90 }; 91 92 extern const UnitVTable mount_vtable; 93 94 void mount_fd_event(Manager *m, int events); 95 96 const char* mount_exec_command_to_string(MountExecCommand i) _const_; 97 MountExecCommand mount_exec_command_from_string(const char *s) _pure_; 98 99 const char* mount_result_to_string(MountResult i) _const_; 100 MountResult mount_result_from_string(const char *s) _pure_; 101 102 DEFINE_CAST(MOUNT, Mount); 103