(By Sklower) checkpoint the current state of Cherenson's work.
[unix-history] / usr / src / sys / netinet / tcp_var.h
index b06a058..2227718 100644 (file)
@@ -4,7 +4,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)tcp_var.h   7.10 (Berkeley) %G%
+ *     @(#)tcp_var.h   7.11 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -74,12 +74,18 @@ struct tcpcb {
        short   t_dupacks;              /* consecutive dup acks recd */
        u_short t_maxseg;               /* maximum segment size */
        char    t_force;                /* 1 if forcing out a byte */
        short   t_dupacks;              /* consecutive dup acks recd */
        u_short t_maxseg;               /* maximum segment size */
        char    t_force;                /* 1 if forcing out a byte */
-       u_char  t_flags;
-#define        TF_ACKNOW       0x01            /* ack peer immediately */
-#define        TF_DELACK       0x02            /* ack, but try to delay it */
-#define        TF_NODELAY      0x04            /* don't delay packets to coalesce */
-#define        TF_NOOPT        0x08            /* don't use tcp options */
-#define        TF_SENTFIN      0x10            /* have sent FIN */
+       u_short t_flags;
+#define        TF_ACKNOW       0x0001          /* ack peer immediately */
+#define        TF_DELACK       0x0002          /* ack, but try to delay it */
+#define        TF_NODELAY      0x0004          /* don't delay packets to coalesce */
+#define        TF_NOOPT        0x0008          /* don't use tcp options */
+#define        TF_SENTFIN      0x0010          /* have sent FIN */
+#define        TF_REQ_SCALE    0x0020          /* have/will request window scaling */
+#define        TF_RCVD_SCALE   0x0040          /* other side has requested scaling */
+#define        TF_REQ_TSTMP    0x0080          /* have/will request timestamps */
+#define        TF_RCVD_TSTMP   0x0100          /* a timestamp was received in SYN */
+#define        TF_SACK_PERMIT  0x0200          /* other side said I could SACK */
+
        struct  tcpiphdr *t_template;   /* skeletal packet for transmit */
        struct  inpcb *t_inpcb;         /* back pointer to internet pcb */
 /*
        struct  tcpiphdr *t_template;   /* skeletal packet for transmit */
        struct  inpcb *t_inpcb;         /* back pointer to internet pcb */
 /*
@@ -93,9 +99,9 @@ struct tcpcb {
        tcp_seq snd_wl1;                /* window update seg seq number */
        tcp_seq snd_wl2;                /* window update seg ack number */
        tcp_seq iss;                    /* initial send sequence number */
        tcp_seq snd_wl1;                /* window update seg seq number */
        tcp_seq snd_wl2;                /* window update seg ack number */
        tcp_seq iss;                    /* initial send sequence number */
-       u_short snd_wnd;                /* send window */
+       u_long  snd_wnd;                /* send window */
 /* receive sequence variables */
 /* receive sequence variables */
-       u_short rcv_wnd;                /* receive window */
+       u_long  rcv_wnd;                /* receive window */
        tcp_seq rcv_nxt;                /* receive next */
        tcp_seq rcv_up;                 /* receive urgent pointer */
        tcp_seq irs;                    /* initial receive sequence number */
        tcp_seq rcv_nxt;                /* receive next */
        tcp_seq rcv_up;                 /* receive urgent pointer */
        tcp_seq irs;                    /* initial receive sequence number */
@@ -109,8 +115,8 @@ struct tcpcb {
                                         * used to recognize retransmits
                                         */
 /* congestion control (for slow start, source quench, retransmit after loss) */
                                         * used to recognize retransmits
                                         */
 /* congestion control (for slow start, source quench, retransmit after loss) */
-       u_short snd_cwnd;               /* congestion-controlled window */
-       u_short snd_ssthresh;           /* snd_cwnd size threshhold for
+       u_long  snd_cwnd;               /* congestion-controlled window */
+       u_long  snd_ssthresh;           /* snd_cwnd size threshhold for
                                         * for slow start exponential to
                                         * linear switch
                                         */
                                         * for slow start exponential to
                                         * linear switch
                                         */
@@ -124,7 +130,7 @@ struct tcpcb {
        short   t_srtt;                 /* smoothed round-trip time */
        short   t_rttvar;               /* variance in round-trip time */
        u_short t_rttmin;               /* minimum rtt allowed */
        short   t_srtt;                 /* smoothed round-trip time */
        short   t_rttvar;               /* variance in round-trip time */
        u_short t_rttmin;               /* minimum rtt allowed */
-       u_short max_sndwnd;             /* largest window peer has offered */
+       u_long  max_sndwnd;             /* largest window peer has offered */
 
 /* out-of-band data */
        char    t_oobflags;             /* have some */
 
 /* out-of-band data */
        char    t_oobflags;             /* have some */
@@ -132,6 +138,15 @@ struct tcpcb {
 #define        TCPOOB_HAVEDATA 0x01
 #define        TCPOOB_HADDATA  0x02
        short   t_softerror;            /* possible error not yet reported */
 #define        TCPOOB_HAVEDATA 0x01
 #define        TCPOOB_HADDATA  0x02
        short   t_softerror;            /* possible error not yet reported */
+
+/* RFC 1323 variables */
+       u_char  snd_scale;              /* window scaling for send window */
+       u_char  rcv_scale;              /* window scaling for recv window */
+       u_char  request_r_scale;        /* pending window scaling */
+       u_char  requested_s_scale;
+       u_long  ts_recent;              /* timestamp echo data */
+       u_long  ts_recent_age;          /* when last updated */
+       tcp_seq last_ack_sent;
 };
 
 #define        intotcpcb(ip)   ((struct tcpcb *)(ip)->inp_ppcb)
 };
 
 #define        intotcpcb(ip)   ((struct tcpcb *)(ip)->inp_ppcb)
@@ -248,11 +263,13 @@ struct    tcpstat {
        u_long  tcps_rcvackpack;        /* rcvd ack packets */
        u_long  tcps_rcvackbyte;        /* bytes acked by rcvd acks */
        u_long  tcps_rcvwinupd;         /* rcvd window update packets */
        u_long  tcps_rcvackpack;        /* rcvd ack packets */
        u_long  tcps_rcvackbyte;        /* bytes acked by rcvd acks */
        u_long  tcps_rcvwinupd;         /* rcvd window update packets */
+       u_long  tcps_pawsdrop;          /* segments dropped due to PAWS */
 };
 
 #ifdef KERNEL
 struct inpcb tcb;              /* head of queue of active tcpcb's */
 struct tcpstat tcpstat;        /* tcp statistics */
 };
 
 #ifdef KERNEL
 struct inpcb tcb;              /* head of queue of active tcpcb's */
 struct tcpstat tcpstat;        /* tcp statistics */
+u_long tcp_now;                /* for RFC 1323 timestamps */
 struct tcpiphdr *tcp_template();
 struct tcpcb *tcp_close(), *tcp_drop();
 struct tcpcb *tcp_timers(), *tcp_disconnect(), *tcp_usrclosed();
 struct tcpiphdr *tcp_template();
 struct tcpcb *tcp_close(), *tcp_drop();
 struct tcpcb *tcp_timers(), *tcp_disconnect(), *tcp_usrclosed();