]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: unify link_dhcp{4,6}_enabled()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 2 Oct 2020 07:09:25 +0000 (16:09 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 6 Oct 2020 17:50:50 +0000 (02:50 +0900)
src/network/networkd-dhcp-common.c
src/network/networkd-dhcp-common.h
src/network/networkd-link.c

index ecf9bcea85728f1fa6d7b261bd8bcc01b00da889..3ea3a5a7baea73c04fd6c6841040afb032f3627e 100644 (file)
@@ -1,15 +1,42 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
 
+#include <netinet/in.h>
+#include <linux/if_arp.h>
+
 #include "dhcp-internal.h"
 #include "dhcp6-internal.h"
 #include "escape.h"
 #include "in-addr-util.h"
 #include "networkd-dhcp-common.h"
+#include "networkd-link.h"
 #include "networkd-network.h"
 #include "parse-util.h"
+#include "socket-util.h"
 #include "string-table.h"
 #include "strv.h"
 
+bool link_dhcp_enabled(Link *link, int family) {
+        assert(link);
+        assert(IN_SET(family, AF_INET, AF_INET6));
+
+        if (family == AF_INET6 && !socket_ipv6_is_supported())
+                return false;
+
+        if (link->flags & IFF_LOOPBACK)
+                return false;
+
+        if (!link->network)
+                return false;
+
+        if (link->network->bond)
+                return false;
+
+        if (link->iftype == ARPHRD_CAN)
+                return false;
+
+        return link->network->dhcp & (family == AF_INET ? ADDRESS_FAMILY_IPV4 : ADDRESS_FAMILY_IPV6);
+}
+
 int config_parse_dhcp(
                 const char* unit,
                 const char *filename,
index 01400a23858d4cbe200800956560b5f598d43c20..1032ec2bdae2a400aac79070c8d96d91c61f5fa6 100644 (file)
@@ -7,6 +7,8 @@
 
 #define DHCP_ROUTE_METRIC 1024
 
+typedef struct Link Link;
+
 typedef enum DHCPUseDomains {
         DHCP_USE_DOMAINS_NO,
         DHCP_USE_DOMAINS_YES,
@@ -35,6 +37,14 @@ typedef struct DUID {
         usec_t llt_time;
 } DUID;
 
+bool link_dhcp_enabled(Link *link, int family);
+static inline bool link_dhcp4_enabled(Link *link) {
+        return link_dhcp_enabled(link, AF_INET);
+}
+static inline bool link_dhcp6_enabled(Link *link) {
+        return link_dhcp_enabled(link, AF_INET6);
+}
+
 const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
 DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
 
index c73389e25c03f7724c0f224a5721905643b87576..dcdfbe2ac4034994875f39327bddb449e4ab7354 100644 (file)
@@ -61,45 +61,6 @@ DUID* link_get_duid(Link *link) {
                 return &link->manager->duid;
 }
 
-static bool link_dhcp6_enabled(Link *link) {
-        assert(link);
-
-        if (!socket_ipv6_is_supported())
-                return false;
-
-        if (link->flags & IFF_LOOPBACK)
-                return false;
-
-        if (!link->network)
-                return false;
-
-        if (link->network->bond)
-                return false;
-
-        if (link->iftype == ARPHRD_CAN)
-                return false;
-
-        return link->network->dhcp & ADDRESS_FAMILY_IPV6;
-}
-
-static bool link_dhcp4_enabled(Link *link) {
-        assert(link);
-
-        if (link->flags & IFF_LOOPBACK)
-                return false;
-
-        if (!link->network)
-                return false;
-
-        if (link->network->bond)
-                return false;
-
-        if (link->iftype == ARPHRD_CAN)
-                return false;
-
-        return link->network->dhcp & ADDRESS_FAMILY_IPV4;
-}
-
 static bool link_dhcp4_server_enabled(Link *link) {
         assert(link);