Merge pull request #2986 from Lawlieta/develop

Fix dns server address set error and improve the default netdev set operations
This commit is contained in:
Bernard Xiong 2019-08-22 20:36:58 +08:00 committed by GitHub
commit 200f3d4480
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 117 additions and 80 deletions

View File

@ -279,13 +279,14 @@ dns_setserver(u8_t numdns, ip_addr_t *dnsserver)
dns_servers[numdns] = (*dnsserver);
#ifdef RT_USING_NETDEV
extern struct netif *netif_default;
extern struct netif *netif_list;
extern struct netdev *netdev_get_by_name(const char *name);
extern void netdev_low_level_set_dns_server(struct netdev *netdev, uint8_t dns_num, const ip_addr_t *dns_server);
struct netif *netif = NULL;
/* set network interface device DNS server address */
if (netif_default) {
netdev_low_level_set_dns_server(netdev_get_by_name(netif_default->name), numdns, dnsserver);
for (netif = netif_list; netif != NULL; netif = netif->next) {
netdev_low_level_set_dns_server(netdev_get_by_name(netif->name), numdns, dnsserver);
}
#endif /* RT_USING_NETDEV */
}

View File

@ -253,6 +253,12 @@ void lwip_netdev_netstat(struct netdev *netif)
#endif /* RT_LWIP_TCP || RT_LWIP_UDP */
#endif /* RT_USING_FINSH */
static int lwip_netdev_set_default(struct netdev *netif)
{
netif_set_default((struct netif *)netif->user_data);
return ERR_OK;
}
const struct netdev_ops lwip_netdev_ops =
{
lwip_netdev_set_up,
@ -282,6 +288,8 @@ const struct netdev_ops lwip_netdev_ops =
lwip_netdev_netstat,
#endif /* RT_LWIP_TCP || RT_LWIP_UDP */
#endif /* RT_USING_FINSH */
lwip_netdev_set_default,
};
static int netdev_add(struct netif *lwip_netif)

View File

