]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: add [DHCPServer] RapidCommit= setting 29910/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 7 Nov 2023 16:33:43 +0000 (01:33 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 7 Nov 2023 17:42:03 +0000 (02:42 +0900)
man/systemd.network.xml
src/network/networkd-dhcp-server.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd-network.h

index 3e83caaf182c3b5c9acc6ed2e492886d293a8581..fe8c8a14c6a82017b18d3cee75dd01da83890280 100644 (file)
@@ -3768,6 +3768,18 @@ ServerAddress=192.168.0.1/24</programlisting>
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>RapidCommit=</varname></term>
+        <listitem>
+          <para>Takes a boolean. When true, the server supports
+          <ulink url="https://datatracker.ietf.org/doc/html/rfc4039">RFC 4039</ulink>. When a client sends
+          a DHCPDISCOVER message with the Rapid Commit option to the server, then the server will reply with
+          a DHCPACK message to the client, instead of DHCPOFFER. Defaults to true.</para>
+
+          <xi:include href="version-info.xml" xpointer="v255"/>
+        </listitem>
+      </varlistentry>
+
     </variablelist>
   </refsect1>
 
index 17939ce54ac8c0e68c5651619dbb3d2454190f2f..607fe0053c3c3299fd3d662d32d5464374d74efc 100644 (file)
@@ -418,6 +418,11 @@ static int dhcp4_server_configure(Link *link) {
         if (r < 0)
                 return log_link_warning_errno(link, r, "Failed to set boot filename for DHCPv4 server instance: %m");
 
+        r = sd_dhcp_server_set_rapid_commit(link->dhcp_server, link->network->dhcp_server_rapid_commit);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to %s Rapid Commit support for DHCPv4 server instance: %m",
+                                              enable_disable(link->network->dhcp_server_rapid_commit));
+
         for (sd_dhcp_lease_server_type_t type = 0; type < _SD_DHCP_LEASE_SERVER_TYPE_MAX; type ++) {
 
                 if (!link->network->dhcp_server_emit[type].emit)
index 080f72dc2cde8ef77eecd2cd0320ee3c02a0597f..628b1ad19f5b4de6345e4aaa5346ceab528f8b05 100644 (file)
@@ -342,6 +342,7 @@ DHCPServer.BindToInterface,                  config_parse_bool,
 DHCPServer.BootServerAddress,                config_parse_in_addr_non_null,                            AF_INET,                       offsetof(Network, dhcp_server_boot_server_address)
 DHCPServer.BootServerName,                   config_parse_dns_name,                                    0,                             offsetof(Network, dhcp_server_boot_server_name)
 DHCPServer.BootFilename,                     config_parse_string,                                      CONFIG_PARSE_STRING_SAFE_AND_ASCII, offsetof(Network, dhcp_server_boot_filename)
+DHCPServer.RapidCommit,                      config_parse_bool,                                        0,                             offsetof(Network, dhcp_server_rapid_commit)
 DHCPServerStaticLease.Address,               config_parse_dhcp_static_lease_address,                   0,                             0
 DHCPServerStaticLease.MACAddress,            config_parse_dhcp_static_lease_hwaddr,                    0,                             0
 Bridge.Cost,                                 config_parse_uint32,                                      0,                             offsetof(Network, cost)
index fbda52f8f318269663c1a1e038b37a457fe2056e..72ed2abd95706f2adb4add29248711515ce6091e 100644 (file)
@@ -428,6 +428,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
                 .dhcp_server_emit[SD_DHCP_LEASE_SIP].emit = true,
                 .dhcp_server_emit_router = true,
                 .dhcp_server_emit_timezone = true,
+                .dhcp_server_rapid_commit = true,
 
                 .router_lifetime_usec = RADV_DEFAULT_ROUTER_LIFETIME_USEC,
                 .router_dns_lifetime_usec = RADV_DEFAULT_VALID_LIFETIME_USEC,
index 021e7f9182b6c6334afa33147b8838a5bfd27c73..4995e55b5314496f6e393cc15c33a635a4fee75c 100644 (file)
@@ -228,6 +228,7 @@ struct Network {
         char *dhcp_server_boot_server_name;
         char *dhcp_server_boot_filename;
         usec_t dhcp_server_ipv6_only_preferred_usec;
+        bool dhcp_server_rapid_commit;
 
         /* link-local addressing support */
         AddressFamily link_local;