summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_var.h
diff options
context:
space:
mode:
authorandre <andre@FreeBSD.org>2007-03-15 15:59:28 +0000
committerandre <andre@FreeBSD.org>2007-03-15 15:59:28 +0000
commitda1f4962209103a9c4b8de8081614312a2c05864 (patch)
tree958c5cc9f9700b70c7ad5f201a98774762724e25 /sys/netinet/tcp_var.h
parente384ffc370ce3185a1575f148f487dbaad04de2c (diff)
downloadFreeBSD-src-da1f4962209103a9c4b8de8081614312a2c05864.zip
FreeBSD-src-da1f4962209103a9c4b8de8081614312a2c05864.tar.gz
Consolidate insertion of TCP options into a segment from within tcp_output()
and syncache_respond() into its own generic function tcp_addoptions(). tcp_addoptions() is alignment agnostic and does optimal packing in all cases. In struct tcpopt rename to_requested_s_scale to just to_wscale. Add a comment with quote from RFC1323: "The Window field in a SYN (i.e., a <SYN> or <SYN,ACK>) segment itself is never scaled." Reviewed by: silby, mohans, julian Sponsored by: TCP/IP Optimization Fundraise 2005
Diffstat (limited to 'sys/netinet/tcp_var.h')
-rw-r--r--sys/netinet/tcp_var.h22
1 files changed, 14 insertions, 8 deletions
diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h
index 46d396d..6dc20d4 100644
--- a/sys/netinet/tcp_var.h
+++ b/sys/netinet/tcp_var.h
@@ -229,22 +229,27 @@ struct tcpcb {
* Structure to hold TCP options that are only used during segment
* processing (in tcp_input), but not held in the tcpcb.
* It's basically used to reduce the number of parameters
- * to tcp_dooptions.
+ * to tcp_dooptions and tcp_addoptions.
+ * The binary order of the to_flags is relevant for packing of the
+ * options in tcp_addoptions.
*/
struct tcpopt {
u_long to_flags; /* which options are present */
-#define TOF_TS 0x0001 /* timestamp */
-#define TOF_MSS 0x0010 /* maximum segment size */
-#define TOF_SCALE 0x0020 /* window scaling */
+#define TOF_MSS 0x0001 /* maximum segment size */
+#define TOF_SCALE 0x0002 /* window scaling */
+#define TOF_SACKPERM 0x0004 /* SACK permitted */
+#define TOF_TS 0x0010 /* timestamp */
#define TOF_SIGNATURE 0x0040 /* signature option present */
#define TOF_SIGLEN 0x0080 /* signature length valid (RFC2385) */
#define TOF_SACK 0x0100 /* Peer sent SACK option */
- u_int32_t to_tsval;
- u_int32_t to_tsecr;
- u_int16_t to_mss;
- u_int8_t to_requested_s_scale;
+#define TOF_MAXOPT 0x0200
+ u_int32_t to_tsval; /* our new timestamp */
+ u_int32_t to_tsecr; /* reflected timestamp */
+ u_int16_t to_mss; /* maximum segment size */
+ u_int8_t to_wscale; /* window scaling */
u_int8_t to_nsacks; /* number of SACK blocks */
u_char *to_sacks; /* pointer to the first SACK blocks */
+ u_char *to_signature; /* pointer to the MD5 signature */
};
/*
@@ -497,6 +502,7 @@ extern int ss_fltsz_local;
extern int tcp_do_sack; /* SACK enabled/disabled */
+int tcp_addoptions(struct tcpopt *, u_char *);
struct tcpcb *
tcp_close(struct tcpcb *);
void tcp_discardcb(struct tcpcb *);
OpenPOWER on IntegriCloud