Hello,
I've been working on using DHCP to automatically configure a K60 using a TWR-K60 + TWR-SER development setup.
The OS is MQX 3.7. I tried using the code below:
error = ipcfg_bind_dhcp_wait(IPCFG_default_enet_device, 0, NULL);
This was followed by checking the error for the result, and printing out the resulting ip information
using the same code that's in the Security_Network.c file (lines 98-101).
The scenario was this:
I plugged in the TWR-SER board to an isolated switch connected only to a DHCP server. The configuration worked, and I was able to see the correct IP Address, Netmask, Gateway, and DNS address. The lease time on the DHCP server was set to 5 minutes. After about 1 minute, I plugged the TWR-SER board into another network with a different DHCP server. The lease was renewed after a few minutes, and I was able to see the correct IP, Gateway, and NetMask, but the DNS server address was the same as before.
After digging through some of the RTCS code, I found the relevant section called during a renew of the DHCP lease, starting at line 949 in ipcfg.c, and it looks like (with RTCSCFG_ENABLE_LWDNS set) the only update to the DNS address happens by:
ipcfg_data[device].dns = ntohl (optptr);
The global LWDNS_server_ipaddr is never updated when the lease is renewed. Is there any reason for this? I added the following line:
ipcfg_add_dns_ip (device, ipcfg_data[device].dns);
This seems to do the trick, the DNS address is now included in the new DHCP lease.
I probably should have posted this in the MQX RTCS forum... Can a moderator move the post?
This might be helpful for someone. Before binding dhcp, use the following to make sure the network link is ready:
//wait for the network to be ready
while (ipcfg_task_poll() == FALSE);
//next bind dhcp
I had the same problem that after wireless had been disconnected I was unable to get correct DNS address. This thread was helpful but my problem finally was solved by code mentioned above.