chiark / gitweb /
dhcp: Add maximum message size option
authorPatrik Flykt <patrik.flykt@linux.intel.com>
Mon, 9 Dec 2013 21:43:28 +0000 (23:43 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 12 Dec 2013 16:43:34 +0000 (11:43 -0500)
Add maximum message size option to keep some DHCP server implementations
from sending too big messages. See ConnMan commit
0c5c862749c05193cf4c513628328c6db02b5222.

src/libsystemd-dhcp/dhcp-client.c
src/libsystemd-dhcp/dhcp-protocol.h

index 4980174e005b665cbf157055f65d81882a738326..b1bdd385930d90d617b4222ff0f4937eb65324dd 100644 (file)
@@ -186,6 +186,7 @@ static int client_packet_init(sd_dhcp_client *client, uint8_t type,
                               uint8_t **opt, size_t *optlen)
 {
         int err;
+        be16_t max_size;
 
         *opt = (uint8_t *)(message + 1);
 
@@ -229,6 +230,17 @@ static int client_packet_init(sd_dhcp_client *client, uint8_t type,
                                          client->req_opts);
                 if (err < 0)
                         return err;
+
+                /* Some DHCP servers will send bigger DHCP packets than the
+                   defined default size unless the Maximum Messge Size option
+                   is explicitely set */
+                max_size = htobe16(DHCP_IP_UDP_SIZE + DHCP_MESSAGE_SIZE +
+                                   DHCP_CLIENT_MIN_OPTIONS_SIZE);
+                err = dhcp_option_append(opt, optlen,
+                                         DHCP_OPTION_MAXIMUM_MESSAGE_SIZE,
+                                         2, &max_size);
+                if (err < 0)
+                        return err;
         }
 
         return 0;
index 95c4f4ea66fb977ba6408ea452053c28ee354b03..f5f490d8b918a178a16de864b7f779e1e1d7b742 100644 (file)
@@ -111,6 +111,7 @@ enum {
         DHCP_OPTION_MESSAGE_TYPE                = 53,
         DHCP_OPTION_SERVER_IDENTIFIER           = 54,
         DHCP_OPTION_PARAMETER_REQUEST_LIST      = 55,
+        DHCP_OPTION_MAXIMUM_MESSAGE_SIZE        = 57,
         DHCP_OPTION_CLIENT_IDENTIFIER           = 61,
         DHCP_OPTION_END                         = 255,
 };