Browse Source

Merge pull request #1418 from aozima/DHCPD

update DHCPD
Bernard Xiong 7 years ago
parent
commit
236fd82e5d

+ 10 - 0
components/net/Kconfig

@@ -201,6 +201,16 @@ config LWIP_USING_DHCPD
     bool "Enable DHCP server"
     default n
 
+    if LWIP_USING_DHCPD
+        config DHCPD_SERVER_IP
+            string "DHCPD SERVER IP address"
+            default 192.168.169.1
+
+        config DHCPD_USING_ROUTER
+            bool "alloc gateway ip for router"
+            default y
+    endif
+
 endif
 
 endmenu

+ 24 - 16
components/net/lwip_dhcpd/dhcp_server.c

@@ -41,33 +41,30 @@
 #include <lwip/init.h>
 
 #if (LWIP_VERSION) >= 0x02000000U
-#include <lwip/prot/dhcp.h>
+    #include <lwip/prot/dhcp.h>
 #endif
 
 /* DHCP server option */
 
 /* allocated client ip range */
 #ifndef DHCPD_CLIENT_IP_MIN
-#define DHCPD_CLIENT_IP_MIN     2
+    #define DHCPD_CLIENT_IP_MIN     2
 #endif
 #ifndef DHCPD_CLIENT_IP_MAX
-#define DHCPD_CLIENT_IP_MAX     254
+    #define DHCPD_CLIENT_IP_MAX     254
 #endif
 
 /* the DHCP server address */
-#ifndef DHCPD_SERVER_IPADDR0
-#define DHCPD_SERVER_IPADDR0      192UL
-#define DHCPD_SERVER_IPADDR1      168UL
-#define DHCPD_SERVER_IPADDR2      169UL
-#define DHCPD_SERVER_IPADDR3      1UL
+#ifndef DHCPD_SERVER_IP
+    #define DHCPD_SERVER_IP "192.168.169.1"
 #endif
 
 //#define DHCP_DEBUG_PRINTF
 
 #ifdef  DHCP_DEBUG_PRINTF
-#define DEBUG_PRINTF        rt_kprintf("[DHCP] "); rt_kprintf
+    #define DEBUG_PRINTF        rt_kprintf("[DHCP] "); rt_kprintf
 #else
-#define DEBUG_PRINTF(...)
+    #define DEBUG_PRINTF(...)
 #endif /* DHCP_DEBUG_PRINTF */
 
 /* we need some routines in the DHCP of lwIP */
@@ -79,11 +76,11 @@
 #define BUFSZ               1024
 
 #ifndef MAC_ADDR_LEN
-#define MAC_ADDR_LEN     6
+    #define MAC_ADDR_LEN     6
 #endif
 
 #ifndef MAC_TABLE_LEN
-#define MAC_TABLE_LEN     4
+    #define MAC_TABLE_LEN     4
 #endif
 
 struct mac_addr_t
@@ -215,12 +212,26 @@ static void dhcpd_thread_entry(void *parameter)
     struct dhcp_msg *msg;
     int optval = 1;
     struct mac_addr_t mac_addr;
+    uint8_t DHCPD_SERVER_IPADDR0, DHCPD_SERVER_IPADDR1, DHCPD_SERVER_IPADDR2, DHCPD_SERVER_IPADDR3;
 
     /* get ethernet interface. */
     netif = (struct netif *) parameter;
     RT_ASSERT(netif != RT_NULL);
 
     /* our DHCP server information */
+    {
+#if (LWIP_VERSION) >= 0x02000000U
+        ip4_addr_t addr;
+#else
+        struct ip_addr addr;
+#endif /* LWIP_VERSION */
+
+        ip4addr_aton(DHCPD_SERVER_IP, &addr);
+        DHCPD_SERVER_IPADDR0 = (ntohl(addr.addr) >> 24) & 0xFF;
+        DHCPD_SERVER_IPADDR1 = (ntohl(addr.addr) >> 16) & 0xFF;
+        DHCPD_SERVER_IPADDR2 = (ntohl(addr.addr) >>  8) & 0xFF;
+        DHCPD_SERVER_IPADDR3 = (ntohl(addr.addr) >>  0) & 0xFF;
+    }
     DEBUG_PRINTF("DHCP server IP: %d.%d.%d.%d  client IP: %d.%d.%d.%d-%d\n",
                  DHCPD_SERVER_IPADDR0, DHCPD_SERVER_IPADDR1,
                  DHCPD_SERVER_IPADDR2, DHCPD_SERVER_IPADDR3,
@@ -492,12 +503,9 @@ void dhcpd_start(const char *netif_name)
     {
         extern void set_if(const char *netif_name, const char *ip_addr, const char *gw_addr, const char *nm_addr);
 
-        char ip_str[4 * 4 + 1];
-
         dhcp_stop(netif);
 
-        sprintf(ip_str, "%d.%d.%d.%d", DHCPD_SERVER_IPADDR0, DHCPD_SERVER_IPADDR1, DHCPD_SERVER_IPADDR2, DHCPD_SERVER_IPADDR3);
-        set_if(netif_name, ip_str, "0.0.0.0", "255.255.255.0");
+        set_if(netif_name, DHCPD_SERVER_IP, "0.0.0.0", "255.255.255.0");
 
         netif_set_up(netif);
     }

+ 1 - 1
components/net/lwip_dhcpd/dhcp_server.h

@@ -31,7 +31,7 @@
 #ifndef DHCPV4_SERVER_H__
 #define DHCPV4_SERVER_H__
 
-void dhcpd_start(const char* netif_name);
+void dhcpd_start(const char *netif_name);
 
 #endif