@ -370,13 +370,14 @@ dns_setserver(u8_t numdns, const ip_addr_t *dnsserver)
dns_servers[numdns] = (*dnsserver);
#ifdef RT_USING_NETDEV
extern struct netif *netif_default;
extern struct netif *netif_list;
extern struct netdev *netdev_get_by_name(const char *name);
extern void netdev_low_level_set_dns_server(struct netdev *netdev, uint8_t dns_num, const ip_addr_t *dns_server);
struct netif *netif = NULL;
/* set network interface device DNS server address */
if (netif_default) {
netdev_low_level_set_dns_server(netdev_get_by_name(netif_default->name), numdns, dnsserver);
for (netif = netif_list; netif != NULL; netif = netif->next) {
netdev_low_level_set_dns_server(netdev_get_by_name(netif->name), numdns, dnsserver);
}
#endif /* RT_USING_NETDEV */
} else {

View File

@ -261,6 +261,12 @@ void lwip_netdev_netstat(struct netdev *netif)
#endif /* RT_LWIP_TCP || RT_LWIP_UDP */
#endif /* RT_USING_FINSH */
static int lwip_netdev_set_default(struct netdev *netif)
{
netif_set_default((struct netif *)netif->user_data);
return ERR_OK;
}
const struct netdev_ops lwip_netdev_ops =
{
lwip_netdev_set_up,
@ -290,6 +296,8 @@ const struct netdev_ops lwip_netdev_ops =
lwip_netdev_netstat,
#endif /* RT_LWIP_TCP || RT_LWIP_UDP */
#endif /* RT_USING_FINSH */
lwip_netdev_set_default,
};
static int netdev_add(struct netif *lwip_netif)

View File

@ -367,13 +367,14 @@ dns_setserver(u8_t numdns, const ip_addr_t *dnsserver)
dns_servers[numdns] = (*dnsserver);
#ifdef RT_USING_NETDEV
extern struct netif *netif_default;
extern struct netif *netif_list;
extern struct netdev *netdev_get_by_name(const char *name);
extern void netdev_low_level_set_dns_server(struct netdev *netdev, uint8_t dns_num, const ip_addr_t *dns_server);
struct netif *netif = NULL;
/* set network interface device DNS server address */
if (netif_default) {
netdev_low_level_set_dns_server(netdev_get_by_name(netif_default->name), numdns, dnsserver);
for (netif = netif_list; netif != NULL; netif = netif->next) {
netdev_low_level_set_dns_server(netdev_get_by_name(netif->name), numdns, dnsserver);
}
#endif /* RT_USING_NETDEV */
} else {

View File

@ -262,6 +262,12 @@ void lwip_netdev_netstat(struct netdev *netif)
#endif /* RT_LWIP_TCP || RT_LWIP_UDP */
#endif /* RT_USING_FINSH */
static int lwip_netdev_set_default(struct netdev *netif)
{
netif_set_default((struct netif *)netif->user_data);
return ERR_OK;
}
const struct netdev_ops lwip_netdev_ops =
{
lwip_netdev_set_up,
@ -291,6 +297,8 @@ const struct netdev_ops lwip_netdev_ops =
lwip_netdev_netstat,
#endif /* RT_LWIP_TCP || RT_LWIP_UDP */
#endif /* RT_USING_FINSH */
lwip_netdev_set_default,
};
static int netdev_add(struct netif *lwip_netif)

View File

@ -137,6 +137,9 @@ struct netdev_ops
int (*ping)(struct netdev *netdev, const char *host, size_t data_len, uint32_t timeout, struct netdev_ping_resp *ping_resp);
void (*netstat)(struct netdev *netdev);
#endif
/* set default network interface device in current network stack*/
int (*set_default)(struct netdev *netdev);
};
/* The network interface device registered and unregistered*/

View File

@ -34,11 +34,11 @@ struct netdev *netdev_default;
/**
* This function will register network interface device and
* add it to network interface device list.
*
*
* @param netdev the network interface device object
* @param name the network interface device name
* @param user_data user-specific data
*
*
* @return 0: registered successfully
* -1: registered failed
*/
@ -105,9 +105,9 @@ int netdev_register(struct netdev *netdev, const char *name, void *user_data)
/**
* This function will unregister network interface device and
* delete it from network interface device list.
*
*
* @param netdev the network interface device object
*
*
* @return 0: unregistered successfully
* -1: unregistered failed
*/
@ -164,11 +164,11 @@ int netdev_unregister(struct netdev *netdev)
/**
* This function will get the first network interface device
* with the flags in network interface device list.
*
*
* @param flags the network interface device flags
*
*
* @return != NULL: network interface device object
* NULL: get failed
* NULL: get failed
*/
struct netdev *netdev_get_first_by_flags(uint16_t flags)
{
@ -201,11 +201,11 @@ struct netdev *netdev_get_first_by_flags(uint16_t flags)
/**
* This function will get the first network interface device
* in network interface device list by IP address.
*
*
* @param addr the network interface device IP address
*
*
* @return != NULL: network interface device object
* NULL: get failed
* NULL: get failed
*/
struct netdev *netdev_get_by_ipaddr(ip_addr_t *ip_addr)
{
@ -238,11 +238,11 @@ struct netdev *netdev_get_by_ipaddr(ip_addr_t *ip_addr)
/**
* This function will get network interface device
* in network interface device list by netdev name.
*
*
* @param name the network interface device name
*
*
* @return != NULL: network interface device object
* NULL: get failed
* NULL: get failed
*/
struct netdev *netdev_get_by_name(const char *name)
{
@ -276,11 +276,11 @@ struct netdev *netdev_get_by_name(const char *name)
/**
* This function will get the first network interface device
* in network interface device list by protocol family type.
*
*
* @param family the network interface device protocol family type
*
*
* @return != NULL: network interface device object
* NULL: get failed
* NULL: get failed
*/
struct netdev *netdev_get_by_family(int family)
{
@ -325,15 +325,15 @@ struct netdev *netdev_get_by_family(int family)
/**
* This function will get the family type from network interface device
*
*
* @param netdev network interface device object
*
*
* @return the network interface device family type
*/
int netdev_family_get(struct netdev *netdev)
{
RT_ASSERT(netdev);
RT_ASSERT(netdev);
return ((struct sal_proto_family *)netdev->sal_user_data)->family;
}
@ -341,7 +341,7 @@ int netdev_family_get(struct netdev *netdev)
/**
* This function will set default network interface device.
*
*
* @param netdev the network interface device to change
*/
void netdev_set_default(struct netdev *netdev)
@ -349,15 +349,21 @@ void netdev_set_default(struct netdev *netdev)
if (netdev)
{
netdev_default = netdev;
if (netdev->ops->set_default)
{
/* set default network interface device in the current network stack */
netdev->ops->set_default(netdev);
}
LOG_D("Setting default network interface device name(%s) successfully.", netdev->name);
}
}
/**
* This function will enable network interface device .
*
*
* @param netdev the network interface device to change
*
*
* @return 0: set status successfully
* -1: set status failed
*/
@ -370,7 +376,7 @@ int netdev_set_up(struct netdev *netdev)
LOG_E("The network interface device(%s) not support to set status.", netdev->name);
return -RT_ERROR;
}
/* network interface device status flags check */
if (netdev_is_up(netdev))
{
@ -382,9 +388,9 @@ int netdev_set_up(struct netdev *netdev)
}
/**
* This function will disable network interface device.
*
*
* @param netdev the network interface device to change
*
*
* @return 0: set status successfully
* -1: set sttaus failed
*/
@ -397,7 +403,7 @@ int netdev_set_down(struct netdev *netdev)
LOG_E("The network interface device(%s) not support to set status.", netdev->name);
return -RT_ERROR;
}
/* network interface device status flags check */
if (!netdev_is_up(netdev))
{
@ -410,10 +416,10 @@ int netdev_set_down(struct netdev *netdev)
/**
* This function will control network interface device DHCP capability enable or disable.
*
*
* @param netdev the network interface device device to change
* @param is_enable the new DHCP status
*
*
* @return 0: set DHCP status successfully
* -1: set DHCP status failed
*/
@ -432,17 +438,17 @@ int netdev_dhcp_enabled(struct netdev *netdev, rt_bool_t is_enabled)
{
return RT_EOK;
}
/* execute network interface device DHCP capability control operations */
return netdev->ops->set_dhcp(netdev, is_enabled);
}
/**
* This function will set network interface device IP address.
*
*
* @param netdev the network interface device to change
* @param ipaddr the new IP address
*
*
* @return 0: set IP address successfully
* -1: set IP address failed
*/
@ -456,7 +462,7 @@ int netdev_set_ipaddr(struct netdev *netdev, const ip_addr_t *ip_addr)
LOG_E("The network interface device(%s) not support to set IP address.", netdev->name);
return -RT_ERROR;
}
if (netdev_is_dhcp_enabled(netdev))
{
LOG_E("The network interface device(%s) DHCP capability is enable, not support set IP address.", netdev->name);
@ -469,10 +475,10 @@ int netdev_set_ipaddr(struct netdev *netdev, const ip_addr_t *ip_addr)
/**
* This function will set network interface device netmask address.
*
*
* @param netdev the network interface device to change
* @param netmask the new netmask address
*
*
* @return 0: set netmask address successfully
* -1: set netmask address failed
*/
@ -486,7 +492,7 @@ int netdev_set_netmask(struct netdev *netdev, const ip_addr_t *netmask)
LOG_E("The network interface device(%s) not support to set netmask address.", netdev->name);
return -RT_ERROR;
}
if (netdev_is_dhcp_enabled(netdev))
{
LOG_E("The network interface device(%s) DHCP capability is enable, not support set netmask address.", netdev->name);
@ -499,10 +505,10 @@ int netdev_set_netmask(struct netdev *netdev, const ip_addr_t *netmask)
/**
* This function will set network interface device gateway address.
*
*
* @param netdev the network interface device to change
* @param gateway the new gateway address
*
* @param gateway the new gateway address
*
* @return 0: set gateway address successfully
* -1: set gateway address failed
*/
@ -516,7 +522,7 @@ int netdev_set_gw(struct netdev *netdev, const ip_addr_t *gw)
LOG_E("The network interface device(%s) not support to set gateway address.", netdev->name);
return -RT_ERROR;
}
if (netdev_is_dhcp_enabled(netdev))
{
LOG_E("The network interface device(%s) DHCP capability is enable, not support set gateway address.", netdev->name);
@ -529,10 +535,10 @@ int netdev_set_gw(struct netdev *netdev, const ip_addr_t *gw)
/**
* This function will set network interface device DNS server address.
*
*
* @param netdev the network interface device to change
* @param dns_server the new DNS server address
*
*
* @return 0: set netmask address successfully
* -1: set netmask address failed
*/
@ -559,7 +565,7 @@ int netdev_set_dns_server(struct netdev *netdev, uint8_t dns_num, const ip_addr_
/**
* This function will set callback to be called when the network interface device status has been changed.
*
*
* @param netdev the network interface device to change
* @param status_callback the callback be called when the status has been changed.
*/
@ -573,7 +579,7 @@ void netdev_set_status_callback(struct netdev *netdev, netdev_callback_fn status
/**
* This function will set callback to be called when the network interface device address has been changed.
*
*
* @param netdev the network interface device to change
* @param addr_callback the callback be called when the address has been changed.
*/
@ -589,7 +595,7 @@ void netdev_set_addr_callback(struct netdev *netdev, netdev_callback_fn addr_cal
/**
* This function will set network interface device IP address.
* @NOTE it can only be called in the network interface device driver.
*
*
* @param netdev the network interface device to change
* @param ipaddr the new IP address
*/
@ -620,7 +626,7 @@ void netdev_low_level_set_ipaddr(struct netdev *netdev, const ip_addr_t *ip_addr
/**
* This function will set network interface device netmask address.
* @NOTE it can only be called in the network interface device driver.
*
*
* @param netdev the network interface device to change
* @param netmask the new netmask address
*/
@ -634,7 +640,7 @@ void netdev_low_level_set_netmask(struct netdev *netdev, const ip_addr_t *netmas
#ifdef RT_USING_SAL
/* set network interface device flags to internet up */
if (netdev_is_up(netdev) && netdev_is_link_up(netdev) &&
if (netdev_is_up(netdev) && netdev_is_link_up(netdev) &&
!ip_addr_isany(&(netdev->ip_addr)))
{
sal_check_netdev_internet_up(netdev);
@ -652,7 +658,7 @@ void netdev_low_level_set_netmask(struct netdev *netdev, const ip_addr_t *netmas
/**
* This function will set network interface device gateway address.
* @NOTE it can only be called in the network interface device driver.
*
*
* @param netdev the network interface device to change
* @param gateway the new gateway address
*/
@ -666,7 +672,7 @@ void netdev_low_level_set_gw(struct netdev *netdev, const ip_addr_t *gw)
#ifdef RT_USING_SAL
/* set network interface device flags to internet up */
if (netdev_is_up(netdev) && netdev_is_link_up(netdev) &&
if (netdev_is_up(netdev) && netdev_is_link_up(netdev) &&
!ip_addr_isany(&(netdev->ip_addr)))
{
sal_check_netdev_internet_up(netdev);
@ -684,10 +690,10 @@ void netdev_low_level_set_gw(struct netdev *netdev, const ip_addr_t *gw)
/**
* This function will set network interface device DNS server address.
* @NOTE it can only be called in the network interface device driver.
*
*
* @param netdev the network interface device to change
* @param dns_server the new DNS server address
*
*
*/
void netdev_low_level_set_dns_server(struct netdev *netdev, uint8_t dns_num, const ip_addr_t *dns_server)
{
@ -740,7 +746,7 @@ static void netdev_auto_change_default(struct netdev *netdev)
/**
* This function will set network interface device status.
* @NOTE it can only be called in the network interface device driver.
*
*
* @param netdev the network interface device to change
* @param is_up the new status
*/
@ -773,14 +779,14 @@ void netdev_low_level_set_status(struct netdev *netdev, rt_bool_t is_up)
/**
* This function will set network interface device active link status.
* @NOTE it can only be called in the network interface device driver.
*
*
* @param netdev the network interface device to change
* @param is_up the new link status
*/
void netdev_low_level_set_link_status(struct netdev *netdev, rt_bool_t is_up)
{
if (netdev && netdev_is_link_up(netdev) != is_up)
{
{
if (is_up)
{
netdev->flags |= NETDEV_FLAG_LINK_UP;
@ -796,7 +802,7 @@ void netdev_low_level_set_link_status(struct netdev *netdev, rt_bool_t is_up)
else
{
netdev->flags &= ~NETDEV_FLAG_LINK_UP;
/* set network interface device flags to internet down */
netdev->flags &= ~NETDEV_FLAG_INTERNET_UP;
@ -817,7 +823,7 @@ void netdev_low_level_set_link_status(struct netdev *netdev, rt_bool_t is_up)
/**
* This function will set network interface device DHCP status.
* @NOTE it can only be called in the network interface device driver.
*
*
* @param netdev the network interface device to change
* @param is_up the new DHCP status
*/
@ -889,7 +895,7 @@ static void netdev_list_if(void)
/* two numbers are displayed at one time*/
if (netdev->hwaddr[index] < 10 && index != netdev->hwaddr_len - 1)
rt_kprintf("0");
rt_kprintf("%d", netdev->hwaddr[index]);
}
}
@ -915,9 +921,9 @@ static void netdev_list_if(void)
{
ip_addr_t *addr;
int i;
addr = &netdev->ip6_addr[0];
if (!ip_addr_isany(addr))
{
rt_kprintf("ipv6 link-local: %s %s\n", inet_ntoa(*addr),
@ -929,7 +935,7 @@ static void netdev_list_if(void)
rt_kprintf("ipv6[%d] address: %s %s\n", i, inet_ntoa(*addr),
!ip_addr_isany(addr) ? "VALID" : "INVALID");
}
}
}
}
#endif /* NETDEV_IPV6 */
@ -937,7 +943,7 @@ static void netdev_list_if(void)
{
rt_kprintf("dns server #%d: %s\n", index, inet_ntoa(netdev->dns_servers[index]));
}
if (rt_slist_next(node))
{
rt_kprintf("\n");
@ -1016,7 +1022,7 @@ int netdev_cmd_ping(char* target_name, rt_uint32_t times, rt_size_t size)
struct netdev *netdev = RT_NULL;
struct netdev_ping_resp ping_resp;
int index, ret = 0;
if (size == 0)
{
size = NETDEV_PING_DATA_SIZE;
@ -1044,7 +1050,7 @@ int netdev_cmd_ping(char* target_name, rt_uint32_t times, rt_size_t size)
ret = netdev->ops->ping(netdev, (const char *)target_name, size, NETDEV_PING_RECV_TIMEO, &ping_resp);
if (ret == -RT_ETIMEOUT)
{
rt_kprintf("ping: from %s icmp_seq=%d timeout\n",
rt_kprintf("ping: from %s icmp_seq=%d timeout\n",
(ip_addr_isany(&(ping_resp.ip_addr))) ? target_name : inet_ntoa(ping_resp.ip_addr), index);
}
else if (ret == -RT_ERROR)
@ -1057,16 +1063,16 @@ int netdev_cmd_ping(char* target_name, rt_uint32_t times, rt_size_t size)
{
if (ping_resp.ttl == 0)
{
rt_kprintf("%d bytes from %s icmp_seq=%d time=%d ms\n",
rt_kprintf("%d bytes from %s icmp_seq=%d time=%d ms\n",
ping_resp.data_len, inet_ntoa(ping_resp.ip_addr), index, ping_resp.ticks);
}
else
{
rt_kprintf("%d bytes from %s icmp_seq=%d ttl=%d time=%d ms\n",
rt_kprintf("%d bytes from %s icmp_seq=%d ttl=%d time=%d ms\n",
ping_resp.data_len, inet_ntoa(ping_resp.ip_addr), index, ping_resp.ttl, ping_resp.ticks);
}
}
rt_thread_mdelay(NETDEV_PING_DELAY);
}
@ -1107,7 +1113,7 @@ static void netdev_list_dns(void)
{
rt_kprintf("dns server #%d: %s\n", index, inet_ntoa(netdev->dns_servers[index]));
}
if (rt_slist_next(node))
{
rt_kprintf("\n");
@ -1128,9 +1134,10 @@ static void netdev_set_dns(char *netdev_name, uint8_t dns_num, char *dns_server)
}
inet_aton(dns_server, &dns_addr);
netdev_set_dns_server(netdev, dns_num, &dns_addr);
rt_kprintf("set network interface device(%s) dns server #0: %s\n", netdev_name, dns_server);
if (netdev_set_dns_server(netdev, dns_num, &dns_addr) == RT_EOK)
{
rt_kprintf("set network interface device(%s) dns server #%d: %s\n", netdev_name, dns_num, dns_server);
}
}
int netdev_dns(int argc, char **argv)
@ -1196,7 +1203,7 @@ int netdev_netstat(int argc, char **argv)
{
rt_kprintf("Please input: netstat \n");
}
else
else
{
netdev_cmd_netstat();
}