获取的地址如下:
ip address: 192.168.0.64
gw address: 192.168.0.1
net mask : 255.255.0.0
dns server #0: 192.168.0.1
dns server #1: 8.8.8.8
手动设置为静态IP时,IP如下:
ip address: 192.168.0.240
gw address: 192.168.1.1
net mask : 255.255.0.0
dns server #0: 192.168.0.1
dns server #1: 114.114.114.114
可以很明显的发现 dns server #0:与设置的并不相同
修改代码
.dns_address[0] = "1.1.1.1",
发现能正确修改,故判断代码没有问题,问题肯定是网卡层或者协议栈有限制
发现代码问题如下:
代码位于”netdev下”
void netdev_low_level_set_dns_server(struct netdev *netdev, uint8_t dns_num, const ip_addr_t dns_server)
{
int index;
RT_ASSERT(dns_server);
if (netdev == RT_NULL)
{
return;
}
/ 问题代码就在这里
设置DNS不能两个同时设置,需要分两次设置
由于测试环境是动态获取IP后设置为静态,之前DNS #1 是 新设置的 DNS #2
这里循环判断了历史的两个DNS是否与新的相同,只要其中一个相同就返回
此处这样写:我猜测有两个原因,1是防止两个DNS设置为一样了,2是相同DNS不重复设置
此问题可以说是一个BUG,希望官方能修正
/
/ check DNS servers is exist */
for (index = 0; index < NETDEV_DNS_SERVERS_NUM; index++)
{
if (ip_addr_cmp(&(netdev->dns_servers[index]), dns_server))
{
return;
}
}
if (dns_num < NETDEV_DNS_SERVERS_NUM)
{
ip_addr_copy(netdev->dns_servers[dns_num], dns_server);
/ execute DNS servers address change callback function */
if (netdev->addr_callback)
{
netdev->addr_callback(netdev, NETDEV_CB_ADDR_DNS_SERVER);
}
}
}