almost works
authorBill Joy <root@ucbvax.Berkeley.EDU>
Sun, 13 Dec 1981 09:49:54 +0000 (01:49 -0800)
committerBill Joy <root@ucbvax.Berkeley.EDU>
Sun, 13 Dec 1981 09:49:54 +0000 (01:49 -0800)
SCCS-vsn: sys/kern/kern_clock.c 4.28
SCCS-vsn: sys/kern/uipc_mbuf.c 1.21
SCCS-vsn: sys/kern/uipc_proto.c 4.11
SCCS-vsn: sys/kern/uipc_socket.c 4.17
SCCS-vsn: sys/kern/uipc_socket2.c 4.14

usr/src/sys/kern/kern_clock.c
usr/src/sys/kern/uipc_mbuf.c
usr/src/sys/kern/uipc_proto.c
usr/src/sys/kern/uipc_socket.c
usr/src/sys/kern/uipc_socket2.c

index c94dc3c..fe32e3c 100644 (file)
@@ -1,4 +1,4 @@
-/*     kern_clock.c    4.27    81/11/20        */
+/*     kern_clock.c    4.28    81/12/12        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -17,6 +17,7 @@
 #include "../h/mtpr.h"
 #include "../h/clock.h"
 #include "../h/cpu.h"
 #include "../h/mtpr.h"
 #include "../h/clock.h"
 #include "../h/cpu.h"
+#include "../h/protosw.h"
 
 #include "bk.h"
 #include "dh.h"
 
 #include "bk.h"
 #include "dh.h"
 int    kcounts[20000];
 #endif
 
 int    kcounts[20000];
 #endif
 
+/*
+ * Protoslow is like lbolt, but for slow protocol timeouts, counting
+ * up to (hz/PR_SLOWHZ), then causing a pfslowtimo().
+ * Protofast is like lbolt, but for fast protocol timeouts, counting
+ * up to (hz/PR_FASTHZ), then causing a pffasttimo().
+ */
+int    protoslow;
+int    protofast;
+
 /*ARGSUSED*/
 hardclock(pc, ps)
        caddr_t pc;
 /*ARGSUSED*/
 hardclock(pc, ps)
        caddr_t pc;
@@ -133,6 +143,12 @@ hardclock(pc, ps)
         * Time moves on.
         */
        ++lbolt;
         * Time moves on.
         */
        ++lbolt;
+
+       /*
+        * Time moves on for protocols.
+        */
+       ++protoslow; ++protofast;
+
 #if VAX780
        /*
         * On 780's, impelement a fast UBA watcher,
 #if VAX780
        /*
         * On 780's, impelement a fast UBA watcher,
@@ -244,6 +260,14 @@ softclock(pc, ps)
                aston();
        }
 
                aston();
        }
 
+       /*
+        * Run network slow and fast timeouts.
+        */
+       if (protofast >= hz / PR_FASTHZ)
+               pffasttimo();
+       if (protofast >= hz / PR_SLOWHZ)
+               pfslowtimo();
+
        /*
         * Lightning bolt every second:
         *      sleep timeouts
        /*
         * Lightning bolt every second:
         *      sleep timeouts
index e6adc81..816d6fd 100644 (file)
@@ -1,4 +1,4 @@
-/*     uipc_mbuf.c     1.20    81/12/09        */
+/*     uipc_mbuf.c     1.21    81/12/12        */
 
 #include "../h/param.h"
 #include "../h/dir.h"
 
 #include "../h/param.h"
 #include "../h/dir.h"
@@ -13,8 +13,6 @@
 
 mbinit()
 {
 
 mbinit()
 {
-       register struct mbuf *m;
-       register i;
 
 COUNT(MBINIT);
        if (m_reserve(32) == 0)
 
 COUNT(MBINIT);
        if (m_reserve(32) == 0)
index 7767d83..c9792d5 100644 (file)
@@ -1,4 +1,4 @@
-/*     uipc_proto.c    4.10    81/12/03        */
+/*     uipc_proto.c    4.11    81/12/12        */
 
 #include "../h/param.h"
 #include "../h/socket.h"
 
 #include "../h/param.h"
 #include "../h/socket.h"
@@ -139,3 +139,26 @@ COUNT(PFFINDPROTO);
                        return (pr);
        return (0);
 }
                        return (pr);
        return (0);
 }
