]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: dhcp: constify link_get_duid() 19271/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 21 Apr 2021 04:35:57 +0000 (13:35 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 21 Apr 2021 12:00:45 +0000 (21:00 +0900)
src/network/networkd-dhcp-common.c
src/network/networkd-dhcp-common.h
src/network/networkd-manager.c
src/network/networkd-manager.h

index dd4956bd5f52b6252f4ce468a9937f26222324ab..8357b2b99dffa83bd4b2e4c1a82374a0719a0909 100644 (file)
@@ -69,18 +69,22 @@ static bool duid_needs_product_uuid(const DUID *duid) {
         return duid->type == DUID_TYPE_UUID && duid->raw_data_len == 0;
 }
 
-static struct DUID fallback_duid = { .type = DUID_TYPE_EN };
+static const struct DUID fallback_duid = { .type = DUID_TYPE_EN };
 
-DUID* link_get_duid(Link *link, int family) {
-        DUID *duid;
+const DUID *link_get_duid(Link *link, int family) {
+        const DUID *duid;
 
         assert(link);
         assert(IN_SET(family, AF_INET, AF_INET6));
 
         if (link->network) {
                 duid = family == AF_INET ? &link->network->dhcp_duid : &link->network->dhcp6_duid;
-                if (duid->type != _DUID_TYPE_INVALID)
-                        return duid;
+                if (duid->type != _DUID_TYPE_INVALID) {
+                        if (duid_needs_product_uuid(duid))
+                                return &link->manager->duid_product_uuid;
+                        else
+                                return duid;
+                }
         }
 
         duid = family == AF_INET ? &link->manager->dhcp_duid : &link->manager->dhcp6_duid;
@@ -160,7 +164,8 @@ static int get_product_uuid_handler(sd_bus_message *m, void *userdata, sd_bus_er
                 goto configure;
         }
 
-        memcpy(&manager->product_uuid, a, sz);
+        memcpy(&manager->duid_product_uuid.raw_data, a, sz);
+        manager->duid_product_uuid.raw_data_len = sz;
 
 configure:
         /* To avoid calling GetProductUUID() bus method so frequently, set the flag below
@@ -214,7 +219,7 @@ int manager_request_product_uuid(Manager *m) {
         return 0;
 }
 
-int dhcp_configure_duid(Link *link, DUID *duid) {
+int dhcp_configure_duid(Link *link, const DUID *duid) {
         Manager *m;
         int r;
 
@@ -227,11 +232,8 @@ int dhcp_configure_duid(Link *link, DUID *duid) {
         if (!duid_needs_product_uuid(duid))
                 return 1;
 
-        if (m->has_product_uuid) {
-                memcpy(&duid->raw_data, &m->product_uuid, sizeof(sd_id128_t));
-                duid->raw_data_len = sizeof(sd_id128_t);
+        if (m->has_product_uuid)
                 return 1;
-        }
 
         r = manager_request_product_uuid(m);
         if (r < 0) {
index fc85fb4706d519788bf1d9a52433d5b5bb2265cb..316f5cf10b22be3260434a0c9f0c3ed1b07af82a 100644 (file)
@@ -52,15 +52,15 @@ static inline bool link_dhcp6_enabled(Link *link) {
 
 void network_adjust_dhcp(Network *network);
 
-DUID *link_get_duid(Link *link, int family);
-static inline DUID *link_get_dhcp4_duid(Link *link) {
+const DUID *link_get_duid(Link *link, int family);
+static inline const DUID *link_get_dhcp4_duid(Link *link) {
         return link_get_duid(link, AF_INET);
 }
-static inline DUID *link_get_dhcp6_duid(Link *link) {
+static inline const DUID *link_get_dhcp6_duid(Link *link) {
         return link_get_duid(link, AF_INET6);
 }
 
-int dhcp_configure_duid(Link *link, DUID *duid);
+int dhcp_configure_duid(Link *link, const DUID *duid);
 int manager_request_product_uuid(Manager *m);
 
 const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
index fce1d03de5e2e99b320ca0c2edd351dacdf63ba7..562ce5ca54292723dc7cbbe037e52cd8388763db 100644 (file)
@@ -384,6 +384,7 @@ int manager_new(Manager **ret) {
                 .ethtool_fd = -1,
                 .dhcp_duid.type = DUID_TYPE_EN,
                 .dhcp6_duid.type = DUID_TYPE_EN,
+                .duid_product_uuid.type = DUID_TYPE_UUID,
         };
 
         m->state_file = strdup("/run/systemd/netif/state");
index 9cb99325db129e2da9fe9581367ba7fe804c4503..e02c4ab59ec5facd1ccb4432535d660a5629a47f 100644 (file)
@@ -54,7 +54,7 @@ struct Manager {
 
         DUID dhcp_duid;
         DUID dhcp6_duid;
-        sd_id128_t product_uuid;
+        DUID duid_product_uuid;
         bool has_product_uuid;
         bool product_uuid_requested;
         Set *links_requesting_uuid;