Mon 03 Jun 2013 12:29:36 PM UTC, original submission:
We got reports from users of our product that there were issues with IGMP membership reports that we are sending. The only group we join is "239.255.255.250" for UPnP broadcasts, but additional membership reports are generated for 224.0.0.1 (the all systems group). The problematic membership reports are the ones to 224.0.0.1. These membership reports are automatically generated by lwIP.
This is a problem because the router that our system is connected to has a bug with the handling of the membership report for 224.0.0.1 which effectively breaks the all systems group for the router.
According to the RFC2236 (IGMPv2) sending the membership report for the allsystems group is invalid.
>The all-systems group (address 224.0.0.1) is handled as a
>special case. The host starts in Idle Member state for that
>group on every interface, never transitions to another state,
>and never sends a report for that group.
The reason why the reports are sent is because in the igmp_report_groups function all groups are added. The grouplist also contains the allsystems group. So this causes the membership reports to be sent.
We are using lwIP 1.4.0, but I checked the code and there are no changes in that part of the code so it will also be in 1.4.1.
I made the following change to avoid the membership reports for the allsystems group (also in attached patch). In igmp.c / igmp_report_groups() replace:
if (group->netif == netif) {
by:
if ((group->netif == netif) && (!(ip_addr_cmp(&(group->group_address), &allsystems)))) {
I am not sure if this completely covers the statement from the RFC2236 that it never should transition to another state. But at least the membership reports for 224.0.0.1 are not sent anymore and it seems to have no negative impact.
|