本帖最后由 can123dao 于 2013-7-30 20:43 编辑
已经实现开发板同时或分别做client server,想加上dhcp,由路由自动给开发板分配IP.
#define LWIP_DHCP 1
#define LWIP_UDP 1
#define LWIP_ARP 1
#define DHCP_DOES_ARP_CHECK 1
在netconfig.c里我用了如下代码
void LwIP_Init( void )
{
struct ip_addr ipaddr;
struct ip_addr netmask;
struct ip_addr gw;
lwip_init();
#if LWIP_DHCP
ipaddr.addr = 0;
netmask.addr = 0;
gw.addr = 0;
#else
IP4_ADDR(&ipaddr, 192, 168, 0, 16);
IP4_ADDR(&netmask, 255, 255, 255, 0);
IP4_ADDR(&gw, 192, 168, 0, 1);
#endif
netif_add(&enc28j60, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
netif_set_default(&enc28j60);
netif_set_up(&enc28j60);
#if LWIP_DHCP
dhcp_start(&enc28j60);
#endif
}
这是网上两个版本的一个,也是STM32 LWIP DEMO里的方法。可是不成功,另一个版本也试了,不成功。抓包结果如下
始终收不ARP_Request:who -has 192.168.0.6 tell 192.168.0.1的ARP_Reply.
dhcp的过程是这样的如果是一个新的client, client 会先发一个dhcp discover, server 收到后会回一个 dhcp offer,这个offer 是broadcast,因为这时client 还没有ip, client 收到 这个offer 后会发一个dhcp request, 然后server 给一个 dhcp ack
这里,就只能看到server给的offer,client却不再给server request.所以不成功。那该如何解决呢。
在dhcp_start()里面有调用dhcp_recv的代码,可是在程序执行过程中,并没有去执行dhcp_recv。有人做过么,求指导。 |