]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: check feature is enabled in xxx_configure()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 3 Oct 2020 22:37:22 +0000 (07:37 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 6 Oct 2020 17:50:51 +0000 (02:50 +0900)
src/network/networkd-dhcp4.c
src/network/networkd-dhcp4.h
src/network/networkd-dhcp6.c
src/network/networkd-ipv4ll.c
src/network/networkd-link.c
src/network/networkd-lldp-rx.c
src/network/networkd-lldp-rx.h
src/network/networkd-lldp-tx.c
src/network/networkd-ndisc.c

index c8f4f4bf61560056821131088a7f31cb355d3698..a20f06d6c36de66ea6bd005d2e5cc78c989e12d8 100644 (file)
@@ -1157,12 +1157,10 @@ static bool promote_secondaries_enabled(const char *ifname) {
  * the primary one expires it relies on the kernel to promote the
  * secondary IP. See also https://github.com/systemd/systemd/issues/7163
  */
-int dhcp4_set_promote_secondaries(Link *link) {
+static int dhcp4_set_promote_secondaries(Link *link) {
         int r;
 
         assert(link);
-        assert(link->network);
-        assert(link->network->dhcp & ADDRESS_FAMILY_IPV4);
 
         /* check if the kernel has promote_secondaries enabled for our
          * interface. If it is not globally enabled or enabled for the
@@ -1267,7 +1265,13 @@ int dhcp4_configure(Link *link) {
 
         assert(link);
         assert(link->network);
-        assert(link->network->dhcp & ADDRESS_FAMILY_IPV4);
+
+        if (!link_dhcp4_enabled(link))
+                return 0;
+
+        r = dhcp4_set_promote_secondaries(link);
+        if (r < 0)
+                return r;
 
         r = dhcp4_init(link);
         if (r < 0)
index ee3b4f1288ae1291fa3ab4b4c3f1814c87644931..8aa6ac9453eacd271e9cf6ed836651c2208ad88d 100644 (file)
@@ -19,7 +19,6 @@ typedef enum DHCPClientIdentifier {
 
 int dhcp4_configure(Link *link);
 int dhcp4_update_mac(Link *link);
-int dhcp4_set_promote_secondaries(Link *link);
 
 int link_deserialize_dhcp4(Link *link, const char *dhcp4_address);
 
index 5724d083fc38a7bdedd52c978943f8aa3f99e2dc..ce9f6ac300300e6f1a591aeedbb48643c897d0a4 100644 (file)
 #include "radv-internal.h"
 #include "web-util.h"
 
+bool link_dhcp6_pd_is_enabled(Link *link) {
+        assert(link);
+
+        if (!link->network)
+                return false;
+
+        return link->network->router_prefix_delegation & RADV_PREFIX_DELEGATION_DHCP6;
+}
+
 static bool dhcp6_lease_has_pd_prefix(sd_dhcp6_lease *lease) {
         uint32_t lifetime_preferred, lifetime_valid;
         union in_addr_union pd_prefix;
@@ -181,6 +190,9 @@ int dhcp6_pd_remove(Link *link) {
         assert(link);
         assert(link->manager);
 
+        if (!link_dhcp6_pd_is_enabled(link))
+                return 0;
+
         link->dhcp6_pd_address_configured = false;
         link->dhcp6_pd_route_configured = false;
 
@@ -426,13 +438,6 @@ static int dhcp6_pd_assign_prefix(Link *link, const union in_addr_union *prefix,
         return 0;
 }
 
-bool link_dhcp6_pd_is_enabled(Link *link) {
-        if (!link->network)
-                return false;
-
-        return link->network->router_prefix_delegation & RADV_PREFIX_DELEGATION_DHCP6;
-}
-
 static bool link_has_preferred_subnet_id(Link *link) {
         if (!link->network)
                 return false;
@@ -644,9 +649,6 @@ static void dhcp6_pd_prefix_lost(Link *dhcp6_link) {
                 if (link == dhcp6_link)
                         continue;
 
-                if (!link_dhcp6_pd_is_enabled(link))
-                        continue;
-
                 r = dhcp6_pd_remove(link);
                 if (r < 0)
                         link_enter_failed(link);
@@ -1386,6 +1388,9 @@ int dhcp6_configure(Link *link) {
         assert(link);
         assert(link->network);
 
+        if (!link_dhcp6_enabled(link) && !link_ipv6_accept_ra_enabled(link))
+                return 0;
+
         if (link->dhcp6_client)
                 return 0;
 
index 706393b2f2a27ac36737aaddec36bb0d0856f19e..b0e0a97ad8d9f6587147d40deb8b218ca4b9ed0c 100644 (file)
@@ -166,8 +166,9 @@ int ipv4ll_configure(Link *link) {
         int r;
 
         assert(link);
-        assert(link->network);
-        assert(link->network->link_local & (ADDRESS_FAMILY_IPV4 | ADDRESS_FAMILY_FALLBACK_IPV4));
+
+        if (!link_ipv4ll_enabled(link, ADDRESS_FAMILY_IPV4 | ADDRESS_FAMILY_FALLBACK_IPV4))
+                return 0;
 
         r = ipv4ll_init(link);
         if (r < 0)
index 53242d8e0fd4f983cff3b4fc73a212f9e403f640..b8145ea65177d74e6bf9985a4b0cbc4de9752113 100644 (file)
@@ -638,11 +638,9 @@ int link_stop_clients(Link *link, bool may_keep_dhcp) {
                         r = log_link_warning_errno(link, k, "Could not stop DHCPv6 client: %m");
         }
 
-        if (link_dhcp6_pd_is_enabled(link)) {
-                k = dhcp6_pd_remove(link);
-                if (k < 0)
-                        r = log_link_warning_errno(link, k, "Could not remove DHCPv6 PD addresses and routes: %m");
-        }
+        k = dhcp6_pd_remove(link);
+        if (k < 0)
+                r = log_link_warning_errno(link, k, "Could not remove DHCPv6 PD addresses and routes: %m");
 
         if (link->ndisc) {
                 k = sd_ndisc_stop(link->ndisc);
@@ -1072,9 +1070,7 @@ static int link_acquire_ipv6_conf(Link *link) {
 
         assert(link);
 
-        if (link_ipv6_accept_ra_enabled(link)) {
-                assert(link->ndisc);
-
+        if (link->ndisc) {
                 log_link_debug(link, "Discovering IPv6 routers");
 
                 r = sd_ndisc_start(link->ndisc);
@@ -1134,9 +1130,7 @@ static int link_acquire_ipv4_conf(Link *link) {
                         return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m");
         }
 
-        if (link_dhcp4_enabled(link)) {
-                assert(link->dhcp_client);
-
+        if (link->dhcp_client) {
                 log_link_debug(link, "Acquiring DHCPv4 lease");
 
                 r = sd_dhcp_client_start(link->dhcp_client);
@@ -1162,11 +1156,9 @@ static int link_acquire_conf(Link *link) {
                         return r;
         }
 
-        if (link_lldp_emit_enabled(link)) {
-                r = link_lldp_emit_start(link);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "Failed to start LLDP transmission: %m");
-        }
+        r = link_lldp_emit_start(link);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to start LLDP transmission: %m");
 
         return 0;
 }
@@ -1974,44 +1966,29 @@ int link_configure(Link *link) {
         if (r < 0)
                 return r;
 
-        if (link_ipv4ll_enabled(link, ADDRESS_FAMILY_IPV4 | ADDRESS_FAMILY_FALLBACK_IPV4)) {
-                r = ipv4ll_configure(link);
-                if (r < 0)
-                        return r;
-        }
-
-        if (link_dhcp4_enabled(link)) {
-                r = dhcp4_set_promote_secondaries(link);
-                if (r < 0)
-                        return r;
+        r = ipv4ll_configure(link);
+        if (r < 0)
+                return r;
 
-                r = dhcp4_configure(link);
-                if (r < 0)
-                        return r;
-        }
+        r = dhcp4_configure(link);
+        if (r < 0)
+                return r;
 
-        if (link_dhcp6_enabled(link) ||
-            link_ipv6_accept_ra_enabled(link)) {
-                r = dhcp6_configure(link);
-                if (r < 0)
-                        return r;
-        }
+        r = dhcp6_configure(link);
+        if (r < 0)
+                return r;
 
-        if (link_ipv6_accept_ra_enabled(link)) {
-                r = ndisc_configure(link);
-                if (r < 0)
-                        return r;
-        }
+        r = ndisc_configure(link);
+        if (r < 0)
+                return r;
 
         r = radv_configure(link);
         if (r < 0)
                 return r;
 
-        if (link_lldp_rx_enabled(link)) {
-                r = link_lldp_rx_configure(link);
-                if (r < 0)
-                        return r;
-        }
+        r = link_lldp_rx_configure(link);
+        if (r < 0)
+                return r;
 
         r = link_configure_mtu(link);
         if (r < 0)
index fe8877797719516e7cef4ee895f6ae94b7adb15f..a97bdeda19dcf45d4107a673031738bc3d3e58e0 100644 (file)
@@ -25,7 +25,7 @@ static const char* const lldp_mode_table[_LLDP_MODE_MAX] = {
 
 DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(lldp_mode, LLDPMode, LLDP_MODE_YES);
 
-bool link_lldp_rx_enabled(Link *link) {
+static bool link_lldp_rx_enabled(Link *link) {
         assert(link);
 
         if (link->flags & IFF_LOOPBACK)
@@ -68,9 +68,18 @@ static void lldp_handler(sd_lldp *lldp, sd_lldp_event event, sd_lldp_neighbor *n
 int link_lldp_rx_configure(Link *link) {
         int r;
 
-        r = sd_lldp_new(&link->lldp);
-        if (r < 0)
-                return r;
+        if (!link_lldp_rx_enabled(link))
+                return 0;
+
+        if (!link->lldp) {
+                r = sd_lldp_new(&link->lldp);
+                if (r < 0)
+                        return r;
+
+                r = sd_lldp_attach_event(link->lldp, NULL, 0);
+                if (r < 0)
+                        return r;
+        }
 
         r = sd_lldp_set_ifindex(link->lldp, link->ifindex);
         if (r < 0)
@@ -87,10 +96,6 @@ int link_lldp_rx_configure(Link *link) {
         if (r < 0)
                 return r;
 
-        r = sd_lldp_attach_event(link->lldp, NULL, 0);
-        if (r < 0)
-                return r;
-
         r = sd_lldp_set_callback(link->lldp, lldp_handler, link);
         if (r < 0)
                 return r;
index 12f512f62870287d9ff767687102b87a78db3f53..8e1a6a0b62101bff6f4632e8a999f4bdaf6bc685 100644 (file)
@@ -1,8 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
 #pragma once
 
-#include <stdbool.h>
-
 #include "conf-parser.h"
 
 typedef struct Link Link;
@@ -15,7 +13,6 @@ typedef enum LLDPMode {
         _LLDP_MODE_INVALID = -1,
 } LLDPMode;
 
-bool link_lldp_rx_enabled(Link *link);
 int link_lldp_rx_configure(Link *link);
 int link_update_lldp(Link *link);
 int link_lldp_save(Link *link);
index 2be7c27e1821182173ed3c8ef3fe2bbe9fa014fc..c8e56a5fece64efcf06a73531711a8f6978c67c3 100644 (file)
@@ -367,7 +367,7 @@ int link_lldp_emit_start(Link *link) {
 
         assert(link);
 
-        if (!link->network || link->network->lldp_emit == LLDP_EMIT_NO) {
+        if (!link_lldp_emit_enabled(link)) {
                 link_lldp_emit_stop(link);
                 return 0;
         }
index 0e42e768daac99631e673e27e4699dc2e20a3d79..a60c42528bab24cf3d602bf687d90819931a629f 100644 (file)
@@ -1226,13 +1226,18 @@ int ndisc_configure(Link *link) {
 
         assert(link);
 
-        r = sd_ndisc_new(&link->ndisc);
-        if (r < 0)
-                return r;
+        if (!link_ipv6_accept_ra_enabled(link))
+                return 0;
 
-        r = sd_ndisc_attach_event(link->ndisc, NULL, 0);
-        if (r < 0)
-                return r;
+        if (!link->ndisc) {
+                r = sd_ndisc_new(&link->ndisc);
+                if (r < 0)
+                        return r;
+
+                r = sd_ndisc_attach_event(link->ndisc, NULL, 0);
+                if (r < 0)
+                        return r;
+        }
 
         r = sd_ndisc_set_mac(link->ndisc, &link->mac);
         if (r < 0)