BSD 4_4_Lite2 release
[unix-history] / usr / src / sys / netinet / tcp_subr.c
index 4cd4ca4..9803ec9 100644 (file)
@@ -1,10 +1,36 @@
 /*
 /*
- * Copyright (c) 1982, 1986, 1988, 1990 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1982, 1986, 1988, 1990, 1993, 1995
+ *     The Regents of the University of California.  All rights reserved.
  *
  *
- * %sccs.include.redist.c%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
  *
  *
- *     @(#)tcp_subr.c  7.25 (Berkeley) %G%
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)tcp_subr.c  8.2 (Berkeley) 5/24/95
  */
 
 #include <sys/param.h>
  */
 
 #include <sys/param.h>
@@ -34,7 +60,6 @@
 #include <netinet/tcpip.h>
 
 /* patchable/settable parameters for tcp */
 #include <netinet/tcpip.h>
 
 /* patchable/settable parameters for tcp */
-int    tcp_ttl = TCP_TTL;
 int    tcp_mssdflt = TCP_MSS;
 int    tcp_rttdflt = TCPTV_SRTTDFLT / PR_SLOWHZ;
 int    tcp_do_rfc1323 = 1;
 int    tcp_mssdflt = TCP_MSS;
 int    tcp_rttdflt = TCPTV_SRTTDFLT / PR_SLOWHZ;
 int    tcp_do_rfc1323 = 1;
@@ -44,10 +69,11 @@ extern      struct inpcb *tcp_last_inpcb;
 /*
  * Tcp initialization
  */
 /*
  * Tcp initialization
  */
+void
 tcp_init()
 {
 
 tcp_init()
 {
 
-       tcp_iss = 1;            /* wrong */
+       tcp_iss = random();     /* wrong, but better than a constant */
        tcb.inp_next = tcb.inp_prev = &tcb;
        if (max_protohdr < sizeof(struct tcpiphdr))
                max_protohdr = sizeof(struct tcpiphdr);
        tcb.inp_next = tcb.inp_prev = &tcb;
        if (max_protohdr < sizeof(struct tcpiphdr))
                max_protohdr = sizeof(struct tcpiphdr);
@@ -108,6 +134,7 @@ tcp_template(tp)
  * In any case the ack and sequence number of the transmitted
  * segment are as specified by the parameters.
  */
  * In any case the ack and sequence number of the transmitted
  * segment are as specified by the parameters.
  */
+void
 tcp_respond(tp, ti, m, ack, seq, flags)
        struct tcpcb *tp;
        register struct tcpiphdr *ti;
 tcp_respond(tp, ti, m, ack, seq, flags)
        struct tcpcb *tp;
        register struct tcpiphdr *ti;
@@ -167,8 +194,8 @@ tcp_respond(tp, ti, m, ack, seq, flags)
        ti->ti_sum = 0;
        ti->ti_sum = in_cksum(m, tlen);
        ((struct ip *)ti)->ip_len = tlen;
        ti->ti_sum = 0;
        ti->ti_sum = in_cksum(m, tlen);
        ((struct ip *)ti)->ip_len = tlen;
-       ((struct ip *)ti)->ip_ttl = tcp_ttl;
-       (void) ip_output(m, (struct mbuf *)0, ro, 0);
+       ((struct ip *)ti)->ip_ttl = ip_defttl;
+       (void) ip_output(m, NULL, ro, 0, NULL);
 }
 
 /*
 }
 
 /*
@@ -204,7 +231,7 @@ tcp_newtcpcb(inp)
            TCPTV_MIN, TCPTV_REXMTMAX);
        tp->snd_cwnd = TCP_MAXWIN << TCP_MAX_WINSHIFT;
        tp->snd_ssthresh = TCP_MAXWIN << TCP_MAX_WINSHIFT;
            TCPTV_MIN, TCPTV_REXMTMAX);
        tp->snd_cwnd = TCP_MAXWIN << TCP_MAX_WINSHIFT;
        tp->snd_ssthresh = TCP_MAXWIN << TCP_MAX_WINSHIFT;
-       inp->inp_ip.ip_ttl = tcp_ttl;
+       inp->inp_ip.ip_ttl = ip_defttl;
        inp->inp_ppcb = (caddr_t)tp;
        return (tp);
 }
        inp->inp_ppcb = (caddr_t)tp;
        return (tp);
 }
@@ -316,7 +343,7 @@ tcp_close(tp)
                                rt->rt_rmx.rmx_ssthresh = i;
                }
        }
                                rt->rt_rmx.rmx_ssthresh = i;
                }
        }
-#endif RTV_RTT
+#endif /* RTV_RTT */
        /* free the reassembly queue, if any */
        t = tp->seg_next;
        while (t != (struct tcpiphdr *)tp) {
        /* free the reassembly queue, if any */
        t = tp->seg_next;
        while (t != (struct tcpiphdr *)tp) {
@@ -338,6 +365,7 @@ tcp_close(tp)
        return ((struct tcpcb *)0);
 }
 
        return ((struct tcpcb *)0);
 }
 
+void
 tcp_drain()
 {
 
 tcp_drain()
 {
 
@@ -348,6 +376,7 @@ tcp_drain()
  * store error as soft error, but wake up user
  * (for now, won't do anything until can select for soft error).
  */
  * store error as soft error, but wake up user
  * (for now, won't do anything until can select for soft error).
  */
+void
 tcp_notify(inp, error)
        struct inpcb *inp;
        int error;
 tcp_notify(inp, error)
        struct inpcb *inp;
        int error;
@@ -376,6 +405,7 @@ tcp_notify(inp, error)
        sowwakeup(so);
 }
 
        sowwakeup(so);
 }
 
+void
 tcp_ctlinput(cmd, sa, ip)
        int cmd;
        struct sockaddr *sa;
 tcp_ctlinput(cmd, sa, ip)
        int cmd;
        struct sockaddr *sa;
@@ -384,7 +414,7 @@ tcp_ctlinput(cmd, sa, ip)
        register struct tcphdr *th;
        extern struct in_addr zeroin_addr;
        extern u_char inetctlerrmap[];
        register struct tcphdr *th;
        extern struct in_addr zeroin_addr;
        extern u_char inetctlerrmap[];
-       int (*notify)() = tcp_notify, tcp_quench();
+       void (*notify) __P((struct inpcb *, int)) = tcp_notify;
 
        if (cmd == PRC_QUENCH)
                notify = tcp_quench;
 
        if (cmd == PRC_QUENCH)
                notify = tcp_quench;
@@ -399,21 +429,14 @@ tcp_ctlinput(cmd, sa, ip)
                in_pcbnotify(&tcb, sa, 0, zeroin_addr, 0, cmd, notify);
 }
 
                in_pcbnotify(&tcb, sa, 0, zeroin_addr, 0, cmd, notify);
 }
 
-#if BSD<43
-/* XXX fake routine */
-tcp_abort(inp)
-       struct inpcb *inp;
-{
-       return;
-}
-#endif
-
 /*
  * When a source quench is received, close congestion window
  * to one segment.  We will gradually open it again as we proceed.
  */
 /*
  * When a source quench is received, close congestion window
  * to one segment.  We will gradually open it again as we proceed.
  */
-tcp_quench(inp)
+void
+tcp_quench(inp, errno)
        struct inpcb *inp;
        struct inpcb *inp;
+       int errno;
 {
        struct tcpcb *tp = intotcpcb(inp);
 
 {
        struct tcpcb *tp = intotcpcb(inp);