IP_MAX_MEMBERSHIPS

Stephen Clark Stephen.Clark at seclark.us
Thu Apr 13 13:02:34 UTC 2006


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 at 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)





More information about the freebsd-stable mailing list