Expecting IGMPv3 packets to go out of the machine, but IGMPv2 packets are going out, What is the problem?
Possible Scenario: On Windows XP or Windows Server 2003 by default IGMPv3 is enabled. When you send a IGMP multicast packet after joining the multicast group using IP_ADD_SOURCE_MEMBERSHIP and setsockopt(), you see that IGMPv2 packet is going out of the machine, while you are expecting IGMPv3 to go out. What’s wrong?
Then you check the registry key below to see if you are actually on IGMPv3 or not—
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
IGMPVersion DWORD 4
Or as per the KB below in “Configure the registry” section.
You Cannot Configure Windows XP or Windows Server 2003 to Use IGMP Version 1 or Version 2 Support
If the value is 4 for IGMPVersion, then your machine is using IGMPv3, your code is correct because may be it is giving right result for some other customer or network. Now what is wrong?
The reason is, if any machine or router in the network is using lower version of IGMP than v3, then the complete network falls back to that version. So, your machine/interface will start using lower version of the IGMP. This is by design. This is clearly demonstrated in ietf website.
IGMP Mixed Version Proxying , see slides 11, 12 and 13.
But I want to send only IGMPv3, no matter if network falls back to lower version if other machine/device is using lower version, What to do?
No, there is no way to do that. This is by design and as per the RFC.
Other scenario, my machine is configured for IGMPv3, but I am getting the problem as above. Now, if I disable and then enable the interface, I see some IGMPv3 packets going out, but later I get IGMPv2 only, Why?
When interface get enables and machine is configured to use IGMPv3, it starts sending IGMPv3 packets, but as soon as an IGMPv2 query is received on the interface, it falls back to IGMPv2. Later, it’s all sending out IGMPv2 packets.
Nitin Dhawan
Windows SDK- Microsoft