5

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

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

我在 igmp_joingroup() 中找到了“netif->igmp_mac_filter != NULL”,但是这个回调被设置为 NULL 并且没有实现。我需要自己实现它来设置MAC过滤器还是可以将其保留为NULL?

非常感谢你的帮助!

瑞安

4

4 回答 4

3

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

于 2014-04-24T22:53:47.700 回答
2

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

于 2014-05-11T21:44:09.800 回答
2

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

于 2017-12-15T10:41:53.893 回答
1

我将组播帧过滤器的代码设置如下:

/* USER CODE BEGIN PHY_PRE_CONFIG */
  ETH_MACFilterConfigTypeDef FilterConfig;

  FilterConfig.PromiscuousMode = 1;
  FilterConfig.PassAllMulticast = 1;

  HAL_ETH_SetMACFilterConfig(&heth, &FilterConfig);

/* USER CODE END PHY_PRE_CONFIG */
于 2021-10-22T03:02:47.713 回答