Date: Thu, 13 Apr 2006 09:02:32 -0400 From: Stephen Clark <Stephen.Clark@seclark.us> To: Bruce M Simpson <bms@spc.org> Cc: freebsd-stable@freebsd.org Subject: Re: IP_MAX_MEMBERSHIPS Message-ID: <443E4BE8.5080806@seclark.us> In-Reply-To: <20060413063214.GA94628@spc.org> References: <443DB8A5.1020006@seclark.us> <20060413063214.GA94628@spc.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Bruce M Simpson wrote:
>On Wed, Apr 12, 2006 at 10:34:13PM -0400, Stephen Clark wrote:
>
>
>>Can anyone tell me why the maximum number of members in a multicast
>>group is set at
>>20?
>>Are there issues with increasing this number?
>>
>>
>
>Why would one wish to join more than 20 groups on a single socket?
>
>I realize making such a statement leaves me wide open to the charge of
>640KB being enough for anyone, but...
>
>This limit in no way affects multicast routing, btw. Based on my reading
>of the code...
>
>This is a per-socket limit. The structures to support per-socket multicast
>group membership are simple linked lists or statically allocated arrays.
>The reason for this is so as not to break the ABI for struct ip_moptions
>which has been present since 4.4BSD.
>
>Changing this structure to not use the static allocation would probably
>break your kernel for modules compiled without such a change. Also there
>are IGMP timers involved.
>
>The other poster who replied is probably talking about a per-interface-card
>limit to do with the multicast hash filter on most Ethernet cards - this
>is a hard limit, and the driver/hardware has to either support multicast
>promiscuous mode (IFF_ALLMULTI) or be able to support full promiscuous mode
>(which may not work correctly with IP forwarding in my experience).
>
>Patches to refactor kernel multicast system gladly accepted!
>
>Regards,
>BMS
>
>P.S. Someone was meant to be porting IGMPv3/SSM but there were licensing
>issues with Apple.
>
>
>
Well I was trying to set up an ospf system with more than 20 neighbors
and could only get 20 neighors to show up in quagga, so I posed the
question to the quagga mailing list and got
the following responses:
1)
Hi Steve,
I think you might be hitting the IGMP limit. The 244.0.0.5/6
multicast address is joined using IGMP and there is a kernel variable
that needs to get bumped up higher to peer with more than 20
neighbors. I'm fuzzy on this 'cuz I haven't seen anyone post this
particular problem in a while.
cat /proc/sys/net/ipv4/igmp_max_memberships
20
Bump it up to whatever number is higher than your max. neighbor count.
-Kris
Kris Olander
kriso@packetdesign.com
2)
Hmm... ok on a 4.8 Freebsd system I see the following in the kernel
build area:
/usr/src/sys# grep -i membership */* | grep -i max
netinet/icmp6.h:#define icmp6_maxdelay icmp6_data16[0] /*
mcast group membership */
netinet/in.h:#define IP_MAX_MEMBERSHIPS 20 /* per socket */
netinet/ip_output.c: if (i == IP_MAX_MEMBERSHIPS) {
netinet/ip_var.h: struct in_multi *imo_membership
[IP_MAX_MEMBERSHIPS];
I wonder if IP_MAX_MEMBERSHIP is the right parameter that needs
bumping up. I suppose you could give it a try and see if changing
this value (and then building a new kernel) increases the IGMP
membership too. I don't see why it would cause any harm. Anyone
with more FreeBSD kernel experience want to chime in?
-KO (Kris Olander)
When I bumped the limit and recompiled my kernel I saw all my neighbors
listed when
I queried ospfd.
So my assumption was that this limit was affecting how many neighbors I
could have.
Steve
--
"They that give up essential liberty to obtain temporary safety,
deserve neither liberty nor safety." (Ben Franklin)
"The course of history shows that as a government grows, liberty
decreases." (Thomas Jefferson)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?443E4BE8.5080806>
