From 19d8bb7743e2acb4f9cc41fe9f87afbdec35f557 Mon Sep 17 00:00:00 2001 From: Keith Sklower Date: Fri, 26 Jul 1985 22:48:44 -0800 Subject: [PATCH] new option to suppress error processing on DG sockets. 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 | 17 +++++++------ usr/src/sys/netns/ns_input.c | 45 ++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/usr/src/sys/netns/idp_usrreq.c b/usr/src/sys/netns/idp_usrreq.c index 9cb1188d60..e25da8a2cd 100644 --- a/usr/src/sys/netns/idp_usrreq.c +++ b/usr/src/sys/netns/idp_usrreq.c @@ -3,7 +3,7 @@ * 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" @@ -41,12 +41,7 @@ idp_input(m, nsp) 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) { + case SO_ALL_PACKETS: + mask = NSP_ALL_PACKETS; + 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; + case SO_ALL_PACKETS: + mask = NSP_ALL_PACKETS; + goto set_head; + case SO_HEADERS_ON_INPUT: mask = NSP_RAWIN; goto set_head; diff --git a/usr/src/sys/netns/ns_input.c b/usr/src/sys/netns/ns_input.c index 81be7e6d12..63535b1e31 100644 --- a/usr/src/sys/netns/ns_input.c +++ b/usr/src/sys/netns/ns_input.c @@ -3,7 +3,7 @@ * 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" @@ -66,7 +66,7 @@ nsintr() { 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; @@ -172,25 +172,32 @@ 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; -- 2.20.1