]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev,network: warn when .link or .network file has no [Match] section
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 20 Apr 2019 12:40:24 +0000 (14:40 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 25 Apr 2019 06:41:10 +0000 (08:41 +0200)
Closes #12098.

man/systemd.link.xml
man/systemd.network.xml
network/99-default.link
src/network/networkd-network.c
src/network/test-networkd-conf.c
src/udev/net/link-config.c

index af9799e8c02a41e4c8556ff37848a849ba2f5ef1..ea744bd2517a7d3f829a402a1658f2dfb0aec2cd 100644 (file)
   <refsect1>
     <title>[Match] Section Options</title>
 
-    <para>A link file is said to match a device if each of the entries in the [Match] section matches, or if
-    the section is empty. The following keys are accepted:</para>
+    <para>A link file is said to match a device if all matches specified by the
+    <literal>[Match]</literal> section are satisfied. When a link file does not contain valid settings
+    in <literal>[Match]</literal> section, then the file will match all devices and
+    <command>systemd-udevd</command> warns about that. Hint: to avoid the warning and to make it clear
+    that all interfaces shall be matched, add the following:
+    <programlisting>OriginalName=*</programlisting>
+    The following keys are accepted:</para>
 
     <variablelist class='network-directives'>
       <varlistentry>
index 2d8eeee88fb37c1c0a83a16890e88932eb95c8fe..be982cbb1aa7a64251fc1a74306431e69ac75182 100644 (file)
       is applied, all later files are ignored, even if they match as
       well.</para>
 
-      <para>A network file is said to match a device if each of the
-      entries in the <literal>[Match]</literal> section matches, or if
-      the section is empty. The following keys are accepted:</para>
+      <para>A network file is said to match a network interface if all matches specified by the
+      <literal>[Match]</literal> section are satisfied. When a network file does not contain valid
+      settings in <literal>[Match]</literal> section, then the file will match all interfaces and
+      <command>systemd-networkd</command> warns about that. Hint: to avoid the warning and to make it
+      clear that all interfaces shall be matched, add the following:
+      <programlisting>Name=*</programlisting>
+      The following keys are accepted:</para>
 
       <variablelist class='network-directives'>
         <varlistentry>
index 92fcbe83eab91751854094023ff4d9c602378c98..347d4b72d2709816ec185303e430d526e9e1a713 100644 (file)
@@ -7,6 +7,9 @@
 #  the Free Software Foundation; either version 2.1 of the License, or
 #  (at your option) any later version.
 
+[Match]
+OriginalName=*
+
 [Link]
 NamePolicy=keep kernel database onboard slot path
 MACAddressPolicy=persistent
index 52cfc4bec15dec3ea8a6485c37b8f9e54e7f668b..b5bf0366f173436ba92c335ab35fb96b3a11bf6c 100644 (file)
@@ -172,6 +172,14 @@ int network_verify(Network *network) {
         assert(network);
         assert(network->filename);
 
+        if (set_isempty(network->match_mac) && strv_isempty(network->match_path) &&
+            strv_isempty(network->match_driver) && strv_isempty(network->match_type) &&
+            strv_isempty(network->match_name) && !network->conditions)
+                log_warning("%s: No valid settings found in the [Match] section. "
+                            "The file will match all interfaces. "
+                            "If that is intended, please add Name=* in the [Match] section.",
+                            network->filename);
+
         /* skip out early if configuration does not match the environment */
         if (!condition_test_list(network->conditions, NULL, NULL, NULL))
                 return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
index 6408719d15aac2d11aa947d8117b331e2a5f3adc..05fc01d048dc7708f817824eb02715c35e22822a 100644 (file)
@@ -173,6 +173,7 @@ static void test_config_parse_address_one(const char *rvalue, int family, unsign
 
         assert_se(network = new0(Network, 1));
         assert_se(network->filename = strdup("hogehoge.network"));
+        assert_se(config_parse_ifnames("network", "filename", 1, "section", 1, "Name", 0, "*", &network->match_name, network) == 0);
         assert_se(config_parse_address("network", "filename", 1, "section", 1, "Address", 0, rvalue, network, network) == 0);
         assert_se(network->n_static_addresses == 1);
         assert_se(network_verify(network) >= 0);
index a26c4cefa8201a7713e4610373a4f1b2d64553e2..7754959cdf3a53f9449bab58cb50a7d7cba67c7d 100644 (file)
@@ -159,6 +159,14 @@ int link_load_one(link_config_ctx *ctx, const char *filename) {
         if (link->speed > UINT_MAX)
                 return -ERANGE;
 
+        if (set_isempty(link->match_mac) && strv_isempty(link->match_path) &&
+            strv_isempty(link->match_driver) && strv_isempty(link->match_type) &&
+            strv_isempty(link->match_name) && !link->conditions)
+                log_warning("%s: No valid settings found in the [Match] section. "
+                            "The file will match all interfaces. "
+                            "If that is intended, please add OriginalName=* in the [Match] section.",
+                            filename);
+
         if (!condition_test_list(link->conditions, NULL, NULL, NULL)) {
                 log_debug("%s: Conditions do not match the system environment, skipping.", filename);
                 return 0;