微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LWIP未收到IGMP消息

如何解决LWIP未收到IGMP消息

我知道有人问过这个问题的几个版本,但似乎都没有。

我正在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

我在cc.h中用以下方法定义了lWIP_RAND()函数

#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 举报,一经查实,本站将立刻删除。