diff options
author | Angelos D. Keromytis <angelos@cvs.openbsd.org> | 2000-04-10 04:39:42 +0000 |
---|---|---|
committer | Angelos D. Keromytis <angelos@cvs.openbsd.org> | 2000-04-10 04:39:42 +0000 |
commit | fd15ab77cff7d1685f86a25686c91e518b748a35 (patch) | |
tree | d7b82e7e02523d99914225e0018f22ab98271f68 /sys/net | |
parent | 4857bf08584d5ef1029a84a3958bd461d93b6361 (diff) |
output routine enqueues and calls start, rather than requeueing for input.
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/if_enc.c | 69 |
1 files changed, 14 insertions, 55 deletions
diff --git a/sys/net/if_enc.c b/sys/net/if_enc.c index af9c4169ef2..339cc1037d0 100644 --- a/sys/net/if_enc.c +++ b/sys/net/if_enc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_enc.c,v 1.25 2000/04/10 02:34:07 angelos Exp $ */ +/* $OpenBSD: if_enc.c,v 1.26 2000/04/10 04:39:41 angelos Exp $ */ /* * The authors of this code are John Ioannidis (ji@tla.org), @@ -207,12 +207,8 @@ struct ifnet *ifp; /* See if we need to notify a key mgmt. daemon to setup SAs */ if (ntohl(enc->sc_spi) == SPI_LOCAL_USE) { - /* - * XXX Can't do this for now, as there's no way for - * XXX key mgmt. to specify link-layer properties - * XXX (e.g., encrypt everything on this interface) - */ #ifdef notyet + /* XXX Currently unsupported */ if (tdb->tdb_satype != SADB_X_SATYPE_BYPASS) pfkeyv2_acquire(tdb, 0); /* No point checking for errors */ #endif @@ -277,9 +273,6 @@ struct ifnet *ifp; #endif /* IPSEC */ } -/* - * Shamelessly stolen from looutput() - */ int encoutput(ifp, m, dst, rt) struct ifnet *ifp; @@ -287,8 +280,7 @@ register struct mbuf *m; struct sockaddr *dst; register struct rtentry *rt; { - register struct ifqueue *ifq = 0; - int s, isr; + int s; if ((m->m_flags & M_PKTHDR) == 0) panic("encoutput(): no HDR"); @@ -303,56 +295,22 @@ register struct rtentry *rt; rt->rt_flags & RTF_HOST ? EHOSTUNREACH : ENETUNREACH); } - ifp->if_opackets++; - ifp->if_obytes += m->m_pkthdr.len; - - switch (dst->sa_family) - { -#ifdef INET - case AF_INET: - ifq = &ipintrq; - isr = NETISR_IP; - break; -#endif -#ifdef INET6 - case AF_INET6: - ifq = &ip6intrq; - isr = NETISR_IPV6; - break; -#endif -#ifdef NS - case AF_NS: - ifq = &nsintrq; - isr = NETISR_NS; - break; -#endif -#ifdef ISO - case AF_ISO: - ifq = &clnlintrq; - isr = NETISR_ISO; - break; -#endif - default: - m_freem(m); - return (EAFNOSUPPORT); - } - s = splimp(); - if (IF_QFULL(ifq)) - { - IF_DROP(ifq); + if (IF_QFULL(&ifp->if_snd)) { + ifp->if_oerrors++; m_freem(m); splx(s); - return (ENOBUFS); + return 0; } - - IF_ENQUEUE(ifq, m); - schednetisr(isr); - /* Statistics */ - ifp->if_ipackets++; - ifp->if_ibytes += m->m_pkthdr.len; + ifp->if_opackets++; + ifp->if_obytes += m->m_pkthdr.len; + + IF_ENQUEUE(&ifp->if_snd, m); splx(s); + + (ifp->if_start)(ifp); + return (0); } @@ -393,6 +351,7 @@ caddr_t data; case SIOCSIFADDR: case SIOCAIFADDR: case SIOCSIFDSTADDR: + case SIOCSIFFLAGS: break; case SIOCGENCSA: |