first working version with software interrupts
authorBill Joy <wnj@ucbvax.Berkeley.EDU>
Sat, 17 Oct 1981 08:25:05 +0000 (00:25 -0800)
committerBill Joy <wnj@ucbvax.Berkeley.EDU>
Sat, 17 Oct 1981 08:25:05 +0000 (00:25 -0800)
SCCS-vsn: sys/netinet/ip_input.c 1.3
SCCS-vsn: sys/vax/vax/in_cksum.c 1.2

usr/src/sys/netinet/ip_input.c
usr/src/sys/vax/vax/in_cksum.c

index 53a68bd..cc76907 100644 (file)
@@ -1,4 +1,4 @@
-/* ip_input.c 1.2 81/10/14 */
+/* ip_input.c 1.3 81/10/16 */
 #include "../h/param.h"
 #include "../bbnnet/net.h"
 #include "../bbnnet/tcp.h"
 #include "../h/param.h"
 #include "../bbnnet/net.h"
 #include "../bbnnet/tcp.h"
@@ -386,12 +386,15 @@ ip_timeo()      /* frag reass.q timeout routine */
 {
        register struct ip *q;
        register struct ipq *fp;
 {
        register struct ip *q;
        register struct ipq *fp;
+       int s = splnet();
 
 COUNT(IP_TIMEO);
        timeout(ip_timeo, 0, 60);       /* reschedule every second */
 
 
 COUNT(IP_TIMEO);
        timeout(ip_timeo, 0, 60);       /* reschedule every second */
 
-       if (netcb.n_ip_lock)    /* reass.q must not be in use */
+       if (netcb.n_ip_lock) {    /* reass.q must not be in use */
+               splx(s);
                return;
                return;
+       }
 
        /* search through reass.q */
 
 
        /* search through reass.q */
 
@@ -406,4 +409,5 @@ COUNT(IP_TIMEO);
                        }                                                      
                        ip_freef(fp);           /* free header */              
                }
                        }                                                      
                        ip_freef(fp);           /* free header */              
                }
+       splx(s);
 }
 }
index 6976a0c..449b0ed 100644 (file)
@@ -1,4 +1,4 @@
-/* in_cksum.c 1.1 81/10/14 */
+/* in_cksum.c 1.2 81/10/16 */
 
 #include <sys/types.h>
 #include "../bbnnet/net.h"
 
 #include <sys/types.h>
 #include "../bbnnet/net.h"
@@ -8,21 +8,6 @@
  * Network primitives; this file varies per-cpu,
  * and the code here is for VAX only.
  */
  * Network primitives; this file varies per-cpu,
  * and the code here is for VAX only.
  */
-cksum(m, len)
-register struct mbuf *m;
-{
-       int i,j;
-       i = ncksum(m, len);
-       j = ocksum(m, len);
-       if (i != j) {
-               printf("old %x new %x \n", i, j);
-               while (m != 0) {
-                       printf("m->m_off %d m->m_len %d\n", m->m_off, m->m_len);
-                       m = m->m_next;
-               }
-       }
-       return (j);
-}
 
 /*
  * Checksum routine for TCP/IP headers.  This
 
 /*
  * Checksum routine for TCP/IP headers.  This
@@ -30,14 +15,14 @@ register struct mbuf *m;
  * code and should be rewritten for each CPU
  * to be as fast as possible.
  */
  * code and should be rewritten for each CPU
  * to be as fast as possible.
  */
-ncksum(m, len)
+cksum(m, len)
        register struct mbuf *m;
        register int len;
 {
        register u_short *w;            /* known to be r9 */
        register int sum = 0;           /* known to be r8 */
        register int mlen = 0;
        register struct mbuf *m;
        register int len;
 {
        register u_short *w;            /* known to be r9 */
        register int sum = 0;           /* known to be r8 */
        register int mlen = 0;
-COUNT(NCKSUM);
+COUNT(CKSUM);
 
        for (;;) {
                w = (u_short *)((int)m + m->m_off);
 
        for (;;) {
                w = (u_short *)((int)m + m->m_off);
@@ -87,61 +72,3 @@ COUNT(NCKSUM);
  *     htons and ntohs         do byte reverse of a 16 bit integer
  *     htonl and ntohl         do byte reverse of a 32 bit integer
  */
  *     htons and ntohs         do byte reverse of a 16 bit integer
  *     htonl and ntohl         do byte reverse of a 32 bit integer
  */
-ocksum(m, len)
-register struct mbuf *m;
-register len;
-{
-       register unsigned short *w;
-       register unsigned long sum;
-       register mlen;
-COUNT(OCKSUM);
-
-       w = (unsigned short *)((int)m + m->m_off);
-       mlen = m->m_len;
-       sum = 0;
-
-       for (; len > 0; len -= 2, mlen -= 2) {
-
-try:            if (mlen > 1) {         /* can get a word */
-
-                       if (len > 1) {
-                               sum += *(w++);
-
-                       } else            /* trailing odd byte */
-
-                               sum += *((char *)w) & 0xff;
-
-               } else if (mlen > 0) {  /* last byte of mbuf */
-
-                       sum += *((char *)w) & 0xff;
-
-                       if (len > 1) {
-
-                               /* get next good mbuf for hi byte */
-        
-                               while ((m = m->m_next) != 0 && 
-                                       (mlen = m->m_len + 1) == 1);
-                               if (m != 0) {
-                                       w = (unsigned short *)((int)m + m->m_off);
-                                       sum += (*((char *)w) & 0xff) << 8;
-                                       w = (unsigned short *)((int)w + 1);
-                               } else
-                                       len = 0;        /* force loop exit */
-                       }
-
-               } else {                /* end of mbuf, get next and try again */
-
-                       while ((m = m->m_next) != 0 && (mlen = m->m_len) == 0);
-                       if (m != 0) {
-                               w = (unsigned short *)((int)m + m->m_off);
-                               goto try;
-                       } else
-                               break;
-               }
-       }
-
-       /* add in one's complement carry */
-
-       sum = (sum + (sum >> 16)) & 0xffff;
-       return(~sum & 0xffff);
-}