Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: coap-example Borsch coap-example
Fork of NetworkServices by
Diff: DHCPClient/DHCPClient.cpp
- Revision:
- 16:82e7a0bf58d8
- Parent:
- 15:14382459c8b7
- Child:
- 17:c976088bf39d
--- a/DHCPClient/DHCPClient.cpp Thu Jun 15 20:29:03 2017 +0000
+++ b/DHCPClient/DHCPClient.cpp Sat Jul 01 07:20:29 2017 +0000
@@ -4,7 +4,7 @@
#include "UDPSocket.h"
#include "DHCPClient.h"
-#define DBG_DHCP 0
+#define DBG_DHCP 1
#if DBG_DHCP
#define DBG(...) do{debug("[%s:%d]", __PRETTY_FUNCTION__,__LINE__);debug(__VA_ARGS__);} while(0);
@@ -110,20 +110,24 @@
void DHCPClient::callback()
{
- //printf("DHCPClient callback\n");
+ //DBG("DHCPClient callback\n");
SocketAddress host;
int recv_len = m_udp->recvfrom(&host, (char*)m_buf, sizeof(m_buf));
if (recv_len < 0) {
+ //DBG("recv_len < 0\n");
return;
}
if (!verify(m_buf, recv_len)) {
+ DBG("!verify(m_buf, recv_len)\n");
return;
}
int r = offer(m_buf, recv_len);
if (r == DHCPOFFER) {
+ DBG("r == DHCPOFFER\n");
int send_size = request();
m_udp->sendto(m_server, (char*)m_buf, send_size);
} else if (r == DHCPACK) {
+ DBG("r == DHCPACK\n");
exit_flag = true;
}
}
@@ -156,33 +160,54 @@
}
}
-int DHCPClient::setup(NetworkStack *ns, int timeout_ms)
+int DHCPClient::setup(NetworkStack *ns, uint8_t mac_addr[6], int timeout_ms)
{
+ memcpy(chaddr, mac_addr, 6);
+
int interval_ms = 5*1000; // 5000msec
if (timeout_ms < interval_ms) {
interval_ms = timeout_ms;
}
+
UDPSocket udp_sock;
m_udp = &udp_sock;
- udp_sock.open(ns);
+ nsapi_error_t err;
+ err = udp_sock.open(ns);
+ if (err) {
+ DBG("setup failed to open UDP socket.");
+ return err;
+ }
udp_sock.set_blocking(false);
- udp_sock.bind(68); // local port
+ err = udp_sock.bind(68); // local port
+ if (err) {
+ DBG("setup failed in bind: %d", err);
+ return err;
+ }
m_server.set_ip_address("255.255.255.255"); // DHCP broadcast
m_server.set_port(67); // DHCP broadcast
exit_flag = false;
- int err = 0;
+ err = 0;
int seq = 0;
int send_size;
while(!exit_flag) {
switch(seq) {
case 0:
+ DBG("case 0\n");
m_retry = 0;
seq++;
break;
case 1:
+ DBG("case 1\n");
send_size = discover();
- udp_sock.sendto(m_server, (char*)m_buf, send_size);
+ DBG("udp sock sendto begins\n");
+ nsapi_size_or_error_t err;
+ err = udp_sock.sendto(m_server, (char*)m_buf, send_size);
+ DBG("udp sock sendto ends\n");
+ if (err < 0) {
+ DBG("udp sendto error: %d\n", err);
+ return err;
+ }
m_interval.reset();
m_interval.start();
seq++;
