Allocating AF constants for vendors.

Alfred Perlstein alfred at freebsd.org
Mon Sep 3 13:14:25 PDT 2007


* Bruce M. Simpson <bms at FreeBSD.org> [070903 07:44] wrote:
> Alfred Perlstein wrote:
> >Ok, I'm not really sure what to do here.  At Juniper we have approx
> >20 additional entries for AF_ constants.  We also have theoretical
> >but not practical "problems" with spareness and utility of this
> >list, meaning we have plenty of arrays in our version of ifnets and
> >route entries that are also "bloated" as well.
> >  
> 
> Can you merge them into the list in such a way that AF_MAX does not need 
> to slide forward?
> Or do they need to be referenced from within the kernel tree itself?

They are refenced inside the kernel.

> Prevention of code bloat is better than the cure.  Not having the code 
> in front of me I couldn't say for sure if we're talking about a dozen 
> bytes or several pages potentially being wasted, so it is impossible to 
> judge.

Well, for the most part it's going to be something like 32*sizeof(void*)
so 128 or 256 bytes depending on arch.

> One of my concerns is that we have ifnet.if_afdata, we're not really 
> using it, it makes sense to use it for some things.

I'll have ot look into this.

> Help from big companies as well as little folks is always appreciated, 
> providing we can reach consensus.

YES! :)

> >Otherwise one other policy would be to specify an allocation
> >policy such that new AF_ constants are allocated only for even
> >numbers where odd numbers are left to vendors.
> >
> >This would slow the "bloat" and still provide vendors with something
> >useful.
> >
> >How does that sound?
> >  
> 
> EPARSE? I don't follow this at all.

Ok, let's say we garantee that going forward, all odd AF_ constants 
are verdor reserved....

So whenever FreeBSD allocates an AF constant, it should be even,
vendors can use odd.

That means that, from socket.h:

#define AF_ARP          35
#define AF_BLUETOOTH    36              /* Bluetooth sockets */
#define AF_IEEE80211    37              /* IEEE 802.11 protocol */
#define AF_MAX          38

Now let's say FreeBSD wants to add a AF constant, the next one to allocate
would be 38, so we have:

#define AF_ARP          35
#define AF_BLUETOOTH    36              /* Bluetooth sockets */
#define AF_IEEE80211    37              /* IEEE 802.11 protocol */
#define AF_NEWPROTO1	38		/* some awesome new protocol! */
#define AF_MAX          39

Ok, well that doesn't explain it much, however, shortly thereafter we
allocate another AF constant in FreeBSD, the list now looks like:

#define AF_ARP          35
#define AF_BLUETOOTH    36              /* Bluetooth sockets */
#define AF_IEEE80211    37              /* IEEE 802.11 protocol */
#define AF_NEWPROTO1	38		/* some awesome new protocol! */
#define AF_VENDOR0	39		/* reserved for vendors. */
#define AF_NEWPROTO2	40		/* some awesome new protocol! */
#define AF_MAX          41

Soon another protocol is added:

#define AF_ARP          35
#define AF_BLUETOOTH    36              /* Bluetooth sockets */
#define AF_IEEE80211    37              /* IEEE 802.11 protocol */
#define AF_NEWPROTO1	38		/* some awesome new protocol! */
#define AF_VENDOR0	39		/* reserved for vendors. */
#define AF_NEWPROTO2	40		/* some awesome new protocol! */
#define AF_VENDOR1	41		/* reserved for vendors. */
#define AF_NEWPROTO3	42		/* some awesome new protocol! */
#define AF_MAX          43

As you can see we are defering the "bloat".

Does that make sense?

-- 
- Alfred Perlstein


More information about the freebsd-net mailing list