From: Yu Watanabe Date: Wed, 21 Apr 2021 04:35:57 +0000 (+0900) Subject: network: dhcp: constify link_get_duid() X-Git-Tag: v249-rc1~367^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=28f9667d05876c08cbd3be64b77b63a8cbdaacb8;p=thirdparty%2Fsystemd.git network: dhcp: constify link_get_duid() --- diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c index dd4956bd5f5..8357b2b99df 100644 --- a/src/network/networkd-dhcp-common.c +++ b/src/network/networkd-dhcp-common.c @@ -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) { diff --git a/src/network/networkd-dhcp-common.h b/src/network/networkd-dhcp-common.h index fc85fb4706d..316f5cf10b2 100644 --- a/src/network/networkd-dhcp-common.h +++ b/src/network/networkd-dhcp-common.h @@ -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_; diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index fce1d03de5e..562ce5ca542 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -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"); diff --git a/src/network/networkd-manager.h b/src/network/networkd-manager.h index 9cb99325db1..e02c4ab59ec 100644 --- a/src/network/networkd-manager.h +++ b/src/network/networkd-manager.h @@ -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;