]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network-generator: make network file generated from ip=dhcp matches only physical... 28646/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 2 Aug 2023 17:12:10 +0000 (02:12 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 2 Aug 2023 17:51:53 +0000 (02:51 +0900)
Otherwise, it also matches later created virtual devices, and that
breaks networks generated and managed by container management services,
like docker.

Closes #28626.

src/network/generator/network-generator.c
src/network/generator/test-network-generator.c
test/test-network-generator-conversion/test-01-dhcp.expected/91-default.network

index 823cd41f7ee0fdfd808497363ffe5bb239e0bec4..f1bcc32591445be0c1824d56d39f3f3f669d0d2f 100644 (file)
@@ -1108,10 +1108,15 @@ void network_dump(Network *network, FILE *f) {
         assert(network);
         assert(f);
 
-        fprintf(f,
-                "[Match]\n"
-                "Name=%s\n",
-                isempty(network->ifname) ? "*" : network->ifname);
+        fputs("[Match]\n", f);
+
+        if (isempty(network->ifname))
+                /* If the interface name is not specified, then let's make the .network file match the all
+                 * physical interfaces. */
+                fputs("Kind=!*\n"
+                      "Type=!loopback\n", f);
+        else
+                fprintf(f, "Name=%s\n", network->ifname);
 
         fputs("\n[Link]\n", f);
 
index bcd4b1d9e411d4b00ece81aaa40287182da43d97..318b9e98c3754bb140e66895ae06928b4100dd31 100644 (file)
@@ -65,7 +65,8 @@ static void test_link_one(const char *filename, const char *key, const char *val
 int main(int argc, char *argv[]) {
         test_network_one("", "ip", "dhcp6",
                          "[Match]\n"
-                         "Name=*\n"
+                         "Kind=!*\n"
+                         "Type=!loopback\n"
                          "\n[Link]\n"
                          "\n[Network]\n"
                          "DHCP=ipv6\n"
@@ -228,7 +229,8 @@ int main(int argc, char *argv[]) {
 
         test_network_one("", "rd.route", "10.1.2.3/16:10.0.2.3",
                          "[Match]\n"
-                         "Name=*\n"
+                         "Kind=!*\n"
+                         "Type=!loopback\n"
                          "\n[Link]\n"
                          "\n[Network]\n"
                          "\n[DHCP]\n"
@@ -250,7 +252,8 @@ int main(int argc, char *argv[]) {
 
         test_network_one("", "nameserver", "10.1.2.3",
                          "[Match]\n"
-                         "Name=*\n"
+                         "Kind=!*\n"
+                         "Type=!loopback\n"
                          "\n[Link]\n"
                          "\n[Network]\n"
                          "DNS=10.1.2.3\n"
@@ -259,7 +262,8 @@ int main(int argc, char *argv[]) {
 
         test_network_one("", "rd.peerdns", "0",
                          "[Match]\n"
-                         "Name=*\n"
+                         "Kind=!*\n"
+                         "Type=!loopback\n"
                          "\n[Link]\n"
                          "\n[Network]\n"
                          "\n[DHCP]\n"
@@ -268,7 +272,8 @@ int main(int argc, char *argv[]) {
 
         test_network_one("", "rd.peerdns", "1",
                          "[Match]\n"
-                         "Name=*\n"
+                         "Kind=!*\n"
+                         "Type=!loopback\n"
                          "\n[Link]\n"
                          "\n[Network]\n"
                          "\n[DHCP]\n"
index e42ce1e311f9b9fd562e17275b0bd33b62cf90be..657cde79aed72ebc19a1c07a0586df283f60e179 100644 (file)
@@ -1,7 +1,8 @@
 # Automatically generated by systemd-network-generator
 
 [Match]
-Name=*
+Kind=!*
+Type=!loopback
 
 [Link]