trailer's handled wrong on pup's
[unix-history] / usr / src / sys / net / raw_usrreq.c
index 5dbdd02..aee828e 100644 (file)
@@ -1,4 +1,4 @@
-/*     raw_usrreq.c    4.9     82/03/13        */
+/*     raw_usrreq.c    4.11    82/03/19        */
 
 #include "../h/param.h"
 #include "../h/mbuf.h"
 
 #include "../h/param.h"
 #include "../h/mbuf.h"
 #include "../net/raw_cb.h"
 #include "../errno.h"
 
 #include "../net/raw_cb.h"
 #include "../errno.h"
 
+int    rawqmaxlen = IFQ_MAXLEN;
+
 /*
  * Initialize raw connection block q.
 /*
  * Initialize raw connection block q.
-*/
+ */
 raw_init()
 {
 raw_init()
 {
+
 COUNT(RAW_INIT);
        rawcb.rcb_next = rawcb.rcb_prev = &rawcb;
 COUNT(RAW_INIT);
        rawcb.rcb_next = rawcb.rcb_prev = &rawcb;
+       rawintrq.ifq_maxlen = IFQ_MAXLEN;
 }
 
 /*
 }
 
 /*
@@ -57,9 +61,12 @@ COUNT(RAW_INPUT);
         * running at software interrupt level.
         */
        s = splimp();
         * running at software interrupt level.
         */
        s = splimp();
-       IF_ENQUEUE(&rawintrq, m);
+       if (IF_QFULL(&rawintrq))
+               m_freem(m);
+       else
+               IF_ENQUEUE(&rawintrq, m);
        splx(s);
        splx(s);
-       setrawintr();
+       schednetisr(NETISR_RAW);
 }
 
 /*
 }
 
 /*
@@ -180,8 +187,10 @@ COUNT(RAW_USRREQ);
         * the appropriate raw interface routine.
         */
        case PRU_ATTACH:
         * the appropriate raw interface routine.
         */
        case PRU_ATTACH:
+               if ((so->so_state & SS_PRIV) == 0)
+                       return (EPERM);
                if (rp)
                if (rp)
-                       return (EINVAL);;
+                       return (EINVAL);
                error = raw_attach(so, (struct sockaddr *)addr);
                break;
 
                error = raw_attach(so, (struct sockaddr *)addr);
                break;