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>