Procházet zdrojové kódy

!461 优化ifconfig功能
Merge pull request !461 from songchao/rt-smart

bernard před 4 roky
rodič
revize
0dc3da272f

+ 8 - 0
components/net/lwip-2.1.2/src/netif/ethernetif.c

@@ -162,6 +162,14 @@ static int lwip_netdev_set_dns_server(struct netdev *netif, uint8_t dns_num, ip_
 #ifdef RT_LWIP_DHCP
 #ifdef RT_LWIP_DHCP
 static int lwip_netdev_set_dhcp(struct netdev *netif, rt_bool_t is_enabled)
 static int lwip_netdev_set_dhcp(struct netdev *netif, rt_bool_t is_enabled)
 {
 {
+    if(RT_TRUE == is_enabled)
+    {
+        dhcp_start((struct netif *)netif->user_data);
+    }
+    else
+    {
+        dhcp_stop((struct netif *)netif->user_data);
+    }
     netdev_low_level_set_dhcp_status(netif, is_enabled);
     netdev_low_level_set_dhcp_status(netif, is_enabled);
     return ERR_OK;
     return ERR_OK;
 }
 }

+ 45 - 0
components/net/netdev/src/netdev.c

@@ -959,6 +959,35 @@ static void netdev_list_if(void)
     }
     }
 }
 }
 
 
+#ifdef RT_LWIP_DHCP
+int netdev_dhcp_open(char* netdev_name)
+{
+    struct netdev *netdev = RT_NULL;
+    netdev = netdev_get_by_name(netdev_name);
+    if (netdev == RT_NULL)
+    {
+        rt_kprintf("bad network interface device name(%s).\n", netdev_name);
+        return -1;
+    }    
+    netdev_dhcp_enabled(netdev,RT_TRUE);
+    return 0;
+}
+
+int netdev_dhcp_close(char* netdev_name)
+{
+    struct netdev *netdev = RT_NULL;
+
+    netdev = netdev_get_by_name(netdev_name);
+    if (netdev == RT_NULL)
+    {
+        rt_kprintf("bad network interface device name(%s).\n", netdev_name);
+        return -1;
+    }
+    netdev_dhcp_enabled(netdev,RT_FALSE);
+    return 0;
+}
+#endif
+
 static void netdev_set_if(char* netdev_name, char* ip_addr, char* gw_addr, char* nm_addr)
 static void netdev_set_if(char* netdev_name, char* ip_addr, char* gw_addr, char* nm_addr)
 {
 {
     struct netdev *netdev = RT_NULL;
     struct netdev *netdev = RT_NULL;
@@ -971,6 +1000,10 @@ static void netdev_set_if(char* netdev_name, char* ip_addr, char* gw_addr, char*
         return;
         return;
     }
     }
 
 
+#ifdef RT_LWIP_DHCP
+    netdev_dhcp_close(netdev_name);
+#endif
+
     /* set IP address */
     /* set IP address */
     if ((ip_addr != RT_NULL) && inet_aton(ip_addr, &addr))
     if ((ip_addr != RT_NULL) && inet_aton(ip_addr, &addr))
     {
     {
@@ -996,6 +1029,15 @@ int netdev_ifconfig(int argc, char **argv)
     {
     {
         netdev_list_if();
         netdev_list_if();
     }
     }
+#ifdef RT_LWIP_DHCP    
+    else if(argc == 3)
+    {
+        if (!strcmp(argv[2], "dhcp"))
+        {
+            netdev_dhcp_open(argv[1]);    
+        }
+    }
+#endif    
     else if (argc == 5)
     else if (argc == 5)
     {
     {
         rt_kprintf("config : %s\n", argv[1]);
         rt_kprintf("config : %s\n", argv[1]);
@@ -1007,6 +1049,9 @@ int netdev_ifconfig(int argc, char **argv)
     else
     else
     {
     {
         rt_kprintf("bad parameter! e.g: ifconfig e0 192.168.1.30 192.168.1.1 255.255.255.0\n");
         rt_kprintf("bad parameter! e.g: ifconfig e0 192.168.1.30 192.168.1.1 255.255.255.0\n");
+#ifdef RT_LWIP_DHCP        
+        rt_kprintf("bad parameter! e.g: ifconfig e0 dhcp\n");
+#endif        
     }
     }
 
 
     return 0;
     return 0;