Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sysctl: add glob syntax to sysctl.d files
This is intended for net.*.conf.*.foo files. Setting just "default" is not very useful because any interfaces present before systemd-sysctl is invoked are not affected. Setting "all" is too harsh, because the kernel takes the stronger of the device-specific setting and the "all" value, so effectively having a weaker setting for specific interfaces is not possible. Let's add a way in which can set "default" first and then all the others without "all".
- Loading branch information
Showing
2 changed files
with
156 additions
and
70 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -30,6 +30,9 @@ key/name/under/proc/sys = some value | |
key/middle.part.with.dots/foo = 123 | ||
key.middle/part/with/dots.foo = 123 | ||
-key.that.will.not.fail = value | ||
key.pattern.*.with.glob = whatever | ||
-key.pattern.excluded.with.glob | ||
key.pattern.overriden.with.glob = custom | ||
</programlisting> | ||
</refsynopsisdiv> | ||
|
||
|
@@ -51,20 +54,20 @@ key.middle/part/with/dots.foo = 123 | |
first non-whitespace character is <literal>#</literal> or | ||
<literal>;</literal> are ignored.</para> | ||
|
||
<para>Note that either <literal>/</literal> or | ||
<literal>.</literal> may be used as separators within sysctl | ||
variable names. If the first separator is a slash, remaining | ||
slashes and dots are left intact. If the first separator is a dot, | ||
dots and slashes are interchanged. | ||
<literal>kernel.domainname=foo</literal> and | ||
<literal>kernel/domainname=foo</literal> are equivalent and will | ||
cause <literal>foo</literal> to be written to | ||
<para>Note that either <literal>/</literal> or <literal>.</literal> may be used as separators within | ||
sysctl variable names. If the first separator is a slash, remaining slashes and dots are left intact. If | ||
the first separator is a dot, dots and slashes are interchanged. | ||
<literal>kernel.domainname=foo</literal> and <literal>kernel/domainname=foo</literal> are equivalent and | ||
will cause <literal>foo</literal> to be written to | ||
<filename>/proc/sys/kernel/domainname</filename>. Either | ||
<literal>net.ipv4.conf.enp3s0/200.forwarding</literal> or | ||
<literal>net/ipv4/conf/enp3s0.200/forwarding</literal> may be used | ||
to refer to | ||
<filename>/proc/sys/net/ipv4/conf/enp3s0.200/forwarding</filename>. | ||
</para> | ||
<literal>net/ipv4/conf/enp3s0.200/forwarding</literal> may be used to refer to | ||
<filename>/proc/sys/net/ipv4/conf/enp3s0.200/forwarding</filename>. A glob | ||
<citerefentry><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry> pattern may be | ||
used to write the same value to all matching keys. Keys for which an explicit pattern exists will be | ||
excluded from any glob matching. In addition, a key may be explicitly excluded from being set by any | ||
matching glob patterns by specifying the key name prefixed with a <literal>-</literal> character and not | ||
followed by <literal>=</literal>, see SYNOPSIS.</para> | ||
|
||
<para>Any access permission errors and attempts to write variables not present on the local system are | ||
logged, but do not cause the service to fail. Debug log level is used, which means that the message will | ||
|
@@ -73,13 +76,10 @@ key.middle/part/with/dots.foo = 123 | |
not cause the service to fail. All other errors when setting variables are logged with higher priority | ||
and cause the service to return failure at the end (other variables are still processed).</para> | ||
|
||
<para>The settings configured with <filename>sysctl.d</filename> | ||
files will be applied early on boot. The network | ||
interface-specific options will also be applied individually for | ||
each network interface as it shows up in the system. (More | ||
specifically, <filename>net.ipv4.conf.*</filename>, | ||
<filename>net.ipv6.conf.*</filename>, | ||
<filename>net.ipv4.neigh.*</filename> and | ||
<para>The settings configured with <filename>sysctl.d</filename> files will be applied early on boot. The | ||
network interface-specific options will also be applied individually for each network interface as it | ||
shows up in the system. (More specifically, <filename>net.ipv4.conf.*</filename>, | ||
<filename>net.ipv6.conf.*</filename>, <filename>net.ipv4.neigh.*</filename> and | ||
<filename>net.ipv6.neigh.*</filename>).</para> | ||
|
||
<para>Many sysctl parameters only become available when certain | ||
|
@@ -156,6 +156,26 @@ net.bridge.bridge-nf-call-arptables = 0 | |
(starting with kernel 3.18), so simply not loading the module is | ||
sufficient to avoid filtering.</para> | ||
</example> | ||
|
||
<example> | ||
<title>Set network routing properties for all interfaces</title> | ||
<para><filename>/etc/systemd/20-rp_filter.conf</filename>:</para> | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
keszybz
Author
Member
|
||
|
||
<programlisting>net.ipv4.conf.default.rp_filter = 2 | ||
net.ipv4.conf.*.rp_filter = 2 | ||
-net.ipv4.conf.all.rp_filter | ||
net.ipv4.conf.hub0.rp_filter = 1 | ||
</programlisting> | ||
|
||
<para>The <option>rp_filter</option> key will be set to "2" for all interfaces, except "hub0". We set | ||
<filename>net.ipv4.conf.default.rp_filter</filename> first, so any interfaces which are added | ||
<emphasis>later</emphasis> will get this value (this also covers any interfaces detected while we're | ||
running). The glob matches any interfaces which were detected <emphasis>earlier</emphasis>. The glob | ||
will also match <filename>net.ipv4.conf.all.rp_filter</filename>, which we don't want to set at all, so | ||
it is explicitly excluded. And "hub0" is excluded from the glob because it has an explicit setting. | ||
</para> | ||
</example> | ||
|
||
</refsect1> | ||
|
||
<refsect1> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@keszybz
/etc/systemd
->/etc/sysctl.d