Re: 5.3-RELEASE TODO

From: Robert Watson <rwatson_at_FreeBSD.org>
Date: Sat, 18 Sep 2004 13:42:24 -0400 (EDT)
On Sat, 18 Sep 2004, Brooks Davis wrote:

> > Have you tried seeing just how many addresses you can add before
> > getifaddrs() fails to return the complete list?  128k seems like a lot,
> > but I instrumente ifconf() locally a couple of weeks ago when I first
> > became aware of this problem, and discovered that even on my notebook
> > (which has a wireless card with one IP, and an unused ethernet card) that
> > I see moderately large buffers being read from user space:
> > 
> > ifconf: 16384 space
> 
> Those allocations don't seem to make any sense.  The actual space
> required is quite small.  All you do is copy one struct ifreq out for
> each address, plus one for each interface with no addresses.  The base
> size of a struct ifreq is 32 bytes and it extends to 34 for IPv6
> addresses.  The maximum size allowed by the data types is 273 (for a 255
> byte address).  Since I think IPv6 are the largest addresses used in
> practice, MAXPHYS is probably not too bad, though it does put a new cap
> on the number of interfaces at ~4k. 
> 
> If we want to keep kernel allocations small and allow all the itnerfaces
> to be reliably reported, we probably need to go back to my origional
> plan where we loop repeatidly.  I might do it differently by allocating
> up to MAXPHYS and only reallocating if we overflow.  That would avoid
> doing it twice (or more) on normal machines while still being correct. 

I'm not too worried about theory, mostly about practice.  I.e., if you add
a few thousand IP addresses to a tap device, does all go happily?

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert_at_fledge.watson.org      Principal Research Scientist, McAfee Research
Received on Sat Sep 18 2004 - 15:43:01 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:12 UTC