diff --git a/man/systemd.network.xml b/man/systemd.network.xml index e2d698285e5..4eae51ad2b0 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -2565,6 +2565,17 @@ NFTSet=prefix:netdev:filter:eth_ipv4_prefix + + BOOTP= + + Takes a boolean. The DHCPv4 client can be configured to communicate with BOOP servers that + don't accept Option 53, DHCP Message Type. In this configuration, a BOOTP Request is sent without + any options by default. A BOOTP reply that contains Option 1: Subnet Mask is expected. + + + + + diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index d94ac1a213a..eb300a4e44a 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1477,6 +1477,10 @@ 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_send_bootp); + if (r < 0) + return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set BOOTP flag: %m"); + 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 dc462b690c2..ebaf97a412c 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -245,6 +245,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_send_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 b61914ea7aa..55c08bbed7d 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -179,6 +179,7 @@ struct Network { OrderedHashmap *dhcp_client_send_vendor_options; char *dhcp_netlabel; NFTSetContext dhcp_nft_set_context; + bool dhcp_send_bootp; /* DHCPv6 Client support */ bool dhcp6_use_address;