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).

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
 
 
 /*

-- 
John Baldwin
_______________________________________________
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