File Coverage

blib/lib/Config/Model/models/Systemd/Common/ResourceControl.pl
Criterion Covered Total %
statement 18 18 100.0
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 24 24 100.0


line stmt bran cond sub pod time code
1             #
2             # This file is part of Config-Model-Systemd
3             #
4             # This software is Copyright (c) 2008-2022 by Dominique Dumont.
5             #
6             # This is free software, licensed under:
7             #
8             # The GNU Lesser General Public License, Version 2.1, February 1999
9             #
10 4     4   96880 use strict;
  4     1   10  
  4     1   101  
  1         16434  
  1         2  
  1         18  
  1         19015  
  1         2  
  1         25  
11 4     4   18 use warnings;
  4     1   7  
  4     1   4462  
  1         3  
  1         2  
  1         917  
  1         4  
  1         4  
  1         1047  
12              
13             return [
14             {
15             'accept' => [
16             '.*',
17             {
18             'type' => 'leaf',
19             'value_type' => 'uniline',
20             'warn' => 'Unexpected systemd parameter. Please contact cme author to update systemd model.'
21             }
22             ],
23             'class_description' => 'Unit configuration files for services, slices, scopes, sockets, mount points, and swap devices share a subset
24             of configuration options for resource control of spawned processes. Internally, this relies on the Linux Control
25             Groups (cgroups) kernel concept for organizing processes in a hierarchical tree of named groups for the purpose of
26             resource management.
27              
28             This man page lists the configuration options shared by
29             those six unit types. See
30             L<systemd.unit(5)>
31             for the common options of all unit configuration files, and
32             L<systemd.slice(5)>,
33             L<systemd.scope(5)>,
34             L<systemd.service(5)>,
35             L<systemd.socket(5)>,
36             L<systemd.mount(5)>,
37             and
38             L<systemd.swap(5)>
39             for more information on the specific unit configuration files. The
40             resource control configuration options are configured in the
41             [Slice], [Scope], [Service], [Socket], [Mount], or [Swap]
42             sections, depending on the unit type.
43              
44             In addition, options which control resources available to programs
45             executed by systemd are listed in
46             L<systemd.exec(5)>.
47             Those options complement options listed here.
48              
49             See the L<New
50             Control Group Interfaces|https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/> for an introduction on how to make
51             use of resource control APIs from programs.
52             This configuration class was generated from systemd documentation.
53             by L<parse-man.pl|https://github.com/dod38fr/config-model-systemd/contrib/parse-man.pl>
54             ',
55             'copyright' => [
56             '2010-2016 Lennart Poettering and others',
57             '2016 Dominique Dumont'
58             ],
59             'element' => [
60             'CPUAccounting',
61             {
62             'description' => 'Turn on CPU usage accounting for this unit. Takes a
63             boolean argument. Note that turning on CPU accounting for
64             one unit will also implicitly turn it on for all units
65             contained in the same slice and for all its parent slices
66             and the units contained therein. The system default for this
67             setting may be controlled with
68             C<DefaultCPUAccounting> in
69             L<systemd-system.conf(5)>.',
70             'type' => 'leaf',
71             'value_type' => 'boolean',
72             'write_as' => [
73             'no',
74             'yes'
75             ]
76             },
77             'CPUWeight',
78             {
79             'description' => 'Assign the specified CPU time weight to the processes executed, if the unified control group
80             hierarchy is used on the system. These options take an integer value and control the
81             C<cpu.weight> control group attribute. The allowed range is 1 to 10000. Defaults to
82             100. For details about this control group attribute, see L<Control Groups v2|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html>
83             and L<CFS
84             Scheduler|https://www.kernel.org/doc/html/latest/scheduler/sched-design-CFS.html>. The available CPU time is split up among all units within one slice relative to
85             their CPU time weight. A higher weight means more CPU time, a lower weight means less.
86              
87             While C<StartupCPUWeight> applies to the startup and shutdown phases of the system,
88             C<CPUWeight> applies to normal runtime of the system, and if the former is not set also to
89             the startup and shutdown phases. Using C<StartupCPUWeight> allows prioritizing specific services at
90             boot-up and shutdown differently than during normal runtime.
91              
92             These settings replace C<CPUShares> and C<StartupCPUShares>.',
93             'max' => '10000',
94             'min' => '1',
95             'type' => 'leaf',
96             'upstream_default' => '100',
97             'value_type' => 'integer'
98             },
99             'StartupCPUWeight',
100             {
101             'description' => 'Assign the specified CPU time weight to the processes executed, if the unified control group
102             hierarchy is used on the system. These options take an integer value and control the
103             C<cpu.weight> control group attribute. The allowed range is 1 to 10000. Defaults to
104             100. For details about this control group attribute, see L<Control Groups v2|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html>
105             and L<CFS
106             Scheduler|https://www.kernel.org/doc/html/latest/scheduler/sched-design-CFS.html>. The available CPU time is split up among all units within one slice relative to
107             their CPU time weight. A higher weight means more CPU time, a lower weight means less.
108              
109             While C<StartupCPUWeight> applies to the startup and shutdown phases of the system,
110             C<CPUWeight> applies to normal runtime of the system, and if the former is not set also to
111             the startup and shutdown phases. Using C<StartupCPUWeight> allows prioritizing specific services at
112             boot-up and shutdown differently than during normal runtime.
113              
114             These settings replace C<CPUShares> and C<StartupCPUShares>.',
115             'max' => '10000',
116             'min' => '1',
117             'type' => 'leaf',
118             'upstream_default' => '100',
119             'value_type' => 'integer'
120             },
121             'CPUQuota',
122             {
123             'description' => 'Assign the specified CPU time quota to the processes executed. Takes a percentage value, suffixed with
124             "%". The percentage specifies how much CPU time the unit shall get at maximum, relative to the total CPU time
125             available on one CPU. Use values > 100% for allotting CPU time on more than one CPU. This controls the
126             C<cpu.max> attribute on the unified control group hierarchy and
127             C<cpu.cfs_quota_us> on legacy. For details about these control group attributes, see L<Control Groups v2|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html> and L<sched-bwc.txt|https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt>.
128             Setting C<CPUQuota> to an empty value unsets the quota.
129              
130             Example: C<CPUQuota=20%> ensures that the executed processes will never get more than
131             20% CPU time on one CPU.',
132             'type' => 'leaf',
133             'value_type' => 'uniline'
134             },
135             'CPUQuotaPeriodSec',
136             {
137             'description' => 'Assign the duration over which the CPU time quota specified by C<CPUQuota> is measured.
138             Takes a time duration value in seconds, with an optional suffix such as "ms" for milliseconds (or "s" for seconds.)
139             The default setting is 100ms. The period is clamped to the range supported by the kernel, which is [1ms, 1000ms].
140             Additionally, the period is adjusted up so that the quota interval is also at least 1ms.
141             Setting C<CPUQuotaPeriodSec> to an empty value resets it to the default.
142              
143             This controls the second field of C<cpu.max> attribute on the unified control group hierarchy
144             and C<cpu.cfs_period_us> on legacy. For details about these control group attributes, see
145             L<Control Groups v2|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html> and
146             L<CFS Scheduler|https://www.kernel.org/doc/html/latest/scheduler/sched-design-CFS.html>.
147              
148             Example: C<CPUQuotaPeriodSec=10ms> to request that the CPU quota is measured in periods of 10ms.',
149             'type' => 'leaf',
150             'value_type' => 'uniline'
151             },
152             'AllowedCPUs',
153             {
154             'description' => 'Restrict processes to be executed on specific CPUs. Takes a list of CPU indices or ranges separated by either
155             whitespace or commas. CPU ranges are specified by the lower and upper CPU indices separated by a dash.
156              
157             Setting C<AllowedCPUs> or C<StartupAllowedCPUs> doesn\'t guarantee that all
158             of the CPUs will be used by the processes as it may be limited by parent units. The effective configuration is
159             reported as C<EffectiveCPUs>.
160              
161             While C<StartupAllowedCPUs> applies to the startup and shutdown phases of the system,
162             C<AllowedCPUs> applies to normal runtime of the system, and if the former is not set also to
163             the startup and shutdown phases. Using C<StartupAllowedCPUs> allows prioritizing specific services at
164             boot-up and shutdown differently than during normal runtime.
165              
166             This setting is supported only with the unified control group hierarchy.',
167             'type' => 'leaf',
168             'value_type' => 'uniline'
169             },
170             'StartupAllowedCPUs',
171             {
172             'description' => 'Restrict processes to be executed on specific CPUs. Takes a list of CPU indices or ranges separated by either
173             whitespace or commas. CPU ranges are specified by the lower and upper CPU indices separated by a dash.
174              
175             Setting C<AllowedCPUs> or C<StartupAllowedCPUs> doesn\'t guarantee that all
176             of the CPUs will be used by the processes as it may be limited by parent units. The effective configuration is
177             reported as C<EffectiveCPUs>.
178              
179             While C<StartupAllowedCPUs> applies to the startup and shutdown phases of the system,
180             C<AllowedCPUs> applies to normal runtime of the system, and if the former is not set also to
181             the startup and shutdown phases. Using C<StartupAllowedCPUs> allows prioritizing specific services at
182             boot-up and shutdown differently than during normal runtime.
183              
184             This setting is supported only with the unified control group hierarchy.',
185             'type' => 'leaf',
186             'value_type' => 'uniline'
187             },
188             'AllowedMemoryNodes',
189             {
190             'description' => 'Restrict processes to be executed on specific memory NUMA nodes. Takes a list of memory NUMA nodes indices
191             or ranges separated by either whitespace or commas. Memory NUMA nodes ranges are specified by the lower and upper
192             NUMA nodes indices separated by a dash.
193              
194             Setting C<AllowedMemoryNodes> or C<StartupAllowedMemoryNodes> doesn\'t
195             guarantee that all of the memory NUMA nodes will be used by the processes as it may be limited by parent units.
196             The effective configuration is reported as C<EffectiveMemoryNodes>.
197              
198             While C<StartupAllowedMemoryNodes> applies to the startup and shutdown phases of the system,
199             C<AllowedMemoryNodes> applies to normal runtime of the system, and if the former is not set also to
200             the startup and shutdown phases. Using C<StartupAllowedMemoryNodes> allows prioritizing specific services at
201             boot-up and shutdown differently than during normal runtime.
202              
203             This setting is supported only with the unified control group hierarchy.',
204             'type' => 'leaf',
205             'value_type' => 'uniline'
206             },
207             'StartupAllowedMemoryNodes',
208             {
209             'description' => 'Restrict processes to be executed on specific memory NUMA nodes. Takes a list of memory NUMA nodes indices
210             or ranges separated by either whitespace or commas. Memory NUMA nodes ranges are specified by the lower and upper
211             NUMA nodes indices separated by a dash.
212              
213             Setting C<AllowedMemoryNodes> or C<StartupAllowedMemoryNodes> doesn\'t
214             guarantee that all of the memory NUMA nodes will be used by the processes as it may be limited by parent units.
215             The effective configuration is reported as C<EffectiveMemoryNodes>.
216              
217             While C<StartupAllowedMemoryNodes> applies to the startup and shutdown phases of the system,
218             C<AllowedMemoryNodes> applies to normal runtime of the system, and if the former is not set also to
219             the startup and shutdown phases. Using C<StartupAllowedMemoryNodes> allows prioritizing specific services at
220             boot-up and shutdown differently than during normal runtime.
221              
222             This setting is supported only with the unified control group hierarchy.',
223             'type' => 'leaf',
224             'value_type' => 'uniline'
225             },
226             'MemoryAccounting',
227             {
228             'description' => 'Turn on process and kernel memory accounting for this
229             unit. Takes a boolean argument. Note that turning on memory
230             accounting for one unit will also implicitly turn it on for
231             all units contained in the same slice and for all its parent
232             slices and the units contained therein. The system default
233             for this setting may be controlled with
234             C<DefaultMemoryAccounting> in
235             L<systemd-system.conf(5)>.',
236             'type' => 'leaf',
237             'value_type' => 'boolean',
238             'write_as' => [
239             'no',
240             'yes'
241             ]
242             },
243             'MemoryMin',
244             {
245             'description' => 'Specify the memory usage protection of the executed processes in this unit.
246             When reclaiming memory, the unit is treated as if it was using less memory resulting in memory
247             to be preferentially reclaimed from unprotected units.
248             Using C<MemoryLow> results in a weaker protection where memory may still
249             be reclaimed to avoid invoking the OOM killer in case there is no other reclaimable memory.
250              
251             For a protection to be effective, it is generally required to set a corresponding
252             allocation on all ancestors, which is then distributed between children
253             (with the exception of the root slice).
254             Any C<MemoryMin> or C<MemoryLow> allocation that is not
255             explicitly distributed to specific children is used to create a shared protection for all children.
256             As this is a shared protection, the children will freely compete for the memory.
257              
258             Takes a memory size in bytes. If the value is suffixed with K, M, G or T, the specified memory size is
259             parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. Alternatively, a
260             percentage value may be specified, which is taken relative to the installed physical memory on the
261             system. If assigned the special value C<infinity>, all available memory is protected, which may be
262             useful in order to always inherit all of the protection afforded by ancestors.
263             This controls the C<memory.min> or C<memory.low> control group attribute.
264             For details about this control group attribute, see L<Memory Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#memory-interface-files>.
265              
266             This setting is supported only if the unified control group hierarchy is used and disables
267             C<MemoryLimit>.
268              
269             Units may have their children use a default C<memory.min> or
270             C<memory.low> value by specifying C<DefaultMemoryMin> or
271             C<DefaultMemoryLow>, which has the same semantics as
272             C<MemoryMin> and C<MemoryLow>.
273             This setting does not affect C<memory.min> or C<memory.low>
274             in the unit itself.
275             Using it to set a default child allocation is only useful on kernels older than 5.7,
276             which do not support the C<memory_recursiveprot> cgroup2 mount option.',
277             'type' => 'leaf',
278             'value_type' => 'uniline'
279             },
280             'MemoryHigh',
281             {
282             'description' => 'Specify the throttling limit on memory usage of the executed processes in this unit. Memory usage may go
283             above the limit if unavoidable, but the processes are heavily slowed down and memory is taken away
284             aggressively in such cases. This is the main mechanism to control memory usage of a unit.
285              
286             Takes a memory size in bytes. If the value is suffixed with K, M, G or T, the specified memory size is
287             parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. Alternatively, a
288             percentage value may be specified, which is taken relative to the installed physical memory on the
289             system. If assigned the
290             special value C<infinity>, no memory throttling is applied. This controls the
291             C<memory.high> control group attribute. For details about this control group attribute, see
292             L<Memory Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#memory-interface-files>.
293              
294             This setting is supported only if the unified control group hierarchy is used and disables
295             C<MemoryLimit>.',
296             'type' => 'leaf',
297             'value_type' => 'uniline'
298             },
299             'MemoryMax',
300             {
301             'description' => 'Specify the absolute limit on memory usage of the executed processes in this unit. If memory usage
302             cannot be contained under the limit, out-of-memory killer is invoked inside the unit. It is recommended to
303             use C<MemoryHigh> as the main control mechanism and use C<MemoryMax> as the
304             last line of defense.
305              
306             Takes a memory size in bytes. If the value is suffixed with K, M, G or T, the specified memory size is
307             parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. Alternatively, a
308             percentage value may be specified, which is taken relative to the installed physical memory on the system. If
309             assigned the special value C<infinity>, no memory limit is applied. This controls the
310             C<memory.max> control group attribute. For details about this control group attribute, see
311             L<Memory Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#memory-interface-files>.
312              
313             This setting replaces C<MemoryLimit>.',
314             'type' => 'leaf',
315             'value_type' => 'uniline'
316             },
317             'MemorySwapMax',
318             {
319             'description' => 'Specify the absolute limit on swap usage of the executed processes in this unit.
320              
321             Takes a swap size in bytes. If the value is suffixed with K, M, G or T, the specified swap size is
322             parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. If assigned the
323             special value C<infinity>, no swap limit is applied. This controls the
324             C<memory.swap.max> control group attribute. For details about this control group attribute,
325             see L<Memory Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#memory-interface-files>.
326              
327             This setting is supported only if the unified control group hierarchy is used and disables
328             C<MemoryLimit>.',
329             'type' => 'leaf',
330             'value_type' => 'uniline'
331             },
332             'TasksAccounting',
333             {
334             'description' => 'Turn on task accounting for this unit. Takes a
335             boolean argument. If enabled, the system manager will keep
336             track of the number of tasks in the unit. The number of
337             tasks accounted this way includes both kernel threads and
338             userspace processes, with each thread counting
339             individually. Note that turning on tasks accounting for one
340             unit will also implicitly turn it on for all units contained
341             in the same slice and for all its parent slices and the
342             units contained therein. The system default for this setting
343             may be controlled with
344             C<DefaultTasksAccounting> in
345             L<systemd-system.conf(5)>.',
346             'type' => 'leaf',
347             'value_type' => 'boolean',
348             'write_as' => [
349             'no',
350             'yes'
351             ]
352             },
353             'TasksMax',
354             {
355             'description' => 'Specify the maximum number of tasks that may be created in the unit. This ensures that the number of
356             tasks accounted for the unit (see above) stays below a specific limit. This either takes an absolute number
357             of tasks or a percentage value that is taken relative to the configured maximum number of tasks on the
358             system. If assigned the special value C<infinity>, no tasks limit is applied. This controls
359             the C<pids.max> control group attribute. For details about this control group attribute, see
360             L<Process Number Controller|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/pids.html>.
361              
362             The system default for this setting may be controlled with
363             C<DefaultTasksMax> in
364             L<systemd-system.conf(5)>.',
365             'type' => 'leaf',
366             'value_type' => 'uniline'
367             },
368             'IOAccounting',
369             {
370             'description' => 'Turn on Block I/O accounting for this unit, if the unified control group hierarchy is used on the
371             system. Takes a boolean argument. Note that turning on block I/O accounting for one unit will also implicitly
372             turn it on for all units contained in the same slice and all for its parent slices and the units contained
373             therein. The system default for this setting may be controlled with C<DefaultIOAccounting>
374             in
375             L<systemd-system.conf(5)>.
376              
377             This setting replaces C<BlockIOAccounting> and disables settings prefixed with
378             C<BlockIO> or C<StartupBlockIO>.',
379             'type' => 'leaf',
380             'value_type' => 'boolean',
381             'write_as' => [
382             'no',
383             'yes'
384             ]
385             },
386             'IOWeight',
387             {
388             'description' => 'Set the default overall block I/O weight for the executed processes, if the unified control
389             group hierarchy is used on the system. Takes a single weight value (between 1 and 10000) to set the
390             default block I/O weight. This controls the C<io.weight> control group attribute,
391             which defaults to 100. For details about this control group attribute, see L<IO
392             Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files>. The available I/O bandwidth is split up among all units within one slice
393             relative to their block I/O weight. A higher weight means more I/O bandwidth, a lower weight means
394             less.
395              
396             While C<StartupIOWeight> applies
397             to the startup and shutdown phases of the system,
398             C<IOWeight> applies to the later runtime of
399             the system, and if the former is not set also to the startup
400             and shutdown phases. This allows prioritizing specific services at boot-up
401             and shutdown differently than during runtime.
402              
403             These settings replace C<BlockIOWeight> and C<StartupBlockIOWeight>
404             and disable settings prefixed with C<BlockIO> or C<StartupBlockIO>.',
405             'type' => 'leaf',
406             'value_type' => 'uniline'
407             },
408             'StartupIOWeight',
409             {
410             'description' => 'Set the default overall block I/O weight for the executed processes, if the unified control
411             group hierarchy is used on the system. Takes a single weight value (between 1 and 10000) to set the
412             default block I/O weight. This controls the C<io.weight> control group attribute,
413             which defaults to 100. For details about this control group attribute, see L<IO
414             Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files>. The available I/O bandwidth is split up among all units within one slice
415             relative to their block I/O weight. A higher weight means more I/O bandwidth, a lower weight means
416             less.
417              
418             While C<StartupIOWeight> applies
419             to the startup and shutdown phases of the system,
420             C<IOWeight> applies to the later runtime of
421             the system, and if the former is not set also to the startup
422             and shutdown phases. This allows prioritizing specific services at boot-up
423             and shutdown differently than during runtime.
424              
425             These settings replace C<BlockIOWeight> and C<StartupBlockIOWeight>
426             and disable settings prefixed with C<BlockIO> or C<StartupBlockIO>.',
427             'type' => 'leaf',
428             'value_type' => 'uniline'
429             },
430             'IODeviceWeight',
431             {
432             'description' => 'Set the per-device overall block I/O weight for the executed processes, if the unified control group
433             hierarchy is used on the system. Takes a space-separated pair of a file path and a weight value to specify
434             the device specific weight value, between 1 and 10000. (Example: C</dev/sda 1000>). The file
435             path may be specified as path to a block device node or as any other file, in which case the backing block
436             device of the file system of the file is determined. This controls the C<io.weight> control
437             group attribute, which defaults to 100. Use this option multiple times to set weights for multiple devices.
438             For details about this control group attribute, see L<IO Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files>.
439              
440             This setting replaces C<BlockIODeviceWeight> and disables settings prefixed with
441             C<BlockIO> or C<StartupBlockIO>.
442              
443             The specified device node should reference a block device that has an I/O scheduler
444             associated, i.e. should not refer to partition or loopback block devices, but to the originating,
445             physical device. When a path to a regular file or directory is specified it is attempted to
446             discover the correct originating device backing the file system of the specified path. This works
447             correctly only for simpler cases, where the file system is directly placed on a partition or
448             physical block device, or where simple 1:1 encryption using dm-crypt/LUKS is used. This discovery
449             does not cover complex storage and in particular RAID and volume management storage devices.',
450             'type' => 'leaf',
451             'value_type' => 'uniline'
452             },
453             'IOReadBandwidthMax',
454             {
455             'description' => 'Set the per-device overall block I/O bandwidth maximum limit for the executed processes, if the unified
456             control group hierarchy is used on the system. This limit is not work-conserving and the executed processes
457             are not allowed to use more even if the device has idle capacity. Takes a space-separated pair of a file
458             path and a bandwidth value (in bytes per second) to specify the device specific bandwidth. The file path may
459             be a path to a block device node, or as any other file in which case the backing block device of the file
460             system of the file is used. If the bandwidth is suffixed with K, M, G, or T, the specified bandwidth is
461             parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes, respectively, to the base of 1000. (Example:
462             "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 5M"). This controls the C<io.max> control
463             group attributes. Use this option multiple times to set bandwidth limits for multiple devices. For details
464             about this control group attribute, see L<IO Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files>.
465              
466             These settings replace C<BlockIOReadBandwidth> and
467             C<BlockIOWriteBandwidth> and disable settings prefixed with C<BlockIO> or
468             C<StartupBlockIO>.
469              
470             Similar restrictions on block device discovery as for C<IODeviceWeight> apply, see above.',
471             'type' => 'leaf',
472             'value_type' => 'uniline'
473             },
474             'IOWriteBandwidthMax',
475             {
476             'description' => 'Set the per-device overall block I/O bandwidth maximum limit for the executed processes, if the unified
477             control group hierarchy is used on the system. This limit is not work-conserving and the executed processes
478             are not allowed to use more even if the device has idle capacity. Takes a space-separated pair of a file
479             path and a bandwidth value (in bytes per second) to specify the device specific bandwidth. The file path may
480             be a path to a block device node, or as any other file in which case the backing block device of the file
481             system of the file is used. If the bandwidth is suffixed with K, M, G, or T, the specified bandwidth is
482             parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes, respectively, to the base of 1000. (Example:
483             "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 5M"). This controls the C<io.max> control
484             group attributes. Use this option multiple times to set bandwidth limits for multiple devices. For details
485             about this control group attribute, see L<IO Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files>.
486              
487             These settings replace C<BlockIOReadBandwidth> and
488             C<BlockIOWriteBandwidth> and disable settings prefixed with C<BlockIO> or
489             C<StartupBlockIO>.
490              
491             Similar restrictions on block device discovery as for C<IODeviceWeight> apply, see above.',
492             'type' => 'leaf',
493             'value_type' => 'uniline'
494             },
495             'IOReadIOPSMax',
496             {
497             'description' => 'Set the per-device overall block I/O IOs-Per-Second maximum limit for the executed processes, if the
498             unified control group hierarchy is used on the system. This limit is not work-conserving and the executed
499             processes are not allowed to use more even if the device has idle capacity. Takes a space-separated pair of
500             a file path and an IOPS value to specify the device specific IOPS. The file path may be a path to a block
501             device node, or as any other file in which case the backing block device of the file system of the file is
502             used. If the IOPS is suffixed with K, M, G, or T, the specified IOPS is parsed as KiloIOPS, MegaIOPS,
503             GigaIOPS, or TeraIOPS, respectively, to the base of 1000. (Example:
504             "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 1K"). This controls the C<io.max> control
505             group attributes. Use this option multiple times to set IOPS limits for multiple devices. For details about
506             this control group attribute, see L<IO Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files>.
507              
508             These settings are supported only if the unified control group hierarchy is used and disable settings
509             prefixed with C<BlockIO> or C<StartupBlockIO>.
510              
511             Similar restrictions on block device discovery as for C<IODeviceWeight> apply, see above.',
512             'type' => 'leaf',
513             'value_type' => 'uniline'
514             },
515             'IOWriteIOPSMax',
516             {
517             'description' => 'Set the per-device overall block I/O IOs-Per-Second maximum limit for the executed processes, if the
518             unified control group hierarchy is used on the system. This limit is not work-conserving and the executed
519             processes are not allowed to use more even if the device has idle capacity. Takes a space-separated pair of
520             a file path and an IOPS value to specify the device specific IOPS. The file path may be a path to a block
521             device node, or as any other file in which case the backing block device of the file system of the file is
522             used. If the IOPS is suffixed with K, M, G, or T, the specified IOPS is parsed as KiloIOPS, MegaIOPS,
523             GigaIOPS, or TeraIOPS, respectively, to the base of 1000. (Example:
524             "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 1K"). This controls the C<io.max> control
525             group attributes. Use this option multiple times to set IOPS limits for multiple devices. For details about
526             this control group attribute, see L<IO Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files>.
527              
528             These settings are supported only if the unified control group hierarchy is used and disable settings
529             prefixed with C<BlockIO> or C<StartupBlockIO>.
530              
531             Similar restrictions on block device discovery as for C<IODeviceWeight> apply, see above.',
532             'type' => 'leaf',
533             'value_type' => 'uniline'
534             },
535             'IODeviceLatencyTargetSec',
536             {
537             'description' => 'Set the per-device average target I/O latency for the executed processes, if the unified control group
538             hierarchy is used on the system. Takes a file path and a timespan separated by a space to specify
539             the device specific latency target. (Example: "/dev/sda 25ms"). The file path may be specified
540             as path to a block device node or as any other file, in which case the backing block device of the file
541             system of the file is determined. This controls the C<io.latency> control group
542             attribute. Use this option multiple times to set latency target for multiple devices. For details about this
543             control group attribute, see L<IO Interface Files|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io-interface-files>.
544              
545             Implies C<IOAccounting=yes>.
546              
547             These settings are supported only if the unified control group hierarchy is used.
548              
549             Similar restrictions on block device discovery as for C<IODeviceWeight> apply, see above.',
550             'type' => 'leaf',
551             'value_type' => 'uniline'
552             },
553             'IPAccounting',
554             {
555             'description' => "Takes a boolean argument. If true, turns on IPv4 and IPv6 network traffic accounting for packets sent
556             or received by the unit. When this option is turned on, all IPv4 and IPv6 sockets created by any process of
557             the unit are accounted for.
558              
559             When this option is used in socket units, it applies to all IPv4 and IPv6 sockets
560             associated with it (including both listening and connection sockets where this applies). Note that for
561             socket-activated services, this configuration setting and the accounting data of the service unit and the
562             socket unit are kept separate, and displayed separately. No propagation of the setting and the collected
563             statistics is done, in either direction. Moreover, any traffic sent or received on any of the socket unit's
564             sockets is accounted to the socket unit \x{2014} and never to the service unit it might have activated, even if the
565             socket is used by it.
566              
567             The system default for this setting may be controlled with C<DefaultIPAccounting> in
568             L<systemd-system.conf(5)>.",
569             'type' => 'leaf',
570             'value_type' => 'boolean',
571             'write_as' => [
572             'no',
573             'yes'
574             ]
575             },
576             'IPAddressAllow',
577             {
578             'description' => "Turn on network traffic filtering for IP packets sent and received over
579             C<AF_INET> and C<AF_INET6> sockets. Both directives take a
580             space separated list of IPv4 or IPv6 addresses, each optionally suffixed with an address prefix
581             length in bits after a C</> character. If the suffix is omitted, the address is
582             considered a host address, i.e. the filter covers the whole address (32 bits for IPv4, 128 bits for
583             IPv6).
584              
585             The access lists configured with this option are applied to all sockets created by processes
586             of this unit (or in the case of socket units, associated with it). The lists are implicitly
587             combined with any lists configured for any of the parent slice units this unit might be a member
588             of. By default both access lists are empty. Both ingress and egress traffic is filtered by these
589             settings. In case of ingress traffic the source IP address is checked against these access lists,
590             in case of egress traffic the destination IP address is checked. The following rules are applied in
591             turn:
592              
593             In order to implement an allow-listing IP firewall, it is recommended to use a
594             C<IPAddressDeny>C<any> setting on an upper-level slice unit
595             (such as the root slice C<-.slice> or the slice containing all system services
596             C<system.slice> \x{2013} see
597             L<systemd.special(7)>
598             for details on these slice units), plus individual per-service C<IPAddressAllow>
599             lines permitting network access to relevant services, and only them.
600              
601             Note that for socket-activated services, the IP access list configured on the socket unit
602             applies to all sockets associated with it directly, but not to any sockets created by the
603             ultimately activated services for it. Conversely, the IP access list configured for the service is
604             not applied to any sockets passed into the service via socket activation. Thus, it is usually a
605             good idea to replicate the IP access lists on both the socket and the service unit. Nevertheless,
606             it may make sense to maintain one list more open and the other one more restricted, depending on
607             the usecase.
608              
609             If these settings are used multiple times in the same unit the specified lists are combined. If an
610             empty string is assigned to these settings the specific access list is reset and all previous settings undone.
611              
612             In place of explicit IPv4 or IPv6 address and prefix length specifications a small set of symbolic
613             names may be used. The following names are defined:
614              
615             Note that these settings might not be supported on some systems (for example if eBPF control group
616             support is not enabled in the underlying kernel or container manager). These settings will have no effect in
617             that case. If compatibility with such systems is desired it is hence recommended to not exclusively rely on
618             them for IP security.",
619             'type' => 'leaf',
620             'value_type' => 'uniline'
621             },
622             'IPAddressDeny',
623             {
624             'description' => "Turn on network traffic filtering for IP packets sent and received over
625             C<AF_INET> and C<AF_INET6> sockets. Both directives take a
626             space separated list of IPv4 or IPv6 addresses, each optionally suffixed with an address prefix
627             length in bits after a C</> character. If the suffix is omitted, the address is
628             considered a host address, i.e. the filter covers the whole address (32 bits for IPv4, 128 bits for
629             IPv6).
630              
631             The access lists configured with this option are applied to all sockets created by processes
632             of this unit (or in the case of socket units, associated with it). The lists are implicitly
633             combined with any lists configured for any of the parent slice units this unit might be a member
634             of. By default both access lists are empty. Both ingress and egress traffic is filtered by these
635             settings. In case of ingress traffic the source IP address is checked against these access lists,
636             in case of egress traffic the destination IP address is checked. The following rules are applied in
637             turn:
638              
639             In order to implement an allow-listing IP firewall, it is recommended to use a
640             C<IPAddressDeny>C<any> setting on an upper-level slice unit
641             (such as the root slice C<-.slice> or the slice containing all system services
642             C<system.slice> \x{2013} see
643             L<systemd.special(7)>
644             for details on these slice units), plus individual per-service C<IPAddressAllow>
645             lines permitting network access to relevant services, and only them.
646              
647             Note that for socket-activated services, the IP access list configured on the socket unit
648             applies to all sockets associated with it directly, but not to any sockets created by the
649             ultimately activated services for it. Conversely, the IP access list configured for the service is
650             not applied to any sockets passed into the service via socket activation. Thus, it is usually a
651             good idea to replicate the IP access lists on both the socket and the service unit. Nevertheless,
652             it may make sense to maintain one list more open and the other one more restricted, depending on
653             the usecase.
654              
655             If these settings are used multiple times in the same unit the specified lists are combined. If an
656             empty string is assigned to these settings the specific access list is reset and all previous settings undone.
657              
658             In place of explicit IPv4 or IPv6 address and prefix length specifications a small set of symbolic
659             names may be used. The following names are defined:
660              
661             Note that these settings might not be supported on some systems (for example if eBPF control group
662             support is not enabled in the underlying kernel or container manager). These settings will have no effect in
663             that case. If compatibility with such systems is desired it is hence recommended to not exclusively rely on
664             them for IP security.",
665             'type' => 'leaf',
666             'value_type' => 'uniline'
667             },
668             'IPIngressFilterPath',
669             {
670             'description' => 'Add custom network traffic filters implemented as BPF programs, applying to all IP packets
671             sent and received over C<AF_INET> and C<AF_INET6> sockets.
672             Takes an absolute path to a pinned BPF program in the BPF virtual filesystem (C</sys/fs/bpf/>).
673              
674             The filters configured with this option are applied to all sockets created by processes
675             of this unit (or in the case of socket units, associated with it). The filters are loaded in addition
676             to filters any of the parent slice units this unit might be a member of as well as any
677             C<IPAddressAllow> and C<IPAddressDeny> filters in any of these units.
678             By default there are no filters specified.
679              
680             If these settings are used multiple times in the same unit all the specified programs are attached. If an
681             empty string is assigned to these settings the program list is reset and all previous specified programs ignored.
682              
683             If the path BPF_FS_PROGRAM_PATH in C<IPIngressFilterPath> assignment
684             is already being handled by C<BPFProgram> ingress hook, e.g.
685             C<BPFProgram>C<ingress>:BPF_FS_PROGRAM_PATH,
686             the assignment will be still considered valid and the program will be attached to a cgroup. Same for
687             C<IPEgressFilterPath> path and C<egress> hook.
688              
689             Note that for socket-activated services, the IP filter programs configured on the socket unit apply to
690             all sockets associated with it directly, but not to any sockets created by the ultimately activated services
691             for it. Conversely, the IP filter programs configured for the service are not applied to any sockets passed into
692             the service via socket activation. Thus, it is usually a good idea, to replicate the IP filter programs on both
693             the socket and the service unit, however it often makes sense to maintain one configuration more open and the other
694             one more restricted, depending on the usecase.
695              
696             Note that these settings might not be supported on some systems (for example if eBPF control group
697             support is not enabled in the underlying kernel or container manager). These settings will fail the service in
698             that case. If compatibility with such systems is desired it is hence recommended to attach your filter manually
699             (requires C<Delegate>C<yes>) instead of using this setting.',
700             'type' => 'leaf',
701             'value_type' => 'uniline'
702             },
703             'IPEgressFilterPath',
704             {
705             'description' => 'Add custom network traffic filters implemented as BPF programs, applying to all IP packets
706             sent and received over C<AF_INET> and C<AF_INET6> sockets.
707             Takes an absolute path to a pinned BPF program in the BPF virtual filesystem (C</sys/fs/bpf/>).
708              
709             The filters configured with this option are applied to all sockets created by processes
710             of this unit (or in the case of socket units, associated with it). The filters are loaded in addition
711             to filters any of the parent slice units this unit might be a member of as well as any
712             C<IPAddressAllow> and C<IPAddressDeny> filters in any of these units.
713             By default there are no filters specified.
714              
715             If these settings are used multiple times in the same unit all the specified programs are attached. If an
716             empty string is assigned to these settings the program list is reset and all previous specified programs ignored.
717              
718             If the path BPF_FS_PROGRAM_PATH in C<IPIngressFilterPath> assignment
719             is already being handled by C<BPFProgram> ingress hook, e.g.
720             C<BPFProgram>C<ingress>:BPF_FS_PROGRAM_PATH,
721             the assignment will be still considered valid and the program will be attached to a cgroup. Same for
722             C<IPEgressFilterPath> path and C<egress> hook.
723              
724             Note that for socket-activated services, the IP filter programs configured on the socket unit apply to
725             all sockets associated with it directly, but not to any sockets created by the ultimately activated services
726             for it. Conversely, the IP filter programs configured for the service are not applied to any sockets passed into
727             the service via socket activation. Thus, it is usually a good idea, to replicate the IP filter programs on both
728             the socket and the service unit, however it often makes sense to maintain one configuration more open and the other
729             one more restricted, depending on the usecase.
730              
731             Note that these settings might not be supported on some systems (for example if eBPF control group
732             support is not enabled in the underlying kernel or container manager). These settings will fail the service in
733             that case. If compatibility with such systems is desired it is hence recommended to attach your filter manually
734             (requires C<Delegate>C<yes>) instead of using this setting.',
735             'type' => 'leaf',
736             'value_type' => 'uniline'
737             },
738             'BPFProgram',
739             {
740             'description' => 'Add a custom cgroup BPF program.
741              
742             C<BPFProgram> allows attaching BPF hooks to the cgroup of a systemd unit.
743             (This generalizes the functionality exposed via C<IPEgressFilterPath> for egress and
744             C<IPIngressFilterPath> for ingress.)
745             Cgroup-bpf hooks in the form of BPF programs loaded to the BPF filesystem are attached with cgroup-bpf attach
746             flags determined by the unit. For details about attachment types and flags see L<|https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/include/uapi/linux/bpf.h>.
747             For general BPF documentation please refer to L<|https://www.kernel.org/doc/html/latest/bpf/index.html>.
748              
749             The specification of BPF program consists of a type followed by a
750             program-path with C<:> as the separator:
751             typeC<:>program-path.
752              
753             type is the string name of BPF attach type also used in
754             bpftool. type can be one of C<egress>,
755             C<ingress>, C<sock_create>, C<sock_ops>,
756             C<device>, C<bind4>, C<bind6>,
757             C<connect4>, C<connect6>, C<post_bind4>,
758             C<post_bind6>, C<sendmsg4>, C<sendmsg6>,
759             C<sysctl>, C<recvmsg4>, C<recvmsg6>,
760             C<getsockopt>, C<setsockopt>.
761              
762             Setting C<BPFProgram> to an empty value makes previous assignments ineffective.
763              
764             Multiple assignments of the same type:program-path
765             value have the same effect as a single assignment: the program with the path program-path
766             will be attached to cgroup hook type just once.
767              
768             If BPF C<egress> pinned to program-path path is already being
769             handled by C<IPEgressFilterPath>, C<BPFProgram>
770             assignment will be considered valid and C<BPFProgram> will be attached to a cgroup.
771             Similarly for C<ingress> hook and C<IPIngressFilterPath> assignment.
772              
773             BPF programs passed with C<BPFProgram> are attached to the cgroup of a unit with BPF
774             attach flag C<multi>, that allows further attachments of the same
775             type within cgroup hierarchy topped by the unit cgroup.
776              
777             Examples:
778              
779             BPFProgram=egress:/sys/fs/bpf/egress-hook
780             BPFProgram=bind6:/sys/fs/bpf/sock-addr-hook
781              
782             ',
783             'type' => 'leaf',
784             'value_type' => 'uniline'
785             },
786             'SocketBindAllow',
787             {
788             'description' => "Allow or deny binding a socket address to a socket by matching it with the bind-rule and
789             applying a corresponding action if there is a match.
790              
791             bind-rule describes socket properties such as address-family,
792             transport-protocol and ip-ports.
793              
794             bind-rule :=
795             { [address-familyC<:>][transport-protocolC<:>][ip-ports] | C<any> }
796              
797             address-family := { C<ipv4> | C<ipv6> }
798              
799             transport-protocol := { C<tcp> | C<udp> }
800              
801             ip-ports := { ip-port | ip-port-range }
802              
803             An optional address-family expects C<ipv4> or C<ipv6> values.
804             If not specified, a rule will be matched for both IPv4 and IPv6 addresses and applied depending on other socket fields, e.g. transport-protocol,
805             ip-port.
806              
807             An optional transport-protocol expects C<tcp> or C<udp> transport protocol names.
808             If not specified, a rule will be matched for any transport protocol.
809              
810             An optional ip-port value must lie within 1\x{2026}65535 interval inclusively, i.e.
811             dynamic port C<0> is not allowed. A range of sequential ports is described by
812             ip-port-range := ip-port-lowC<->ip-port-high,
813             where ip-port-low is smaller than or equal to ip-port-high
814             and both are within 1\x{2026}65535 inclusively.
815              
816             A special value C<any> can be used to apply a rule to any address family, transport protocol and any port with a positive value.
817              
818             To allow multiple rules assign C<SocketBindAllow> or C<SocketBindDeny> multiple times.
819             To clear the existing assignments pass an empty C<SocketBindAllow> or C<SocketBindDeny>
820             assignment.
821              
822             For each of C<SocketBindAllow> and C<SocketBindDeny>, maximum allowed number of assignments is
823             C<128>.
824              
825             The feature is implemented with C<cgroup/bind4> and C<cgroup/bind6> cgroup-bpf hooks.
826              
827             Examples:
828             \x{2026}
829             # Allow binding IPv6 socket addresses with a port greater than or equal to 10000.
830             [Service]
831             SocketBindAllow=ipv6:10000-65535
832             SocketBindDeny=any
833             \x{2026}
834             # Allow binding IPv4 and IPv6 socket addresses with 1234 and 4321 ports.
835             [Service]
836             SocketBindAllow=1234
837             SocketBindAllow=4321
838             SocketBindDeny=any
839             \x{2026}
840             # Deny binding IPv6 socket addresses.
841             [Service]
842             SocketBindDeny=ipv6
843             \x{2026}
844             # Deny binding IPv4 and IPv6 socket addresses.
845             [Service]
846             SocketBindDeny=any
847             \x{2026}
848             # Allow binding only over TCP
849             [Service]
850             SocketBindAllow=tcp
851             SocketBindDeny=any
852             \x{2026}
853             # Allow binding only over IPv6/TCP
854             [Service]
855             SocketBindAllow=ipv6:tcp
856             SocketBindDeny=any
857             \x{2026}
858             # Allow binding ports within 10000-65535 range over IPv4/UDP.
859             [Service]
860             SocketBindAllow=ipv4:udp:10000-65535
861             SocketBindDeny=any
862             \x{2026}
863             ",
864             'type' => 'leaf',
865             'value_type' => 'uniline'
866             },
867             'SocketBindDeny',
868             {
869             'description' => "Allow or deny binding a socket address to a socket by matching it with the bind-rule and
870             applying a corresponding action if there is a match.
871              
872             bind-rule describes socket properties such as address-family,
873             transport-protocol and ip-ports.
874              
875             bind-rule :=
876             { [address-familyC<:>][transport-protocolC<:>][ip-ports] | C<any> }
877              
878             address-family := { C<ipv4> | C<ipv6> }
879              
880             transport-protocol := { C<tcp> | C<udp> }
881              
882             ip-ports := { ip-port | ip-port-range }
883              
884             An optional address-family expects C<ipv4> or C<ipv6> values.
885             If not specified, a rule will be matched for both IPv4 and IPv6 addresses and applied depending on other socket fields, e.g. transport-protocol,
886             ip-port.
887              
888             An optional transport-protocol expects C<tcp> or C<udp> transport protocol names.
889             If not specified, a rule will be matched for any transport protocol.
890              
891             An optional ip-port value must lie within 1\x{2026}65535 interval inclusively, i.e.
892             dynamic port C<0> is not allowed. A range of sequential ports is described by
893             ip-port-range := ip-port-lowC<->ip-port-high,
894             where ip-port-low is smaller than or equal to ip-port-high
895             and both are within 1\x{2026}65535 inclusively.
896              
897             A special value C<any> can be used to apply a rule to any address family, transport protocol and any port with a positive value.
898              
899             To allow multiple rules assign C<SocketBindAllow> or C<SocketBindDeny> multiple times.
900             To clear the existing assignments pass an empty C<SocketBindAllow> or C<SocketBindDeny>
901             assignment.
902              
903             For each of C<SocketBindAllow> and C<SocketBindDeny>, maximum allowed number of assignments is
904             C<128>.
905              
906             The feature is implemented with C<cgroup/bind4> and C<cgroup/bind6> cgroup-bpf hooks.
907              
908             Examples:
909             \x{2026}
910             # Allow binding IPv6 socket addresses with a port greater than or equal to 10000.
911             [Service]
912             SocketBindAllow=ipv6:10000-65535
913             SocketBindDeny=any
914             \x{2026}
915             # Allow binding IPv4 and IPv6 socket addresses with 1234 and 4321 ports.
916             [Service]
917             SocketBindAllow=1234
918             SocketBindAllow=4321
919             SocketBindDeny=any
920             \x{2026}
921             # Deny binding IPv6 socket addresses.
922             [Service]
923             SocketBindDeny=ipv6
924             \x{2026}
925             # Deny binding IPv4 and IPv6 socket addresses.
926             [Service]
927             SocketBindDeny=any
928             \x{2026}
929             # Allow binding only over TCP
930             [Service]
931             SocketBindAllow=tcp
932             SocketBindDeny=any
933             \x{2026}
934             # Allow binding only over IPv6/TCP
935             [Service]
936             SocketBindAllow=ipv6:tcp
937             SocketBindDeny=any
938             \x{2026}
939             # Allow binding ports within 10000-65535 range over IPv4/UDP.
940             [Service]
941             SocketBindAllow=ipv4:udp:10000-65535
942             SocketBindDeny=any
943             \x{2026}
944             ",
945             'type' => 'leaf',
946             'value_type' => 'uniline'
947             },
948             'RestrictNetworkInterfaces',
949             {
950             'description' => 'Takes a list of space-separated network interface names. This option restricts the network
951             interfaces that processes of this unit can use. By default processes can only use the network interfaces
952             listed (allow-list). If the first character of the rule is C<~>, the effect is inverted:
953             the processes can only use network interfaces not listed (deny-list).
954              
955             This option can appear multiple times, in which case the network interface names are merged. If the
956             empty string is assigned the set is reset, all prior assignments will have not effect.
957              
958             If you specify both types of this option (i.e. allow-listing and deny-listing), the first encountered
959             will take precedence and will dictate the default action (allow vs deny). Then the next occurrences of this
960             option will add or delete the listed network interface names from the set, depending of its type and the
961             default action.
962              
963             The loopback interface ("lo") is not treated in any special way, you have to configure it explicitly
964             in the unit file.
965              
966             Example 1: allow-list
967              
968              
969             RestrictNetworkInterfaces=eth1
970             RestrictNetworkInterfaces=eth2
971              
972             Programs in the unit will be only able to use the eth1 and eth2 network
973             interfaces.
974              
975             Example 2: deny-list
976              
977              
978             RestrictNetworkInterfaces=~eth1 eth2
979              
980             Programs in the unit will be able to use any network interface but eth1 and eth2.
981              
982             Example 3: mixed
983              
984              
985             RestrictNetworkInterfaces=eth1 eth2
986             RestrictNetworkInterfaces=~eth1
987              
988             Programs in the unit will be only able to use the eth2 network interface.
989             ',
990             'type' => 'leaf',
991             'value_type' => 'uniline'
992             },
993             'DeviceAllow',
994             {
995             'cargo' => {
996             'type' => 'leaf',
997             'value_type' => 'uniline'
998             },
999             'description' => "Control access to specific device nodes by the executed processes. Takes two space-separated
1000             strings: a device node specifier followed by a combination of C<r>,
1001             C<w>, C<m> to control reading,
1002             writing, or creation of the specific device node(s) by the unit
1003             (mknod), respectively. On cgroup-v1 this controls the
1004             C<devices.allow> control group attribute. For details about this control group
1005             attribute, see L<Device Whitelist Controller|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/devices.html>.
1006             In the unified cgroup hierarchy this functionality is implemented using eBPF filtering.
1007              
1008             When access to all physical devices should be disallowed,
1009             C<PrivateDevices> may be used instead. See
1010             L<systemd.exec(5)>.
1011              
1012             The device node specifier is either a path to a device node in the file system, starting with
1013             C</dev/>, or a string starting with either C<char-> or
1014             C<block-> followed by a device group name, as listed in
1015             C</proc/devices>. The latter is useful to allow-list all current and future
1016             devices belonging to a specific device group at once. The device group is matched according to
1017             filename globbing rules, you may hence use the C<*> and C<?>
1018             wildcards. (Note that such globbing wildcards are not available for device node path
1019             specifications!) In order to match device nodes by numeric major/minor, use device node paths in
1020             the C</dev/char/> and C</dev/block/> directories. However,
1021             matching devices by major/minor is generally not recommended as assignments are neither stable nor
1022             portable between systems or different kernel versions.
1023              
1024             Examples: C</dev/sda5> is a path to a device node, referring to an ATA or
1025             SCSI block device. C<char-pts> and C<char-alsa> are specifiers for
1026             all pseudo TTYs and all ALSA sound devices, respectively. C<char-cpu/*> is a
1027             specifier matching all CPU related device groups.
1028              
1029             Note that allow lists defined this way should only reference device groups which are
1030             resolvable at the time the unit is started. Any device groups not resolvable then are not added to
1031             the device allow list. In order to work around this limitation, consider extending service units
1032             with a pair of After=modprobe\@xyz.service and
1033             Wants=modprobe\@xyz.service lines that load the necessary kernel module
1034             implementing the device group if missing.
1035             Example:
1036             \x{2026}
1037             [Unit]
1038             Wants=modprobe\@loop.service
1039             After=modprobe\@loop.service
1040             [Service]
1041             DeviceAllow=block-loop
1042             DeviceAllow=/dev/loop-control
1043             \x{2026}
1044             ",
1045             'type' => 'list'
1046             },
1047             'DevicePolicy',
1048             {
1049             'choice' => [
1050             'auto',
1051             'closed',
1052             'strict'
1053             ],
1054             'description' => '
1055             Control the policy for allowing device access:
1056             ',
1057             'type' => 'leaf',
1058             'value_type' => 'enum'
1059             },
1060             'Slice',
1061             {
1062             'description' => 'The name of the slice unit to place the unit
1063             in. Defaults to C<system.slice> for all
1064             non-instantiated units of all unit types (except for slice
1065             units themselves see below). Instance units are by default
1066             placed in a subslice of C<system.slice>
1067             that is named after the template name.
1068              
1069             This option may be used to arrange systemd units in a
1070             hierarchy of slices each of which might have resource
1071             settings applied.
1072              
1073             For units of type slice, the only accepted value for
1074             this setting is the parent slice. Since the name of a slice
1075             unit implies the parent slice, it is hence redundant to ever
1076             set this parameter directly for slice units.
1077              
1078             Special care should be taken when relying on the default slice assignment in templated service units
1079             that have C<DefaultDependencies=no> set, see
1080             L<systemd.service(5)>, section
1081             "Default Dependencies" for details.',
1082             'type' => 'leaf',
1083             'value_type' => 'uniline'
1084             },
1085             'Delegate',
1086             {
1087             'description' => 'Turns on delegation of further resource control partitioning to processes of the unit. Units where this
1088             is enabled may create and manage their own private subhierarchy of control groups below the control group of
1089             the unit itself. For unprivileged services (i.e. those using the C<User> setting) the unit\'s
1090             control group will be made accessible to the relevant user. When enabled the service manager will refrain
1091             from manipulating control groups or moving processes below the unit\'s control group, so that a clear concept
1092             of ownership is established: the control group tree above the unit\'s control group (i.e. towards the root
1093             control group) is owned and managed by the service manager of the host, while the control group tree below
1094             the unit\'s control group is owned and managed by the unit itself. Takes either a boolean argument or a list
1095             of control group controller names. If true, delegation is turned on, and all supported controllers are
1096             enabled for the unit, making them available to the unit\'s processes for management. If false, delegation is
1097             turned off entirely (and no additional controllers are enabled). If set to a list of controllers, delegation
1098             is turned on, and the specified controllers are enabled for the unit. Note that additional controllers than
1099             the ones specified might be made available as well, depending on configuration of the containing slice unit
1100             or other units contained in it. Note that assigning the empty string will enable delegation, but reset the
1101             list of controllers, all assignments prior to this will have no effect. Defaults to false.
1102              
1103             Note that controller delegation to less privileged code is only safe on the unified control group
1104             hierarchy. Accordingly, access to the specified controllers will not be granted to unprivileged services on
1105             the legacy hierarchy, even when requested.
1106              
1107             Not all of these controllers are available on all kernels however, and some are
1108             specific to the unified hierarchy while others are specific to the legacy hierarchy. Also note that the
1109             kernel might support further controllers, which aren\'t covered here yet as delegation is either not supported
1110             at all for them or not defined cleanly.
1111              
1112             For further details on the delegation model consult L<Control Group APIs and Delegation|https://systemd.io/CGROUP_DELEGATION>.',
1113             'type' => 'leaf',
1114             'value_type' => 'uniline'
1115             },
1116             'DisableControllers',
1117             {
1118             'description' => 'Disables controllers from being enabled for a unit\'s children. If a controller listed is already in use
1119             in its subtree, the controller will be removed from the subtree. This can be used to avoid child units being
1120             able to implicitly or explicitly enable a controller. Defaults to not disabling any controllers.
1121              
1122             It may not be possible to successfully disable a controller if the unit or any child of the unit in
1123             question delegates controllers to its children, as any delegated subtree of the cgroup hierarchy is unmanaged
1124             by systemd.
1125              
1126             Multiple controllers may be specified, separated by spaces. You may also pass
1127             C<DisableControllers> multiple times, in which case each new instance adds another controller
1128             to disable. Passing C<DisableControllers> by itself with no controller name present resets
1129             the disabled controller list.',
1130             'type' => 'leaf',
1131             'value_type' => 'uniline'
1132             },
1133             'ManagedOOMSwap',
1134             {
1135             'choice' => [
1136             'auto',
1137             'kill'
1138             ],
1139             'description' => 'Specifies how
1140             L<systemd-oomd.service(8)>
1141             will act on this unit\'s cgroups. Defaults to C<auto>.
1142              
1143             When set to C<kill>, the unit becomes a candidate for monitoring by
1144             systemd-oomd. If the cgroup passes the limits set by
1145             L<oomd.conf(5)> or
1146             the unit configuration, systemd-oomd will select a descendant cgroup and send
1147             C<SIGKILL> to all of the processes under it. You can find more details on
1148             candidates and kill behavior at
1149             L<systemd-oomd.service(8)>
1150             and
1151             L<oomd.conf(5)>.
1152              
1153             Setting either of these properties to C<kill> will also result in
1154             C<After> and C<Wants> dependencies on
1155             C<systemd-oomd.service> unless C<DefaultDependencies=no>.
1156              
1157             When set to C<auto>, systemd-oomd will not actively use this
1158             cgroup\'s data for monitoring and detection. However, if an ancestor cgroup has one of these
1159             properties set to C<kill>, a unit with C<auto> can still be a candidate
1160             for systemd-oomd to terminate.',
1161             'type' => 'leaf',
1162             'value_type' => 'enum'
1163             },
1164             'ManagedOOMMemoryPressure',
1165             {
1166             'choice' => [
1167             'auto',
1168             'kill'
1169             ],
1170             'description' => 'Specifies how
1171             L<systemd-oomd.service(8)>
1172             will act on this unit\'s cgroups. Defaults to C<auto>.
1173              
1174             When set to C<kill>, the unit becomes a candidate for monitoring by
1175             systemd-oomd. If the cgroup passes the limits set by
1176             L<oomd.conf(5)> or
1177             the unit configuration, systemd-oomd will select a descendant cgroup and send
1178             C<SIGKILL> to all of the processes under it. You can find more details on
1179             candidates and kill behavior at
1180             L<systemd-oomd.service(8)>
1181             and
1182             L<oomd.conf(5)>.
1183              
1184             Setting either of these properties to C<kill> will also result in
1185             C<After> and C<Wants> dependencies on
1186             C<systemd-oomd.service> unless C<DefaultDependencies=no>.
1187              
1188             When set to C<auto>, systemd-oomd will not actively use this
1189             cgroup\'s data for monitoring and detection. However, if an ancestor cgroup has one of these
1190             properties set to C<kill>, a unit with C<auto> can still be a candidate
1191             for systemd-oomd to terminate.',
1192             'type' => 'leaf',
1193             'value_type' => 'enum'
1194             },
1195             'ManagedOOMMemoryPressureLimit',
1196             {
1197             'description' => 'Overrides the default memory pressure limit set by
1198             L<oomd.conf(5)> for
1199             this unit (cgroup). Takes a percentage value between 0% and 100%, inclusive. This property is
1200             ignored unless C<ManagedOOMMemoryPressure>C<kill>. Defaults to 0%,
1201             which means to use the default set by
1202             L<oomd.conf(5)>.
1203             ',
1204             'type' => 'leaf',
1205             'value_type' => 'uniline'
1206             },
1207             'ManagedOOMPreference',
1208             {
1209             'choice' => [
1210             'none',
1211             'avoid',
1212             'omit'
1213             ],
1214             'description' => 'Allows deprioritizing or omitting this unit\'s cgroup as a candidate when
1215             systemd-oomd needs to act. Requires support for extended attributes (see
1216             L<xattr(7)>)
1217             in order to use C<avoid> or C<omit>. Additionally,
1218             systemd-oomd will ignore these extended attributes if the unit\'s cgroup is not
1219             owned by the root user.
1220              
1221             If this property is set to C<avoid>, the service manager will convey this to
1222             systemd-oomd, which will only select this cgroup if there are no other viable
1223             candidates.
1224              
1225             If this property is set to C<omit>, the service manager will convey this to
1226             systemd-oomd, which will ignore this cgroup as a candidate and will not perform
1227             any actions on it.
1228              
1229             It is recommended to use C<avoid> and C<omit> sparingly, as it
1230             can adversely affect systemd-oomd\'s kill behavior. Also note that these extended
1231             attributes are not applied recursively to cgroups under this unit\'s cgroup.
1232              
1233             Defaults to C<none> which means systemd-oomd will rank this
1234             unit\'s cgroup as defined in
1235             L<systemd-oomd.service(8)>
1236             and L<oomd.conf(5)>.
1237             ',
1238             'type' => 'leaf',
1239             'value_type' => 'enum'
1240             },
1241             'CPUShares',
1242             {
1243             'description' => 'Assign the specified CPU time share weight to the processes executed. These options take an integer
1244             value and control the C<cpu.shares> control group attribute. The allowed range is 2 to
1245             262144. Defaults to 1024. For details about this control group attribute, see L<CFS Scheduler|https://www.kernel.org/doc/html/latest/scheduler/sched-design-CFS.html>.
1246             The available CPU time is split up among all units within one slice relative to their CPU time share
1247             weight.
1248              
1249             While C<StartupCPUShares> applies to the startup and shutdown phases of the system,
1250             C<CPUShares> applies to normal runtime of the system, and if the former is not set also to
1251             the startup and shutdown phases. Using C<StartupCPUShares> allows prioritizing specific services at
1252             boot-up and shutdown differently than during normal runtime.
1253              
1254             Implies C<CPUAccounting=yes>.
1255              
1256             These settings are deprecated. Use C<CPUWeight> and
1257             C<StartupCPUWeight> instead.',
1258             'max' => '262144',
1259             'min' => '2',
1260             'type' => 'leaf',
1261             'upstream_default' => '1024',
1262             'value_type' => 'integer'
1263             },
1264             'StartupCPUShares',
1265             {
1266             'description' => 'Assign the specified CPU time share weight to the processes executed. These options take an integer
1267             value and control the C<cpu.shares> control group attribute. The allowed range is 2 to
1268             262144. Defaults to 1024. For details about this control group attribute, see L<CFS Scheduler|https://www.kernel.org/doc/html/latest/scheduler/sched-design-CFS.html>.
1269             The available CPU time is split up among all units within one slice relative to their CPU time share
1270             weight.
1271              
1272             While C<StartupCPUShares> applies to the startup and shutdown phases of the system,
1273             C<CPUShares> applies to normal runtime of the system, and if the former is not set also to
1274             the startup and shutdown phases. Using C<StartupCPUShares> allows prioritizing specific services at
1275             boot-up and shutdown differently than during normal runtime.
1276              
1277             Implies C<CPUAccounting=yes>.
1278              
1279             These settings are deprecated. Use C<CPUWeight> and
1280             C<StartupCPUWeight> instead.',
1281             'max' => '262144',
1282             'min' => '2',
1283             'type' => 'leaf',
1284             'upstream_default' => '1024',
1285             'value_type' => 'integer'
1286             },
1287             'MemoryLimit',
1288             {
1289             'description' => 'Specify the limit on maximum memory usage of the executed processes. The limit specifies how much
1290             process and kernel memory can be used by tasks in this unit. Takes a memory size in bytes. If the value is
1291             suffixed with K, M, G or T, the specified memory size is parsed as Kilobytes, Megabytes, Gigabytes, or
1292             Terabytes (with the base 1024), respectively. Alternatively, a percentage value may be specified, which is
1293             taken relative to the installed physical memory on the system. If assigned the special value
1294             C<infinity>, no memory limit is applied. This controls the
1295             C<memory.limit_in_bytes> control group attribute. For details about this control group
1296             attribute, see L<Memory Resource Controller|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/memory.html>.
1297              
1298             Implies C<MemoryAccounting=yes>.
1299              
1300             This setting is deprecated. Use C<MemoryMax> instead.',
1301             'type' => 'leaf',
1302             'value_type' => 'uniline'
1303             },
1304             'BlockIOAccounting',
1305             {
1306             'description' => 'Turn on Block I/O accounting for this unit, if the legacy control group hierarchy is used on the
1307             system. Takes a boolean argument. Note that turning on block I/O accounting for one unit will also implicitly
1308             turn it on for all units contained in the same slice and all for its parent slices and the units contained
1309             therein. The system default for this setting may be controlled with
1310             C<DefaultBlockIOAccounting> in
1311             L<systemd-system.conf(5)>.
1312              
1313             This setting is deprecated. Use C<IOAccounting> instead.',
1314             'type' => 'leaf',
1315             'value_type' => 'boolean',
1316             'write_as' => [
1317             'no',
1318             'yes'
1319             ]
1320             },
1321             'BlockIOWeight',
1322             {
1323             'description' => 'Set the default overall block I/O weight for the executed processes, if the legacy control
1324             group hierarchy is used on the system. Takes a single weight value (between 10 and 1000) to set the default
1325             block I/O weight. This controls the C<blkio.weight> control group attribute, which defaults to
1326             500. For details about this control group attribute, see L<Block IO Controller|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html>.
1327             The available I/O bandwidth is split up among all units within one slice relative to their block I/O
1328             weight.
1329              
1330             While C<StartupBlockIOWeight> only
1331             applies to the startup and shutdown phases of the system,
1332             C<BlockIOWeight> applies to the later runtime
1333             of the system, and if the former is not set also to the
1334             startup and shutdown phases. This allows prioritizing specific services at
1335             boot-up and shutdown differently than during runtime.
1336              
1337             Implies
1338             C<BlockIOAccounting=yes>.
1339              
1340             These settings are deprecated. Use C<IOWeight> and C<StartupIOWeight>
1341             instead.',
1342             'type' => 'leaf',
1343             'value_type' => 'uniline'
1344             },
1345             'StartupBlockIOWeight',
1346             {
1347             'description' => 'Set the default overall block I/O weight for the executed processes, if the legacy control
1348             group hierarchy is used on the system. Takes a single weight value (between 10 and 1000) to set the default
1349             block I/O weight. This controls the C<blkio.weight> control group attribute, which defaults to
1350             500. For details about this control group attribute, see L<Block IO Controller|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html>.
1351             The available I/O bandwidth is split up among all units within one slice relative to their block I/O
1352             weight.
1353              
1354             While C<StartupBlockIOWeight> only
1355             applies to the startup and shutdown phases of the system,
1356             C<BlockIOWeight> applies to the later runtime
1357             of the system, and if the former is not set also to the
1358             startup and shutdown phases. This allows prioritizing specific services at
1359             boot-up and shutdown differently than during runtime.
1360              
1361             Implies
1362             C<BlockIOAccounting=yes>.
1363              
1364             These settings are deprecated. Use C<IOWeight> and C<StartupIOWeight>
1365             instead.',
1366             'type' => 'leaf',
1367             'value_type' => 'uniline'
1368             },
1369             'BlockIODeviceWeight',
1370             {
1371             'description' => 'Set the per-device overall block I/O weight for the executed processes, if the legacy control group
1372             hierarchy is used on the system. Takes a space-separated pair of a file path and a weight value to specify
1373             the device specific weight value, between 10 and 1000. (Example: "/dev/sda 500"). The file path may be
1374             specified as path to a block device node or as any other file, in which case the backing block device of the
1375             file system of the file is determined. This controls the C<blkio.weight_device> control group
1376             attribute, which defaults to 1000. Use this option multiple times to set weights for multiple devices. For
1377             details about this control group attribute, see L<Block IO Controller|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html>.
1378              
1379             Implies
1380             C<BlockIOAccounting=yes>.
1381              
1382             This setting is deprecated. Use C<IODeviceWeight> instead.',
1383             'type' => 'leaf',
1384             'value_type' => 'uniline'
1385             },
1386             'BlockIOReadBandwidth',
1387             {
1388             'description' => 'Set the per-device overall block I/O bandwidth limit for the executed processes, if the legacy control
1389             group hierarchy is used on the system. Takes a space-separated pair of a file path and a bandwidth value (in
1390             bytes per second) to specify the device specific bandwidth. The file path may be a path to a block device
1391             node, or as any other file in which case the backing block device of the file system of the file is used. If
1392             the bandwidth is suffixed with K, M, G, or T, the specified bandwidth is parsed as Kilobytes, Megabytes,
1393             Gigabytes, or Terabytes, respectively, to the base of 1000. (Example:
1394             "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 5M"). This controls the
1395             C<blkio.throttle.read_bps_device> and C<blkio.throttle.write_bps_device>
1396             control group attributes. Use this option multiple times to set bandwidth limits for multiple devices. For
1397             details about these control group attributes, see L<Block IO Controller|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html>.
1398              
1399             Implies
1400             C<BlockIOAccounting=yes>.
1401              
1402             These settings are deprecated. Use C<IOReadBandwidthMax> and
1403             C<IOWriteBandwidthMax> instead.',
1404             'type' => 'leaf',
1405             'value_type' => 'uniline'
1406             },
1407             'BlockIOWriteBandwidth',
1408             {
1409             'description' => 'Set the per-device overall block I/O bandwidth limit for the executed processes, if the legacy control
1410             group hierarchy is used on the system. Takes a space-separated pair of a file path and a bandwidth value (in
1411             bytes per second) to specify the device specific bandwidth. The file path may be a path to a block device
1412             node, or as any other file in which case the backing block device of the file system of the file is used. If
1413             the bandwidth is suffixed with K, M, G, or T, the specified bandwidth is parsed as Kilobytes, Megabytes,
1414             Gigabytes, or Terabytes, respectively, to the base of 1000. (Example:
1415             "/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0 5M"). This controls the
1416             C<blkio.throttle.read_bps_device> and C<blkio.throttle.write_bps_device>
1417             control group attributes. Use this option multiple times to set bandwidth limits for multiple devices. For
1418             details about these control group attributes, see L<Block IO Controller|https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/blkio-controller.html>.
1419              
1420             Implies
1421             C<BlockIOAccounting=yes>.
1422              
1423             These settings are deprecated. Use C<IOReadBandwidthMax> and
1424             C<IOWriteBandwidthMax> instead.',
1425             'type' => 'leaf',
1426             'value_type' => 'uniline'
1427             }
1428             ],
1429             'generated_by' => 'parse-man.pl from systemd 250 doc',
1430             'license' => 'LGPLv2.1+',
1431             'name' => 'Systemd::Common::ResourceControl'
1432             }
1433             ]
1434             ;
1435