Bladeren bron

modify ifconfig function

宋超 4 jaren geleden
bovenliggende
commit
fac993e066
2 gewijzigde bestanden met toevoegingen van 80 en 17 verwijderingen
  1. 17 17
      components/net/lwip-2.1.2/src/netif/ethernetif.c
  2. 63 0
      components/net/netdev/src/netdev.c

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

@@ -111,39 +111,39 @@ static char eth_rx_thread_stack[RT_LWIP_ETHTHREAD_STACKSIZE];
 #include "lwip/netdb.h"
 #include <netdev.h>
 
-static int lwip_netdev_set_up(struct netdev *netif)
+static int lwip_netdev_set_up(struct netdev *netdev)
 {
-    netif_set_up((struct netif *)netif->user_data);
+    netif_set_up((struct netif *)netdev->user_data);
     return ERR_OK;
 }
 
-static int lwip_netdev_set_down(struct netdev *netif)
+static int lwip_netdev_set_down(struct netdev *netdev)
 {
-    netif_set_down((struct netif *)netif->user_data);
+    netif_set_down((struct netif *)netdev->user_data);
     return ERR_OK;
 }
 
-static int lwip_netdev_set_addr_info(struct netdev *netif, ip_addr_t *ip_addr, ip_addr_t *netmask, ip_addr_t *gw)
+static int lwip_netdev_set_addr_info(struct netdev *netdev, ip_addr_t *ip_addr, ip_addr_t *netmask, ip_addr_t *gw)
 {
     if (ip_addr && netmask && gw)
     {
-        netif_set_addr((struct netif *)netif->user_data, ip_2_ip4(ip_addr), ip_2_ip4(netmask), ip_2_ip4(gw));
+        netif_set_addr((struct netif *)netdev->user_data, ip_2_ip4(ip_addr), ip_2_ip4(netmask), ip_2_ip4(gw));
     }
     else
     {
         if (ip_addr)
         {
-            netif_set_ipaddr((struct netif *)netif->user_data, ip_2_ip4(ip_addr));
+            netif_set_ipaddr((struct netif *)netdev->user_data, ip_2_ip4(ip_addr));
         }
 
         if (netmask)
         {
-            netif_set_netmask((struct netif *)netif->user_data, ip_2_ip4(netmask));
+            netif_set_netmask((struct netif *)netdev->user_data, ip_2_ip4(netmask));
         }
 
         if (gw)
         {
-            netif_set_gw((struct netif *)netif->user_data, ip_2_ip4(gw));
+            netif_set_gw((struct netif *)netdev->user_data, ip_2_ip4(gw));
         }
     }
 
@@ -151,7 +151,7 @@ static int lwip_netdev_set_addr_info(struct netdev *netif, ip_addr_t *ip_addr, i
 }
 
 #ifdef RT_LWIP_DNS
-static int lwip_netdev_set_dns_server(struct netdev *netif, uint8_t dns_num, ip_addr_t *dns_server)
+static int lwip_netdev_set_dns_server(struct netdev *netdev, uint8_t dns_num, ip_addr_t *dns_server)
 {
     extern void dns_setserver(uint8_t dns_num, const ip_addr_t *dns_server);
     dns_setserver(dns_num, dns_server);
@@ -160,9 +160,9 @@ static int lwip_netdev_set_dns_server(struct netdev *netif, uint8_t dns_num, ip_
 #endif /* RT_LWIP_DNS */
 
 #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 *netdev, rt_bool_t is_enabled)
 {
-    netdev_low_level_set_dhcp_status(netif, is_enabled);
+    netdev_low_level_set_dhcp_status(netdev, is_enabled);
     return ERR_OK;
 }
 #endif /* RT_LWIP_DHCP */
@@ -172,7 +172,7 @@ static int lwip_netdev_set_dhcp(struct netdev *netif, rt_bool_t is_enabled)
 extern int lwip_ping_recv(int s, int *ttl);
 extern err_t lwip_ping_send(int s, ip_addr_t *addr, int size);
 
-int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len, 
+int lwip_netdev_ping(struct netdev *netdev, const char *host, size_t data_len, 
                         uint32_t timeout, struct netdev_ping_resp *ping_resp)
 {
     int s, ttl, recv_len, result = 0;
@@ -188,7 +188,7 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
     struct sockaddr_in *h = RT_NULL;
     struct in_addr ina;
     
-    RT_ASSERT(netif);
+    RT_ASSERT(netdev);
     RT_ASSERT(host);
     RT_ASSERT(ping_resp);
 
@@ -245,7 +245,7 @@ __exit:
 #endif /* RT_LWIP_USING_PING */
 
 #if defined (RT_LWIP_TCP) || defined (RT_LWIP_UDP)
-void lwip_netdev_netstat(struct netdev *netif)
+void lwip_netdev_netstat(struct netdev *netdev)
 {
     extern void list_tcps(void);
     extern void list_udps(void);
@@ -260,9 +260,9 @@ 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)
+static int lwip_netdev_set_default(struct netdev *netdev)
 {
-    netif_set_default((struct netif *)netif->user_data);
+    netif_set_default((struct netif *)netdev->user_data);
     return ERR_OK;
 }
 

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

@@ -959,6 +959,53 @@ static void netdev_list_if(void)
     }
 }
 
+#ifdef RT_LWIP_DHCP
+struct netif;
+void dhcp_stop(struct netif *netif);
+int dhcp_start(struct netif *netif);
+int netdev_dhcp_open(char* netdev_name)
+{
+    struct netdev *netdev = RT_NULL;
+    int ret;
+    netdev = netdev_get_by_name(netdev_name);
+    if (netdev == RT_NULL)
+    {
+        rt_kprintf("bad network interface device name(%s).\n", netdev_name);
+        return -1;
+    }    
+    if (!netdev_is_dhcp_enabled(netdev))
+    {
+        ret = dhcp_start(netdev->user_data);
+        if(ret != 0)
+        {
+            LOG_E("dhcp start failed\n");
+        }
+        netdev_low_level_set_dhcp_status(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;
+    }
+    if (netdev_is_dhcp_enabled(netdev))
+    {
+        dhcp_stop(netdev->user_data);    
+        netdev_low_level_set_dhcp_status(netdev, RT_FALSE);
+    }
+    
+    return 0;
+}
+#endif
+
 static void netdev_set_if(char* netdev_name, char* ip_addr, char* gw_addr, char* nm_addr)
 {
     struct netdev *netdev = RT_NULL;
@@ -971,6 +1018,10 @@ static void netdev_set_if(char* netdev_name, char* ip_addr, char* gw_addr, char*
         return;
     }
 
+#ifdef RT_LWIP_DHCP
+    netdev_dhcp_close(netdev_name);
+#endif
+
     /* set IP address */
     if ((ip_addr != RT_NULL) && inet_aton(ip_addr, &addr))
     {
@@ -996,6 +1047,15 @@ int netdev_ifconfig(int argc, char **argv)
     {
         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)
     {
         rt_kprintf("config : %s\n", argv[1]);
@@ -1007,6 +1067,9 @@ int netdev_ifconfig(int argc, char **argv)
     else
     {
         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;