From faad37c08e8f726cf25987ba634804e06f38010b Mon Sep 17 00:00:00 2001 From: Sam Leffler Date: Tue, 2 Feb 1982 01:50:36 -0800 Subject: [PATCH] raw interfaces brought up to date SCCS-vsn: sys/deprecated/netimp/if_imp.c 4.2 SCCS-vsn: sys/net/raw_cb.c 4.2 SCCS-vsn: sys/net/raw_cb.h 4.2 SCCS-vsn: sys/net/raw_usrreq.c 4.6 SCCS-vsn: sys/netinet/raw_ip.c 4.3 --- usr/src/sys/deprecated/netimp/if_imp.c | 14 +++++---- usr/src/sys/net/raw_cb.c | 11 +------ usr/src/sys/net/raw_cb.h | 7 +++-- usr/src/sys/net/raw_usrreq.c | 40 +++++++++++++------------- usr/src/sys/netinet/raw_ip.c | 13 ++++----- 5 files changed, 39 insertions(+), 46 deletions(-) diff --git a/usr/src/sys/deprecated/netimp/if_imp.c b/usr/src/sys/deprecated/netimp/if_imp.c index 97bb248e60..1362f536f1 100644 --- a/usr/src/sys/deprecated/netimp/if_imp.c +++ b/usr/src/sys/deprecated/netimp/if_imp.c @@ -1,4 +1,4 @@ -/* if_imp.c 4.1 82/02/01 */ +/* if_imp.c 4.2 82/02/01 */ #include "imp.h" #if NIMP > 0 @@ -103,7 +103,8 @@ impinit(unit) } struct sockproto impproto = { PF_IMPLINK }; -struct sockaddr_in impaddr = { AF_IMPLINK }; +struct sockaddr_in impdst = { AF_IMPLINK }; +struct sockaddr_in impsrc = { AF_IMPLINK }; /* * ARPAnet 1822 input routine. @@ -285,10 +286,11 @@ COUNT(IMP_INPUT); default: impproto.sp_protocol = ip->il_link; - impaddr.sin_addr.s_net = ip->il_network; - impaddr.sin_addr.s_host = ip->il_host; - impaddr.sin_addr.s_imp = ip->il_imp; - raw_input(m, impproto, impaddr); + impdst.sin_addr = sc->imp_if.if_addr; + impsrc.sin_addr.s_net = ip->il_network; + impsrc.sin_addr.s_host = ip->il_host; + impsrc.sin_addr.s_imp = ip->il_imp; + raw_input(m, impproto, impdst, impsrc); return; } IF_ENQUEUE(inq, m); diff --git a/usr/src/sys/net/raw_cb.c b/usr/src/sys/net/raw_cb.c index 1676b9fbf9..d1f28a9131 100644 --- a/usr/src/sys/net/raw_cb.c +++ b/usr/src/sys/net/raw_cb.c @@ -1,4 +1,4 @@ -/* raw_cb.c 4.1 82/02/01 */ +/* raw_cb.c 4.2 82/02/01 */ #include "../h/param.h" #include "../h/systm.h" @@ -33,8 +33,6 @@ raw_attach(so, addr) struct ifnet *ifp = ifnet; COUNT(RAW_ATTACH); - if (so->so_options & SO_DEBUG) - printf("raw_attach: addr=%d\n", addr->sa_family); /* * Should we verify address not already in use? * Some say yes, others no. @@ -88,8 +86,6 @@ raw_detach(rp) struct socket *so = rp->rcb_socket; COUNT(RAW_DETACH); - if (rp->rcb_socket->so_options & SO_DEBUG) - printf("raw_detach: rp=%X\n", rp); so->so_pcb = 0; sofree(so); remque(rp); @@ -103,8 +99,6 @@ raw_disconnect(rp) struct rawcb *rp; { COUNT(RAW_DISCONNECT); - if (rp->rcb_socket->so_options & SO_DEBUG) - printf("raw_disconnect: rp=%X\n", rp); rp->rcb_flags &= ~RAW_ADDR; if (rp->rcb_socket->so_state & SS_USERGONE) raw_detach(rp); @@ -119,9 +113,6 @@ raw_connaddr(rp, addr) struct sockaddr *addr; { COUNT(RAW_CONNADDR); - if (rp->rcb_socket->so_options & SO_DEBUG); - printf("raw_connaddr: rp=%x, addr=<%x,%x>\n", - rp, addr->sa_family, ((struct sockaddr_in *)addr)->sin_addr); bcopy(addr, &rp->rcb_addr, sizeof(struct sockaddr)); rp->rcb_flags |= RAW_ADDR; } diff --git a/usr/src/sys/net/raw_cb.h b/usr/src/sys/net/raw_cb.h index a0e0e766c6..3cea24ecda 100644 --- a/usr/src/sys/net/raw_cb.h +++ b/usr/src/sys/net/raw_cb.h @@ -1,4 +1,4 @@ -/* raw_cb.h 4.1 82/02/01 */ +/* raw_cb.h 4.2 82/02/01 */ /* * Raw protocol interface control block. Used @@ -32,8 +32,9 @@ struct rawcb { * raw_input after call from protocol specific input routine. */ struct raw_header { - struct sockproto raw_protocol; - struct sockaddr raw_address; + struct sockproto raw_protocol; /* format of packet */ + struct sockaddr raw_dst; /* dst address for rawintr */ + struct sockaddr raw_src; /* src address for sbappendaddr */ }; #ifdef KERNEL diff --git a/usr/src/sys/net/raw_usrreq.c b/usr/src/sys/net/raw_usrreq.c index 82d5e99ad1..136ed5c370 100644 --- a/usr/src/sys/net/raw_usrreq.c +++ b/usr/src/sys/net/raw_usrreq.c @@ -1,4 +1,4 @@ -/* raw_usrreq.c 4.5 82/01/24 */ +/* raw_usrreq.c 4.6 82/02/01 */ #include "../h/param.h" #include "../h/mbuf.h" @@ -24,10 +24,10 @@ COUNT(RAW_INIT); /* * Raw protocol interface. */ -raw_input(m0, pf, af) +raw_input(m0, pf, daf, saf) struct mbuf *m0; struct sockproto pf; - struct sockaddr af; + struct sockaddr daf, saf; { register struct mbuf *m; struct raw_header *rh; @@ -45,7 +45,8 @@ raw_input(m0, pf, af) m->m_off = MMINOFF; m->m_len = sizeof(struct raw_header); rh = mtod(m, struct raw_header *); - rh->raw_address = af; + rh->raw_dst = daf; + rh->raw_src = saf; rh->raw_protocol = pf; /* @@ -75,6 +76,7 @@ rawintr() register struct protosw *pr; register struct sockproto *sp; register struct sockaddr *sa; + struct raw_header *rawp; struct socket *last; COUNT(RAWINTR); @@ -84,8 +86,9 @@ next: splx(s); if (m == 0) return; - sp = &(mtod(m, struct raw_header *)->raw_protocol); - sa = &(mtod(m, struct raw_header *)->raw_address); + rawp = mtod(m, struct raw_header *); + sp = &rawp->raw_protocol; + sa = &rawp->raw_dst; /* * Find the appropriate socket(s) in which to place this @@ -97,18 +100,9 @@ next: for (rp = rawcb.rcb_next; rp != &rawcb; rp = rp->rcb_next) { so = rp->rcb_socket; pr = so->so_proto; - - if (so->so_options & SO_DEBUG) { - printf("rawintr: sp=<%d,%d>, af=<%d,%x>\n", - sp->sp_family, sp->sp_protocol, sa->sa_family, - ((struct sockaddr_in *)sa)->sin_addr); - printf("pr=<%d,%d>\n", pr->pr_family, pr->pr_protocol); - } if (pr->pr_family != sp->sp_family || pr->pr_protocol != sp->sp_protocol) continue; - printf("rawintr: so=<%d,%x>\n", so->so_addr.sa_family, - ((struct sockaddr_in *)&so->so_addr)->sin_addr); if (sa->sa_family != so->so_addr.sa_family) continue; /* @@ -131,7 +125,14 @@ next: if (n = m_copy(m->m_next, 0, M_COPYALL)) goto nospace; - sbappend(&last->so_rcv, n); + if (sbappendaddr(&last->so_rcv, &rawp->raw_src, n) == 0) { + /* + * Should drop notification of lost packet + * into this guy's queue, but... + */ + m_freem(n); + goto nospace; + } sorwakeup(last); } nospace: @@ -139,8 +140,9 @@ nospace: } if (last == 0) goto drop; - m = m_free(m); /* drop generic header */ - sbappend(&last->so_rcv, m->m_next); + if (sbappendaddr(&last->so_rcv, &rawp->raw_src, m->m_next) == 0) + goto drop; + (void) m_free(m); /* generic header */ sorwakeup(last); goto next; drop: @@ -159,8 +161,6 @@ raw_usrreq(so, req, m, addr) int error = 0; COUNT(RAW_USRREQ); - if (so->so_options & SO_DEBUG) - printf("raw_usrreq: req=%d\n"); if (rp == 0 && req != PRU_ATTACH) return (EINVAL); diff --git a/usr/src/sys/netinet/raw_ip.c b/usr/src/sys/netinet/raw_ip.c index 4dc91f87a7..222f7268b3 100644 --- a/usr/src/sys/netinet/raw_ip.c +++ b/usr/src/sys/netinet/raw_ip.c @@ -1,4 +1,4 @@ -/* raw_ip.c 4.2 82/01/24 */ +/* raw_ip.c 4.3 82/02/01 */ #include "../h/param.h" #include "../h/mbuf.h" @@ -16,7 +16,8 @@ * Raw interface to IP protocol. */ -static struct sockaddr_in ripaddr = { PF_INET }; +static struct sockaddr_in ripdst = { PF_INET }; +static struct sockaddr_in ripsrc = { PF_INET }; static struct sockproto ripproto = { AF_INET }; /* @@ -33,8 +34,9 @@ rip_input(m) COUNT(RIP_INPUT); ripproto.sp_protocol = ip->ip_p; - ripaddr.sin_addr = ip->ip_dst; - raw_input(m, ripproto, ripaddr); + ripdst.sin_addr = ip->ip_dst; + ripsrc.sin_addr = ip->ip_src; + raw_input(m, ripproto, ripdst, ripsrc); } /*ARGSUSED*/ @@ -58,8 +60,6 @@ rip_output(m0, so) register struct rawcb *rp = sotorawcb(so); COUNT(RIP_OUTPUT); - if (so->so_options & SO_DEBUG) - printf("rip_output\n"); /* * Calculate data length and get an mbuf * for IP header. @@ -86,7 +86,6 @@ COUNT(RIP_OUTPUT); ip->ip_src = ((struct sockaddr_in *)&so->so_addr)->sin_addr; ip->ip_ttl = MAXTTL; -printf("ip=\n",ip->ip_p,ip->ip_len,ip->ip_dst,ip->ip_src); return (ip_output(m, 0)); } -- 2.20.1