Date: Sat, 11 Jul 1998 19:40:01 -0700 (PDT) From: Bill Fenner <fenner@FreeBSD.ORG> To: freebsd-bugs@FreeBSD.ORG Subject: Re: bin/7241: tcpdump does not work with parallel line IP Message-ID: <199807120240.TAA14593@freefall.freebsd.org>
index | next in thread | raw e-mail
The following reply was made to PR bin/7241; it has been noted by GNATS.
From: Bill Fenner <fenner@FreeBSD.ORG>
To: freebsd-gnats-submit@FreeBSD.org, peter.jeremy@alcatel.com.au
Cc: Subject: Re: bin/7241: tcpdump does not work with parallel line IP
Date: Sat, 11 Jul 1998 16:31:38 -0700 (PDT)
In fact, I just found these diffs in my home directory on freefall; seems
that I tried to address this issue in early 1997 but didn't find anyone
to test the patches. Would you mind testing this patch?
Thanks,
Bill
Index: sys_i386_isa/lpt.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/isa/lpt.c,v
retrieving revision 1.58
diff -c -r1.58 lpt.c
*** lpt.c 1997/02/22 09:36:51 1.58
--- lpt.c 1997/03/10 07:59:44
***************
*** 880,886 ****
printf("lp%d: TCP/IP capable interface\n", unit);
#if NBPFILTER > 0
! bpfattach(ifp, DLT_NULL, LPIPHDRLEN);
#endif
}
/*
--- 880,886 ----
printf("lp%d: TCP/IP capable interface\n", unit);
#if NBPFILTER > 0
! bpfattach(ifp, DLT_NULL, sizeof(u_int));
#endif
}
/*
***************
*** 1102,1107 ****
--- 1102,1126 ----
sc->sc_if.if_ibytes += len;
top = m_devget(sc->sc_ifbuf + CLPIPHDRLEN, len, 0, &sc->sc_if, 0);
if (top) {
+ #if NBPFILTER > 0
+ if (sc->sc_if.if_bpf) {
+ /*
+ * We need to prepend the address family as
+ * a four byte field. Cons up a dummy header
+ * to pacify bpf. This is safe because bpf
+ * will only read from the mbuf (i.e., it won't
+ * try to free it or keep a pointer to it).
+ */
+ struct mbuf m0;
+ u_int af = AF_INET;
+
+ m0.m_next = top;
+ m0.m_len = 4;
+ m0.m_data = (char *)⁡
+
+ bpf_mtap(ifp, &m0);
+ }
+ #endif
IF_ENQUEUE(&ipintrq, top);
schednetisr(NETISR_IP);
}
***************
*** 1146,1161 ****
IF_DROP(&ipintrq);
goto done;
}
- #if NBPFILTER > 0
- if (sc->sc_if.if_bpf) {
- bpf_tap(&sc->sc_if, sc->sc_ifbuf, len);
- }
- #endif
len -= LPIPHDRLEN;
sc->sc_if.if_ipackets++;
sc->sc_if.if_ibytes += len;
top = m_devget(sc->sc_ifbuf + LPIPHDRLEN, len, 0, &sc->sc_if, 0);
if (top) {
IF_ENQUEUE(&ipintrq, top);
schednetisr(NETISR_IP);
}
--- 1165,1194 ----
IF_DROP(&ipintrq);
goto done;
}
len -= LPIPHDRLEN;
sc->sc_if.if_ipackets++;
sc->sc_if.if_ibytes += len;
top = m_devget(sc->sc_ifbuf + LPIPHDRLEN, len, 0, &sc->sc_if, 0);
if (top) {
+ #if NBPFILTER > 0
+ if (sc->sc_if.if_bpf) {
+ /*
+ * We need to prepend the address family as
+ * a four byte field. Cons up a dummy header
+ * to pacify bpf. This is safe because bpf
+ * will only read from the mbuf (i.e., it won't
+ * try to free it or keep a pointer to it).
+ */
+ struct mbuf m0;
+ u_int af = AF_INET;
+
+ m0.m_next = top;
+ m0.m_len = 4;
+ m0.m_data = (char *)⁡
+
+ bpf_mtap(ifp, &m0);
+ }
+ #endif
IF_ENQUEUE(&ipintrq, top);
schednetisr(NETISR_IP);
}
***************
*** 1225,1230 ****
--- 1258,1283 ----
/* Suspend (on laptops) or receive-errors might have taken us offline */
outb(lpt_ctrl_port, LPC_ENA);
+ #if NBPFILTER > 0
+ if (ifp->if_bpf) {
+ /*
+ * We need to prepend the address family as
+ * a four byte field. Cons up a dummy header
+ * to pacify bpf. This is safe because bpf
+ * will only read from the mbuf (i.e., it won't
+ * try to free it or keep a pointer to it).
+ */
+ struct mbuf m0;
+ u_int af = AF_INET;
+
+ m0.m_next = m;
+ m0.m_len = 4;
+ m0.m_data = (char *)⁡
+
+ bpf_mtap(ifp, &m0);
+ }
+ #endif
+
if (ifp->if_flags & IFF_LINK0) {
if (!(inb(lpt_stat_port) & CLPIP_SHAKE)) {
***************
*** 1334,1358 ****
} else {
ifp->if_opackets++;
ifp->if_obytes += m->m_pkthdr.len;
- #if NBPFILTER > 0
- if (ifp->if_bpf) {
- /*
- * We need to prepend the packet type as
- * a two byte field. Cons up a dummy header
- * to pacify bpf. This is safe because bpf
- * will only read from the mbuf (i.e., it won't
- * try to free it or keep a pointer to it).
- */
- struct mbuf m0;
- u_short hdr = 0x800;
-
- m0.m_next = m;
- m0.m_len = 2;
- m0.m_data = (char *)&hdr;
-
- bpf_mtap(ifp, &m0);
- }
- #endif
}
m_freem(m);
--- 1387,1392 ----
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199807120240.TAA14593>
