aboutsummaryrefslogtreecommitdiff
path: root/networking/udhcp/clientpacket.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/udhcp/clientpacket.c')
-rw-r--r--networking/udhcp/clientpacket.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/networking/udhcp/clientpacket.c b/networking/udhcp/clientpacket.c
index 406fe340a..54f3f0e49 100644
--- a/networking/udhcp/clientpacket.c
+++ b/networking/udhcp/clientpacket.c
@@ -57,13 +57,18 @@ static void init_packet(struct dhcpMessage *packet, char type)
57 * goes towards the head of the packet. */ 57 * goes towards the head of the packet. */
58static void add_requests(struct dhcpMessage *packet) 58static void add_requests(struct dhcpMessage *packet)
59{ 59{
60 uint8_t c;
60 int end = end_option(packet->options); 61 int end = end_option(packet->options);
61 int i, len = 0; 62 int i, len = 0;
62 63
63 packet->options[end + OPT_CODE] = DHCP_PARAM_REQ; 64 packet->options[end + OPT_CODE] = DHCP_PARAM_REQ;
64 for (i = 0; dhcp_options[i].code; i++) 65 for (i = 0; (c = dhcp_options[i].code) != 0; i++) {
65 if (dhcp_options[i].flags & OPTION_REQ) 66 if (dhcp_options[i].flags & OPTION_REQ
66 packet->options[end + OPT_DATA + len++] = dhcp_options[i].code; 67 || (client_config.opt_mask[c >> 3] & (1 << (c & 7)))
68 ) {
69 packet->options[end + OPT_DATA + len++] = c;
70 }
71 }
67 packet->options[end + OPT_LEN] = len; 72 packet->options[end + OPT_LEN] = len;
68 packet->options[end + OPT_DATA + len] = DHCP_END; 73 packet->options[end + OPT_DATA + len] = DHCP_END;
69 74