1 /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 #pragma once 3 4 /*** 5 Copyright © 2010 Maarten Lankhorst 6 ***/ 7 8 #include "sd-device.h" 9 #include "unit.h" 10 11 typedef struct Swap Swap; 12 13 typedef enum SwapExecCommand { 14 SWAP_EXEC_ACTIVATE, 15 SWAP_EXEC_DEACTIVATE, 16 _SWAP_EXEC_COMMAND_MAX, 17 _SWAP_EXEC_COMMAND_INVALID = -EINVAL, 18 } SwapExecCommand; 19 20 typedef enum SwapResult { 21 SWAP_SUCCESS, 22 SWAP_FAILURE_RESOURCES, 23 SWAP_FAILURE_TIMEOUT, 24 SWAP_FAILURE_EXIT_CODE, 25 SWAP_FAILURE_SIGNAL, 26 SWAP_FAILURE_CORE_DUMP, 27 SWAP_FAILURE_START_LIMIT_HIT, 28 _SWAP_RESULT_MAX, 29 _SWAP_RESULT_INVALID = -EINVAL, 30 } SwapResult; 31 32 typedef struct SwapParameters { 33 char *what; 34 char *options; 35 int priority; 36 bool priority_set; 37 } SwapParameters; 38 39 struct Swap { 40 Unit meta; 41 42 char *what; 43 44 /* If the device has already shown up, this is the device 45 * node, which might be different from what, due to 46 * symlinks */ 47 char *devnode; 48 49 SwapParameters parameters_proc_swaps; 50 SwapParameters parameters_fragment; 51 52 bool from_proc_swaps:1; 53 bool from_fragment:1; 54 55 /* Used while looking for swaps that vanished or got added 56 * from/to /proc/swaps */ 57 bool is_active:1; 58 bool just_activated:1; 59 60 SwapResult result; 61 SwapResult clean_result; 62 63 usec_t timeout_usec; 64 65 ExecCommand exec_command[_SWAP_EXEC_COMMAND_MAX]; 66 ExecContext exec_context; 67 KillContext kill_context; 68 CGroupContext cgroup_context; 69 70 ExecRuntime *exec_runtime; 71 DynamicCreds dynamic_creds; 72 73 SwapState state, deserialized_state; 74 75 ExecCommand* control_command; 76 SwapExecCommand control_command_id; 77 pid_t control_pid; 78 79 sd_event_source *timer_event_source; 80 81 /* In order to be able to distinguish dependencies on 82 different device nodes we might end up creating multiple 83 devices for the same swap. We chain them up here. */ 84 85 LIST_FIELDS(struct Swap, same_devnode); 86 }; 87 88 extern const UnitVTable swap_vtable; 89 90 int swap_process_device_new(Manager *m, sd_device *dev); 91 int swap_process_device_remove(Manager *m, sd_device *dev); 92 93 const char* swap_exec_command_to_string(SwapExecCommand i) _const_; 94 SwapExecCommand swap_exec_command_from_string(const char *s) _pure_; 95 96 const char* swap_result_to_string(SwapResult i) _const_; 97 SwapResult swap_result_from_string(const char *s) _pure_; 98 99 DEFINE_CAST(SWAP, Swap); 100