diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2024-09-15 19:42:05 +0200 |
---|---|---|
committer | Daan De Meyer <daan.j.demeyer@gmail.com> | 2024-09-17 21:03:59 +0200 |
commit | fc956a397300e71129618c7461ce4af88275302d (patch) | |
tree | 8d9258fc94cbec5e412d650e18651fe08d7810c2 /src/network/networkd-dhcp4.c | |
parent | Merge pull request #34457 from poettering/uki-with-many-testcase (diff) | |
download | systemd-fc956a397300e71129618c7461ce4af88275302d.tar.xz systemd-fc956a397300e71129618c7461ce4af88275302d.zip |
network/dhcp4: use device_get_property_bool() at link_needs_dhcp_broadcast()
No functional change, just refactoring.
Diffstat (limited to '')
-rw-r--r-- | src/network/networkd-dhcp4.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 0a784553d0..ecda55e5be 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -6,6 +6,7 @@ #include <linux/if_arp.h> #include "alloc-util.h" +#include "device-private.h" #include "dhcp-client-internal.h" #include "hostname-setup.h" #include "hostname-util.h" @@ -1428,27 +1429,33 @@ static int dhcp4_set_request_address(Link *link) { } static bool link_needs_dhcp_broadcast(Link *link) { - const char *val; int r; assert(link); assert(link->network); /* Return the setting in DHCP[4].RequestBroadcast if specified. Otherwise return the device property - * ID_NET_DHCP_BROADCAST setting, which may be set for interfaces requiring that the DHCPOFFER message - * is being broadcast because they can't handle unicast messages while not fully configured. - * If neither is set or a failure occurs, return false, which is the default for this flag. - */ + * ID_NET_DHCP_BROADCAST setting, which may be set for interfaces requiring that the DHCPOFFER + * message is being broadcast because they can't handle unicast messages while not fully configured. + * If neither is set or a failure occurs, return false, which is the default for this flag. */ + r = link->network->dhcp_broadcast; - if (r < 0 && link->dev && sd_device_get_property_value(link->dev, "ID_NET_DHCP_BROADCAST", &val) >= 0) { - r = parse_boolean(val); - if (r < 0) - log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to parse ID_NET_DHCP_BROADCAST, ignoring: %m"); - else - log_link_debug(link, "DHCPv4 CLIENT: Detected ID_NET_DHCP_BROADCAST='%d'.", r); + if (r >= 0) + return r; + + if (!link->dev) + return false; + r = device_get_property_bool(link->dev, "ID_NET_DHCP_BROADCAST"); + if (r < 0) { + if (r != -ENOENT) + log_link_warning_errno(link, r, "DHCPv4 CLIENT: Failed to get or parse ID_NET_DHCP_BROADCAST, ignoring: %m"); + + return false; } - return r == true; + + log_link_debug(link, "DHCPv4 CLIENT: Detected ID_NET_DHCP_BROADCAST='%d'.", r); + return r; } static bool link_dhcp4_ipv6_only_mode(Link *link) { |