Implement -B option as mentioned in dhcp --help 42/225942/2
authorNishant Chaprana <n.chaprana@samsung.com>
Tue, 25 Feb 2020 14:21:13 +0000 (19:51 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Mon, 2 Mar 2020 09:53:27 +0000 (15:23 +0530)
Change-Id: Id636629a50ee7d21ed908189c270394eb850e960
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
toys/pending/dhcp.c

index 9dad00a..3c70765 100644 (file)
@@ -82,7 +82,8 @@ GLOBALS(
 #define STATE_RENEW_REQUESTED 5
 #define STATE_RELEASED        6
 
-#define BOOTP_BROADCAST   0x8000
+#define BOOTP_BROADCAST_ON    0x8000
+#define BOOTP_BROADCAST_OFF   0x0000
 #define DHCP_MAGIC        0x63825363
 
 #define DHCP_REQUEST          1
@@ -1006,7 +1007,10 @@ static int dhcpc_sendmsg(int msgtype)
   // Handle the message specific settings
   switch (msgtype) {
   case DHCPDISCOVER: // Broadcast DISCOVER message to all servers
-    state->pdhcp.flags = htons(BOOTP_BROADCAST); //  Broadcast bit.
+    if (flag_chk(FLAG_B))
+      state->pdhcp.flags = htons(BOOTP_BROADCAST_ON); //  Broadcast bit set.
+    else
+      state->pdhcp.flags = htons(BOOTP_BROADCAST_OFF); //  Broadcast bit unset.
     if (flag_chk(FLAG_r)) {
       inet_aton(TT.req_ip, &rqsd);
       pend = dhcpc_addreqipaddr(&rqsd, pend);
@@ -1020,7 +1024,10 @@ static int dhcpc_sendmsg(int msgtype)
     if (flag_chk(FLAG_x)) pend = set_xopt(pend);
     break;
   case DHCPREQUEST: // Send REQUEST message to the server that sent the *first* OFFER
-    state->pdhcp.flags = htons(BOOTP_BROADCAST); //  Broadcast bit.
+    if (flag_chk(FLAG_B))
+      state->pdhcp.flags = htons(BOOTP_BROADCAST_ON); //  Broadcast bit set.
+    else
+      state->pdhcp.flags = htons(BOOTP_BROADCAST_OFF); //  Broadcast bit unset.
     if (state->status == STATE_RENEWING) memcpy(&state->pdhcp.ciaddr, &state->ipaddr.s_addr, 4);
     pend = dhcpc_addmaxsize(pend, htons(sizeof(dhcp_raw_t)));
     rqsd.s_addr = htonl(server);