问题描述
我知道有人问过这个问题的几个版本,但似乎都没有。
我正在Atmel SAM E54 Xplained Pro板上使用LWIP v 1.4.0。 我也在使用NETCONN API。
我当前的目标是从多播组接收UDP数据包。我已成功将IGMPv2成员资格报告组数据包发送到多播地址。 Wireshark Capture。但是,我无法接收任何多播帧。我最后可能是什么问题,所以我正在寻找一些见识。 lwip不支持IGMPv3,路由器阻止数据包或代码中缺少的内容可能是问题吗?
据我所知,STM32上的许多人都需要在其驱动程序中取消过滤IGMP帧,据我所知,这是通过E54的lwip_macif_config.h完成的。
当前出于调试目的,我正在使用python脚本将数据包发送到多播地址。目前,我不需要发布它,但如果有帮助,我可以得到它。
任何帮助将不胜感激。
我已通过以下方式在lwip_macif_config.h中启用了IGMP:
#ifndef CONF_TCPIP_STACK_INTERFACE_0_IGMP
#define CONF_TCPIP_STACK_INTERFACE_0_IGMP 1
#endif
以及在lwipopts.h中带有:
#ifndef LWIP_IGMP
#define LWIP_IGMP 1
#endif
#define LWIP_RAND() ((u32_t)rand())
我通过以下方式定义任务:
#define TASK_RECV_STACK_SIZE (256 / sizeof(portSTACK_TYPE))
#define TASK_RECV_STACK_PRIORITY (tskIDLE_PRIORITY + 4)
static TaskHandle_t xCreatedRecvTask;
我的接收任务代码如下:
static void task_Recv(void *p){
struct netconn *Rconn;
struct netbuf *Rbuf;
struct ip_addr addr;
struct ip_addr local_addr;
IP4_ADDR(&local_addr,10,120);
IP4_ADDR(&addr,224,200);
Rconn = netconn_new(NETCONN_UDP);
netconn_bind(Rconn,IP_ADDR_ANY,5005);
if(netconn_join_leave_group(Rconn,&addr,NETCONN_JOIN) == ERR_OK){
printf("Group Joined\r\n");
}
for(;;){
if(netconn_recv(Rconn,&Rbuf)==ERR_OK){
printf("message received\r\n");
netbuf_delete(Rbuf);
}
}
}
我用
创建它static void task_Recv_create(void){
if(xTaskCreate(task_Recv,"Recv Data",TASK_RECV_STACK_SIZE,NULL,TASK_RECV_STACK_PRIORITY,&xCreatedRecvTask)!=pdPASS){
while(1){
;
}
}
}
netconn_join_leave_group()返回ERR_OK,但从不触发netconn_recv。
如果有更多我可以做的事情,我尝试提供尽可能多的信息。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)