Просмотр исходного кода

【增加】更新DNS状态
【修复】INTERNET 标志位问题
【修复】域名解析错误问题

Signed-off-by: liuxianliang <liuxianliang@rt-thread.com>

liuxianliang 6 лет назад
Родитель
Сommit
3b058e0809
2 измененных файлов с 31 добавлено и 20 удалено
  1. 1 0
      inc/ppp_netif.h
  2. 30 20
      src/ppp_netif.c

+ 1 - 0
inc/ppp_netif.h

@@ -27,6 +27,7 @@
 
 /* proviode a public interface to register netdev */
 rt_err_t ppp_netdev_add(struct netif *ppp_netif);
+rt_err_t ppp_netdev_refresh(struct netif *ppp_netif);
 void ppp_netdev_del(struct netif *ppp_netif);
 extern struct netdev *netdev_get_by_name(const char *name);
 extern int netdev_unregister(struct netdev *netdev);

+ 30 - 20
src/ppp_netif.c

@@ -64,34 +64,44 @@ rt_err_t ppp_netdev_add(struct netif *ppp_netif)
     netdev->gw = ppp_netif->gw;
     netdev->netmask = ppp_netif->netmask;
 
-	{
-        extern const ip_addr_t* dns_getserver(u8_t numdns);
-        extern void  dns_setserver(u8_t numdns, const ip_addr_t *dnsserver);
-
-		/* sometime we can get second dns server but first dns server is empty, wo need do something to fix it */
-		if (!ip_addr_isany(dns_getserver(0)))
-        {
-            netdev_low_level_set_dns_server(netdev, 0, dns_getserver(0));
-        }
-        else
-        {
-        #define DEF_DNS_SERVER "114.114.114.114"
-            ip_addr_t dns_server;
-            inet_aton(DEF_DNS_SERVER, &dns_server);
-            dns_setserver(0, &dns_server);
-        }
-
-        netdev_low_level_set_dns_server(netdev, 1, dns_getserver(1));
+    return result;
+}
+
+rt_err_t ppp_netdev_refresh(struct netif *ppp_netif)
+{
+    extern const ip_addr_t *dns_getserver(u8_t numdns);
+    extern void dns_setserver(u8_t numdns, const ip_addr_t *dnsserver);
+
+    char name[LWIP_NETIF_NAME_LEN + 1];
+    struct netdev *netdev = RT_NULL;
+
+    RT_ASSERT(ppp_netif);
+
+    rt_strncpy(name, ppp_netif->name, LWIP_NETIF_NAME_LEN);
+    netdev = netdev_get_by_name(name);
+
+    /* sometime we can get second dns server but first dns server is empty, wo need do something to fix it */
+    if (!ip_addr_isany(dns_getserver(0)))
+    {
+        netdev_low_level_set_dns_server(netdev, 0, dns_getserver(0));
+    }
+    else
+    {
+#define DEF_DNS_SERVER "114.114.114.114"
+        ip_addr_t dns_server;
+        inet_aton(DEF_DNS_SERVER, &dns_server);
+        dns_setserver(0, &dns_server);
     }
 
+    netdev_low_level_set_dns_server(netdev, 1, dns_getserver(1));
 
-    return result;
+    return RT_EOK;
 }
 
 void ppp_netdev_del(struct netif *ppp_netif)
 {
     char name[LWIP_NETIF_NAME_LEN + 1];
-    struct netdev *netdev;
+    struct netdev *netdev = RT_NULL;
 
     RT_ASSERT(ppp_netif);