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"?

> The socket options in <sys/socket.h> do use bitmasks for the low bits because 
> they map directly to bits so_options, but then they start a simple 
> enumeration 
> at 0x1000.  TCP and UDP socket options do not directly map to bits in a flags 
> field in the PCB (e.g. TF_NODELAY != TCP_NODELAY).  I would like to change 
> the 
> representation of the constants to be decimal instead of hex and encourage 
> new 
> options to fill in the gaps between the existing values.  This would preserve 
> the existing ABI but keep things more sane in the future (I believe).  The 
> diff is this:
> 
> Index: netinet/tcp.h
> ===================================================================
> --- netinet/tcp.h     (revision 245225)
> +++ netinet/tcp.h     (working copy)
> @@ -151,18 +151,18 @@
>  /*
>   * User-settable options (used with setsockopt).
>   */
> -#define      TCP_NODELAY     0x01    /* don't delay send to coalesce packets 
> */
> +#define      TCP_NODELAY     1       /* don't delay send to coalesce packets 
> */
>  #if __BSD_VISIBLE
> -#define      TCP_MAXSEG      0x02    /* set maximum segment size */
> -#define TCP_NOPUSH   0x04    /* don't push last block of write */
> -#define TCP_NOOPT    0x08    /* don't use TCP options */
> -#define TCP_MD5SIG   0x10    /* use MD5 digests (RFC2385) */
> -#define      TCP_INFO        0x20    /* retrieve tcp_info structure */
> -#define      TCP_CONGESTION  0x40    /* get/set congestion control algorithm 
> */
> -#define      TCP_KEEPINIT    0x80    /* N, time to establish connection */
> -#define      TCP_KEEPIDLE    0x100   /* L,N,X start keeplives after this 
> period */
> -#define      TCP_KEEPINTVL   0x200   /* L,N interval between keepalives */
> -#define      TCP_KEEPCNT     0x400   /* L,N number of keepalives before 
> close */
> +#define      TCP_MAXSEG      2       /* set maximum segment size */
> +#define TCP_NOPUSH   4       /* don't push last block of write */
> +#define TCP_NOOPT    8       /* don't use TCP options */
> +#define TCP_MD5SIG   16      /* use MD5 digests (RFC2385) */
> +#define      TCP_INFO        32      /* retrieve tcp_info structure */
> +#define      TCP_CONGESTION  64      /* get/set congestion control algorithm 
> */
> +#define      TCP_KEEPINIT    128     /* N, time to establish connection */
> +#define      TCP_KEEPIDLE    256     /* L,N,X start keeplives after this 
> period */
> +#define      TCP_KEEPINTVL   512     /* L,N interval between keepalives */
> +#define      TCP_KEEPCNT     1024    /* L,N number of keepalives before 
> close */
>  
>  #define      TCP_CA_NAME_MAX 16      /* max congestion control name length */
>  
> Index: netinet/udp.h
> ===================================================================
> --- netinet/udp.h     (revision 245225)
> +++ netinet/udp.h     (working copy)
> @@ -48,7 +48,7 @@
>  /* 
>   * User-settable options (used with setsockopt).
>   */
> -#define      UDP_ENCAP                       0x01
> +#define      UDP_ENCAP                       1
>  
>  
>  /*
> 

Thumbs up from me, modulo a potential tweak to define the boundary for
FreeBSD/private use.

Cheers,
Lawrence
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to