IGMP version with IGMP-proxy

Hello,

I’m trying to run IGMP-proxy in my setup, to pass IPTV video streams from my provider through my RB750G. All works fine when the PC behind RB750 joins groups already in the MFC. However, if I try to join a group that is not yet in the MFC, it does not get added. Looks like the provider ignores joins sent by the Mikrotik.
I performed some research and found our that Mikrotik sends out IGMP join v3 via the upstream interface, while my provider probably only accepts v2.
Is there a way the change IGMP version, used by Mikrotik? I know I can run PIM and do it there, but I’d rather not…

Thanks!

P.S. BTW, WIKI suggests IGMP-Proxy in 4.5 uses IGMPv2; this is either a mistake in the wiki, or a bug in the code…

Actually it’s not so simple. IGMP proxy is a userspace program; itself it can process only IGMPv2 messages. But multicast join messages are sent by Linux kernel - the userspace only tells what multicast group to join. By default for recent Linux kernels the version is IGMPv3. The kernel sends out IGMPv1 or IGMPv2 messages instead only if either:

  1. it has seen some IGMPv1 or v2 traffic on that network interface before;
  2. or ‘force_igmp_version’ sysctl has been set, e.g.
# echo 2>/proc/sys/net/ipv4/conf/all/force_igmp_version

Usually the part (1) works, because the upstream usually periodically sends out IGMP report messages with the IGMP version it supports. Write to MT support if you feel this is something that needs to be improved.

Actually it’s not so simple. IGMP proxy is a userspace program; itself it can process only IGMPv2 messages. But multicast join messages are sent by Linux kernel - the userspace only tells what multicast group to join. By default for recent Linux kernels the version is IGMPv3. The kernel sends out IGMPv1 or IGMPv2 messages instead only if either:

  1. it has seen some IGMPv1 or v2 traffic on that network interface before;
  2. or ‘force_igmp_version’ sysctl has been set, e.g.

Code:

echo 2>/proc/sys/net/ipv4/conf/all/force_igmp_version

Usually the part (1) works, because the upstream usually periodically sends out IGMP report messages with the IGMP version it supports. Write to MT support if you feel this is something that needs to be improved.
Actually it’s not so simple. IGMP proxy is a userspace program; itself it can process only IGMPv2 messages. But multicast join messages are sent by Linux kernel - the userspace only tells what multicast group to join. By default for recent Linux kernels the version is IGMPv3. The kernel sends out IGMPv1 or IGMPv2 messages instead only if either:

  1. it has seen some IGMPv1 or v2 traffic on that network interface before;
  2. or ‘force_igmp_version’ sysctl has been set, e.g.

echo 2>/proc/sys/net/ipv4/conf/all/force_igmp_version

>
> Usually the part (1) works, because the upstream usually periodically sends out IGMP report messages with the IGMP version it supports. Write to MT support if you feel this is something that needs to be improved.

Thanks, this explains it. In my case, 1) obviously does not work, since there is a bunch of v2 flying around and router still uses v3.
I contacted support; they will look into it. In the meantime, how do I apply 2) to RB750G device?