DHCP的困局
lwip中 tcpip_thread进程的启动问题,先上代码(rtt0.3.0 from svn):
sys_arch_init.c
void lwip_sys_init()
{
struct ip_addr ipaddr, netmask, gw;
#if LWIP_DHCP
rt_uint32_t mscnt = 0;
IP4_ADDR(&gw, 0,0,0,0);
IP4_ADDR(&ipaddr, 0,0,0,0);
IP4_ADDR(&netmask, 0,0,0,0);
#else
IP4_ADDR(&ipaddr, RT_LWIP_IPADDR0, RT_LWIP_IPADDR1, RT_LWIP_IPADDR2, RT_LWIP_IPADDR3);
IP4_ADDR(&gw, RT_LWIP_GWADDR0, RT_LWIP_GWADDR1, RT_LWIP_GWADDR2, RT_LWIP_GWADDR3);
IP4_ADDR(&netmask, RT_LWIP_MSKADDR0, RT_LWIP_MSKADDR1, RT_LWIP_MSKADDR2, RT_LWIP_MSKADDR3);
#endif
tcpip_init(RT_NULL, RT_NULL);
netif_set_addr(netif_default, &ipaddr, &netmask, &gw);
netif_set_up(netif_default);
#if LWIP_DHCP
/* use DHCP client */
dhcp_start(netif_default);
while (1) {
rt_thread_delay(DHCP_FINE_TIMER_MSECS);
dhcp_fine_tmr();
mscnt += DHCP_FINE_TIMER_MSECS;
if (mscnt >= DHCP_COARSE_TIMER_SECS*1000)
{
dhcp_coarse_tmr();
mscnt = 0;
}
}
#endif
#if defined(RT_USING_FINSH) && (LWIP_STATS_DISPLAY)
finsh_syscall_append("lwip_info", (syscall_func)stats_display);
#endif
}
上述代码是引导启动tcpip_thread主进程的关键代码,看代码的流程,如果打开了DHCH,后面的“finsh_syscall_append...”似乎就运转不成啦。这里,代码中支持DHCP的while循环是否应该放在某个进程的末尾,充当DHCP的维持呢?
DHCP的困局
lwip中 tcpip_thread进程的启动问题,先上代码(rtt0.3.0 from svn):
sys_arch_init.c
void lwip_sys_init()
{
struct ip_addr ipaddr, netmask, gw;
#if LWIP_DHCP
rt_uint32_t mscnt = 0;
IP4_ADDR(&gw, 0,0,0,0);
IP4_ADDR(&ipaddr, 0,0,0,0);
IP4_ADDR(&netmask, 0,0,0,0);
#else
IP4_ADDR(&ipaddr, RT_LWIP_IPADDR0, RT_LWIP_IPADDR1, RT_LWIP_IPADDR2, RT_LWIP_IPADDR3);
IP4_ADDR(&gw, RT_LWIP_GWADDR0, RT_LWIP_GWADDR1, RT_LWIP_GWADDR2, RT_LWIP_GWADDR3);
IP4_ADDR(&netmask, RT_LWIP_MSKADDR0, RT_LWIP_MSKADDR1, RT_LWIP_MSKADDR2, RT_LWIP_MSKADDR3);
#endif
tcpip_init(RT_NULL, RT_NULL);
netif_set_addr(netif_default, &ipaddr, &netmask, &gw);
netif_set_up(netif_default);
#if LWIP_DHCP
/* use DHCP client */
dhcp_start(netif_default);
while (1) {
rt_thread_delay(DHCP_FINE_TIMER_MSECS);
dhcp_fine_tmr();
mscnt += DHCP_FINE_TIMER_MSECS;
if (mscnt >= DHCP_COARSE_TIMER_SECS*1000)
{
dhcp_coarse_tmr();
mscnt = 0;
}
}
#endif
#if defined(RT_USING_FINSH) && (LWIP_STATS_DISPLAY)
finsh_syscall_append("lwip_info", (syscall_func)stats_display);
#endif
}
上述代码是引导启动tcpip_thread主进程的关键代码,看代码的流程,如果打开了DHCH,后面的“finsh_syscall_append...”似乎就运转不成啦。这里,代码中支持DHCP的while循环是否应该放在某个进程的末尾,充当DHCP的维持呢?
举报