summaryrefslogtreecommitdiffstats
path: root/sys/net/if_fddisubr.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2002-11-15 00:00:15 +0000
committersam <sam@FreeBSD.org>2002-11-15 00:00:15 +0000
commit6a05792540ffa00713f4b3a1521864f7dddc1f39 (patch)
tree2a5611d45149f91e7ddfd0e32391f1ef7d8590e1 /sys/net/if_fddisubr.c
parent36661cddf10b1ee6cf5c6ca63413f6f860242c8e (diff)
downloadFreeBSD-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.c25
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;
OpenPOWER on IntegriCloud