-
Notifications
You must be signed in to change notification settings - Fork 8.3k
Description
Describe the bug
The current IGMP implementation does not correctly calculate the length of the IGMP payload. Since the length of the payload is used to detect the IGMP version. The version is also not correctly determined.
The length of the IGMP payload is calculated by subtracting the IP packet header length from to total IP packet length. Since the actual length of the header is the combination of the header length and the option length, the IGMP length is always 4 bytes too long. This results in IGMPv2 messages being parsed as IGMPv3, causing a drop of the packet.
Line 427 in 1ec5ce0
| int igmp_buf_len = pkt->buffer->len - net_pkt_ip_hdr_len(pkt); |
To Reproduce
Enable CONFIG_NET_IPV4_IGMPV3 and add the device to an IGMPv2 network.
Expected behavior
The device should respond to IGMPv2 queries.
Impact
All IGMPv2 messages are ignored. This results in the multicast only working for the IGMP querier-timeout. After that, the querier does forget the membership of the device.
Environment (please complete the following information):
- OS: on all OS
- All branches containing 1d0f47b