加入igmp_group不在lightwight IP(lwip)中工作

时间:2014-04-24 04:04:59

标签: multicast lwip igmp

我是lwip的新手,我想用lwip创建一个多播接收器。我的步骤如下: 1.启用LWIP_IGMP; 2.在low_level_init()中设置NETIF_FLAG_IGMP; 3.加入组播组,创建并绑定pcb; 4. udp_connect到remote_ip(或多播IP地址?两者都尝试但失败了)

加入组返回成功,程序执行时一切正常。然而,多播接收器不起作用,没有多播数据进入网络接口。似乎我实际上并没有将我的接收器加入igmp组,尽管加入过程看起来很好。有没有人知道我错过了什么?

我发现" netif-> igmp_mac_filter!= NULL"在igmp_joingroup()中,但此回调设置为NULL并且未实现。我是否需要自己实现它来设置MAC过滤器,或者只是将其保留为NULL?

非常感谢你的帮助!

赖安

3 个答案:

答案 0 :(得分:3)

当您加入多播组时,通常会调用netif-> igmp_mac_filter回调来配置以太网控制器中的MAC过滤器,以接受具有与该组对应的组播MAC地址的数据包。因此,根据您使用的以太网H / W,您可能需要实现回调。

答案 1 :(得分:1)

硬件需要配置为接收多播MAC帧,否则它将简单地丢弃具有多播目标地址的所有帧。可能有一个接受所有传入多播帧的选项。在low_level_init()中启用它,您应该能够看到传入的多播帧。您不需要实现任何过滤器。

答案 2 :(得分:1)

我遇到了同样的问题。我解决了在MAC接口的init中删除ETH多播帧过滤器的问题。 要进行测试,您还可以将接口设置为混杂模式,检查是否收到组播数据包,然后删除混杂模式,并根据需要设置合适的组播帧过滤模式。