+
+/*
+ * Slow timeout on all protocols.
+ */
+pfslowtimo()
+{
+       register struct protosw *pr;
+
+COUNT(PFSLOWTIMO);
+       for (pr = protoswLAST; pr >= protosw; pr--)
+               if (pr->pr_slowtimo)
+                       (*pr->pr_slowtimo)();
+}
+
+pffasttimo()
+{
+       register struct protosw *pr;
+
+COUNT(PFSLOWTIMO);
+       for (pr = protoswLAST; pr >= protosw; pr--)
+               if (pr->pr_slowtimo)
+                       (*pr->pr_slowtimo)();
+}
index dc8c416..b0ccbb5 100644 (file)
@@ -1,4 +1,4 @@
-/*     uipc_socket.c   4.16    81/12/02        */
+/*     uipc_socket.c   4.17    81/12/12        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -109,10 +109,12 @@ soclose(so)
 COUNT(SOCLOSE);
        if (so->so_pcb == 0)
                goto discard;
 COUNT(SOCLOSE);
        if (so->so_pcb == 0)
                goto discard;
+printf("soclose %x state %x\n", so, so->so_state);
        if (so->so_state & SS_ISCONNECTED) {
                if ((so->so_state & SS_ISDISCONNECTING) == 0) {
                        u.u_error = sodisconnect(so, (struct sockaddr *)0);
                        if (u.u_error) {
        if (so->so_state & SS_ISCONNECTED) {
                if ((so->so_state & SS_ISDISCONNECTING) == 0) {
                        u.u_error = sodisconnect(so, (struct sockaddr *)0);
                        if (u.u_error) {
+printf("soclose disconnect error %d\n", u.u_error);
                                splx(s);
                                return;
                        }
                                splx(s);
                                return;
                        }
@@ -123,8 +125,10 @@ COUNT(SOCLOSE);
                        splx(s);
                        return;
                }
                        splx(s);
                        return;
                }
-               while (so->so_state & SS_ISCONNECTED)
+               while (so->so_state & SS_ISCONNECTED) {
+printf("sleeping until not connected\n");
                        sleep((caddr_t)&so->so_timeo, PZERO+1);
                        sleep((caddr_t)&so->so_timeo, PZERO+1);
+               }
        }
        u.u_error = (*so->so_proto->pr_usrreq)(so, PRU_DETACH, 0, 0);
 discard:
        }
        u.u_error = (*so->so_proto->pr_usrreq)(so, PRU_DETACH, 0, 0);
 discard:
@@ -179,6 +183,7 @@ COUNT(SOACCEPT);
                goto bad;
        }
        error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT, 0, (caddr_t)asa);
                goto bad;
        }
        error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT, 0, (caddr_t)asa);
+printf("PRU_ACCEPT returns error %d\n", error);
 bad:
        splx(s);
        return (error);
 bad:
        splx(s);
        return (error);
index b22b3c4..7a30d82 100644 (file)
@@ -1,4 +1,4 @@
-/*     uipc_socket2.c  4.13    81/12/03        */
+/*     uipc_socket2.c  4.14    81/12/12        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -41,6 +41,7 @@ soisconnecting(so)
        struct socket *so;
 {
 
        struct socket *so;
 {
 
+printf("soisconnecting %x\n", so);
        so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING);
        so->so_state |= SS_ISCONNECTING;
        wakeup((caddr_t)&so->so_timeo);
        so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING);
        so->so_state |= SS_ISCONNECTING;
        wakeup((caddr_t)&so->so_timeo);
@@ -50,6 +51,7 @@ soisconnected(so)
        struct socket *so;
 {
 
        struct socket *so;
 {
 
+printf("soisconnected %x\n", so);
        so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
        so->so_state |= SS_ISCONNECTED;
        wakeup((caddr_t)&so->so_timeo);
        so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
        so->so_state |= SS_ISCONNECTED;
        wakeup((caddr_t)&so->so_timeo);
@@ -59,7 +61,8 @@ soisdisconnecting(so)
        struct socket *so;
 {
 
        struct socket *so;
 {
 
-       so->so_state &= ~(SS_ISCONNECTED|SS_ISCONNECTING);
+printf("soisdisconnecting %x\n", so);
+       so->so_state &= ~SS_ISCONNECTING;
        so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE|SS_CANTSENDMORE);
        wakeup((caddr_t)&so->so_timeo);
        sowwakeup(so);
        so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE|SS_CANTSENDMORE);
        wakeup((caddr_t)&so->so_timeo);
        sowwakeup(so);
@@ -70,6 +73,7 @@ soisdisconnected(so)
        struct socket *so;
 {
 
        struct socket *so;
 {
 
+printf("soisdisconnected %x\n", so);
        so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
        so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE);
        wakeup((caddr_t)&so->so_timeo);
        so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
        so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE);
        wakeup((caddr_t)&so->so_timeo);