new option to suppress error processing on DG sockets.
authorKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Sat, 27 Jul 1985 06:48:44 +0000 (22:48 -0800)
committerKeith Sklower <sklower@ucbvax.Berkeley.EDU>
Sat, 27 Jul 1985 06:48:44 +0000 (22:48 -0800)
SCCS-vsn: sys/netns/ns_input.c 6.7
SCCS-vsn: sys/netns/idp_usrreq.c 6.6

usr/src/sys/netns/idp_usrreq.c
usr/src/sys/netns/ns_input.c

index 9cb1188..e25da8a 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *      @(#)idp_usrreq.c       6.5 (Berkeley) %G%
+ *      @(#)idp_usrreq.c       6.6 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -41,12 +41,7 @@ idp_input(m, nsp)
        register struct idp *idp = mtod(m, struct idp *);
 
        if (nsp==0) {
        register struct idp *idp = mtod(m, struct idp *);
 
        if (nsp==0) {
-               nsp = ns_pcblookup(&idp->idp_sna,
-                                       idp->idp_dna.x_port, NS_WILDCARD);
-               if (nsp==0) {
-                       ns_error(m, NS_ERR_NOSOCK, 0);
-                       return;
-               }
+               panic("No nspcb");
        }
 
        /*
        }
 
        /*
@@ -224,6 +219,10 @@ idp_ctloutput(req, so, level, name, value)
                        return (ENOBUFS);
                switch (name) {
 
                        return (ENOBUFS);
                switch (name) {
 
+               case SO_ALL_PACKETS:
+                       mask = NSP_ALL_PACKETS;
+                       goto get_flags;
+
                case SO_HEADERS_ON_INPUT:
                        mask = NSP_RAWIN;
                        goto get_flags;
                case SO_HEADERS_ON_INPUT:
                        mask = NSP_RAWIN;
                        goto get_flags;
@@ -262,6 +261,10 @@ idp_ctloutput(req, so, level, name, value)
                switch (name) {
                        int mask, *ok;
 
                switch (name) {
                        int mask, *ok;
 
+               case SO_ALL_PACKETS:
+                       mask = NSP_ALL_PACKETS;
+                       goto set_head;
+
                case SO_HEADERS_ON_INPUT:
                        mask = NSP_RAWIN;
                        goto set_head;
                case SO_HEADERS_ON_INPUT:
                        mask = NSP_RAWIN;
                        goto set_head;
index 81be7e6..63535b1 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)ns_input.c  6.6 (Berkeley) %G%
+ *     @(#)ns_input.c  6.7 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -66,7 +66,7 @@ nsintr()
 {
        register struct idp *idp;
        register struct mbuf *m;
 {
        register struct idp *idp;
        register struct mbuf *m;
-       struct nspcb *nsp;
+       register struct nspcb *nsp;
        struct mbuf *m0;
        register int i;
        int len, s, error;
        struct mbuf *m0;
        register int i;
        int len, s, error;
@@ -172,25 +172,32 @@ next:
                idp_forward(idp);
                goto next;
        }
                idp_forward(idp);
                goto next;
        }
-       if (oddpacketp) {
-               m_adj(m0, -1);
-       }
-
-        /*
-         * Switch out to protocol's input routine.
-         */
-
-       switch (idp->idp_pt) {
+       /*
+        * Locate pcb for datagram.
+        */
+       nsp = ns_pcblookup(&idp->idp_sna, idp->idp_dna.x_port, NS_WILDCARD);
+       /*
+        * Switch out to protocol's input routine.
+        */
+       nsintr_swtch++;
+       if (nsp) {
+               if (oddpacketp) {
+                       m_adj(m0, -1);
+               }
+               if ((nsp->nsp_flags & NSP_ALL_PACKETS)==0)
+                       switch (idp->idp_pt) {
 
 
-               case NSPROTO_SPP:
-                       spp_input(m);
-                       break;
+                           case NSPROTO_SPP:
+                                   spp_input(m,nsp);
+                                   goto next;
 
 
-               case NSPROTO_ERROR:
-                       ns_err_input(m);
-                       break;
-               default:
-                       idp_input(m, 0);
+                           case NSPROTO_ERROR:
+                                   ns_err_input(m);
+                                   goto next;
+                       }
+               idp_input(m,nsp);
+       } else {
+               ns_error(m, NS_ERR_NOSOCK, 0);
        }
        goto next;
 
        }
        goto next;