diff options
author | sam <sam@FreeBSD.org> | 2002-11-15 00:00:15 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2002-11-15 00:00:15 +0000 |
commit | 6a05792540ffa00713f4b3a1521864f7dddc1f39 (patch) | |
tree | 2a5611d45149f91e7ddfd0e32391f1ef7d8590e1 /sys/net/if_fddisubr.c | |
parent | 36661cddf10b1ee6cf5c6ca63413f6f860242c8e (diff) | |
download | FreeBSD-src-6a05792540ffa00713f4b3a1521864f7dddc1f39.zip FreeBSD-src-6a05792540ffa00713f4b3a1521864f7dddc1f39.tar.gz |
network interface and link layer changes:
o on input don't strip the Ethernet header from packets
o input packet handling is now done with if_input
o track changes to ether_ifattach/ether_ifdetach API
o track changes to bpf tapping
o call ether_ioctl for default handling of ioctl's
o use constants from net/ethernet.h where possible
Reviewed by: many
Approved by: re
Diffstat (limited to 'sys/net/if_fddisubr.c')
-rw-r--r-- | sys/net/if_fddisubr.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/sys/net/if_fddisubr.c b/sys/net/if_fddisubr.c index b1c6fce..49a5f21 100644 --- a/sys/net/if_fddisubr.c +++ b/sys/net/if_fddisubr.c @@ -100,6 +100,7 @@ static int fddi_resolvemulti(struct ifnet *, struct sockaddr **, struct sockaddr *); static int fddi_output(struct ifnet *, struct mbuf *, struct sockaddr *, struct rtentry *); +static void fddi_input(struct ifnet *ifp, struct mbuf *m); #define IFP2AC(IFP) ((struct arpcom *)IFP) @@ -356,14 +357,22 @@ bad: * the packet is in the mbuf chain m without * the fddi header, which is provided separately. */ -void -fddi_input(ifp, fh, m) +static void +fddi_input(ifp, m) struct ifnet *ifp; - struct fddi_header *fh; struct mbuf *m; { struct ifqueue *inq; struct llc *l; + struct fddi_header *fh; + + fh = mtod(m, struct fddi_header *); + + /* + * Update interface statistics. + */ + ifp->if_ibytes += m->m_pkthdr.len; + getmicrotime(&ifp->if_lastchange); /* * Discard packet if interface is not up. @@ -396,12 +405,6 @@ fddi_input(ifp, fh, m) ifp->if_imcasts++; } - /* - * Update interface statistics. - */ - getmicrotime(&ifp->if_lastchange); - ifp->if_ibytes += (m->m_pkthdr.len + FDDI_HDR_LEN); - #ifdef M_LINK0 /* * If this has a LLC priority of 0, then mark it so upper @@ -412,6 +415,9 @@ fddi_input(ifp, fh, m) m->m_flags |= M_LINK0; #endif + /* Strip off FDDI header. */ + m_adj(m, sizeof(struct fddi_header)); + m = m_pullup(m, sizeof(struct llc)); if (m == 0) { ifp->if_ierrors++; @@ -548,6 +554,7 @@ fddi_ifattach(ifp, bpf) ifp->if_mtu = FDDIMTU; ifp->if_output = fddi_output; + ifp->if_input = fddi_input; ifp->if_resolvemulti = fddi_resolvemulti; ifp->if_broadcastaddr = fddibroadcastaddr; ifp->if_baudrate = 100000000; |