[PATCH] Don't imply TCP and UDP socket options are bitmasks
Lawrence Stewart
lstewart at freebsd.org
Thu Jan 24 13:02:42 UTC 2013
On 01/23/13 07:28, John Baldwin wrote:
> On Tuesday, January 22, 2013 3:57:23 am Lawrence Stewart wrote:
>> On 01/16/13 06:16, John Baldwin wrote:
>>> On Tuesday, January 15, 2013 3:49:33 am Lawrence Stewart wrote:
>>>> On 01/15/13 07:50, John Baldwin wrote:
>>>>> The constants used for TCP and UDP socket options (TCP_NODELAY, etc.) are
>>>>> currently defined as hex values that are individual bits. However, socket
>>>>> options are never masked together, they are used as a simple enumeration of
>>>>> discrete values. Using a bitmask forces us to run out of bits and makes it
>>>>> harder for vendors to try to use a high range of values for local custom
>>>>> options (hoping that they never conflict with a new option value added in
>>>>> stock FreeBSD).
>>>>
>>>> Yup. Should we be explicitly #defining the boundary between "bits
>>>> reserved for FreeBSD" and "bits for private vendor use"?
>>>
>>> Oh, we could if you wanted. I'm using 0x1000 locally for both TCP and UDP,
>>> but those are completely arbitrary values. Saner ones might be 0x8000000 if
>>> we want to do that explicitly. We could perhaps just say that is true for all
>>> socket option levels (that is, just define one SO_VENDOR constant or some such
>>> but say it applies to all levels)?
>>
>> A single SO_VENDOR applied to all levels sounds good to me.
>
> Ok, how about this for wording:
>
> Index: sys/socket.h
> ===================================================================
> --- socket.h (revision 245742)
> +++ socket.h (working copy)
> @@ -143,6 +143,15 @@ typedef __uid_t uid_t;
> #endif
>
> /*
> + * Space reserved for new socket options added by third-party vendors.
> + * This range applies to all socket option levels. New socket options
> + * in FreeBSD should always use an option value less than SO_VENDOR.
> + */
> +#if __BSD_VISIBLE
> +#define SO_VENDOR 0x80000000
> +#endif
> +
> +/*
> * Structure used for manipulating linger option.
> */
> struct linger {
Two thumbs up from me.
We might also want to
#define TCP_VENDOR SO_VENDOR /* FreeBSD TCP socket options must be
numerically less than this. */
and so on in each file that defines option levels to provide some hint
to people that SO_VENDOR exists? Maybe we don't need the define and just
need to put the one line comment at the end of each set of options in
each file where a particular level's options are specified.
Cheers,
Lawrence
More information about the freebsd-net
mailing list