From 0dbb5139a7d42fcf938e0091bb8f14a758aab666 Mon Sep 17 00:00:00 2001 From: Colin Foster Date: Tue, 22 Oct 2024 13:26:36 -0500 Subject: [PATCH] network/dhcp4: add ability to use BOOTP Add the following network option to enable BOOTP: [DHCPv4] Bootp=yes This will allow a two message request / reply sequence that doesn't require DHCP message types. Co-authored-by: Avram Dorfman --- man/systemd.network.xml | 10 ++++++++++ src/network/networkd-dhcp4.c | 5 +++++ src/network/networkd-network-gperf.gperf | 1 + src/network/networkd-network.h | 1 + 4 files changed, 17 insertions(+) diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 53221cbd5ea..c3836b0446e 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -2603,6 +2603,16 @@ NFTSet=prefix:netdev:filter:eth_ipv4_prefix + + BOOTP= + + Takes a boolean. When enabled, the DHCPv4 client will be configured to communicate with BOOTP + servers, rather than with DHCP servers. Defaults to off. + + + + + diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 7bb203e70a5..981b28b7776 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1498,6 +1498,11 @@ static int dhcp4_configure(Link *link) { if (r < 0) return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to allocate DHCPv4 client: %m"); + r = sd_dhcp_client_set_bootp(link->dhcp_client, link->network->dhcp_use_bootp); + if (r < 0) + return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to %s BOOTP: %m", + enable_disable(link->network->dhcp_use_bootp)); + r = sd_dhcp_client_attach_event(link->dhcp_client, link->manager->event, 0); if (r < 0) return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to attach event to DHCPv4 client: %m"); diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 54d2783c804..36b833ef369 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -269,6 +269,7 @@ DHCPv4.QuickAck, config_parse_bool, DHCPv4.RequestOptions, config_parse_dhcp_request_options, AF_INET, 0 DHCPv4.Anonymize, config_parse_bool, 0, offsetof(Network, dhcp_anonymize) DHCPv4.SendHostname, config_parse_dhcp_send_hostname, AF_INET, 0 +DHCPv4.BOOTP, config_parse_bool, 0, offsetof(Network, dhcp_use_bootp) DHCPv4.Hostname, config_parse_hostname, 0, offsetof(Network, dhcp_hostname) DHCPv4.Label, config_parse_dhcp_label, 0, offsetof(Network, dhcp_label) DHCPv4.RequestBroadcast, config_parse_tristate, 0, offsetof(Network, dhcp_broadcast) diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index 0808fee6943..51c9160760f 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -114,6 +114,7 @@ typedef struct Network { /* DHCP Client Support */ AddressFamily dhcp; struct in_addr dhcp_request_address; + bool dhcp_use_bootp; DHCPClientIdentifier dhcp_client_identifier; DUID dhcp_duid; uint32_t dhcp_iaid; -- 2.47.3