Date: Tue, 6 Oct 1998 17:18:35 +0100 (MET) From: Luigi Rizzo <luigi@labinfo.iet.unipi.it> To: wpaul@skynet.ctr.columbia.edu (Bill Paul) Cc: hackers@FreeBSD.ORG, freebsd-hardware@FreeBSD.ORG Subject: Re: 2nd call for testers for RealTek 8139 driver Message-ID: <199810061618.RAA06850@labinfo.iet.unipi.it> In-Reply-To: <199809292311.TAA12549@skynet.ctr.columbia.edu> from "Bill Paul" at Sep 29, 98 07:11:31 pm
next in thread | previous in thread | raw e-mail | index | archive | help
> This is another call for testers for the RealTek 8139 fast ethernet
> driver. So far I have only gotten one (1) response to my first call
...
ok, adapting the driver to do bridging was not that hard but now i seem
unable to deal with pkts larger than a few bytes (an mbuf i think):
ping -s 80 does not seem to go through, whereas regular pings work.
I am not sure what is the problem and now it is too late to investigate
more. In any case my diffs are as follows, in case they suggest
something.
cheers
luigi
--- if_rl.c.orig Tue Oct 6 17:29:40 1998
+++ if_rl.c Tue Oct 6 18:09:03 1998
@@ -121,6 +121,10 @@
#include <net/bpf.h>
#endif
+#ifdef BRIDGE
+#include <net/bridge.h>
+#endif
+
#include <vm/vm.h> /* for vtophys */
#include <vm/pmap.h> /* for vtophys */
#include <machine/clock.h> /* for DELAY */
@@ -1407,6 +1411,9 @@
eh = mtod(m, struct ether_header *);
ifp->if_ipackets++;
+ m->m_pkthdr.len = m->m_len = total_len;
+ m->m_pkthdr.rcvif = ifp; /* XXX */
+
#if NBPFILTER > 0
/*
* Handle BPF listeners. Let the BPF user see the packet, but
@@ -1414,18 +1421,36 @@
* a broadcast packet, multicast packet, matches our ethernet
* address or the interface is in promiscuous mode.
*/
- if (ifp->if_bpf) {
- m->m_pkthdr.len = m->m_len = total_len;
+ if (ifp->if_bpf)
bpf_mtap(ifp, m);
+#endif
+#ifdef BRIDGE
+ if (do_bridge) {
+ struct ifnet *bdg_ifp ;
+ bdg_ifp = bridge_in(m);
+ if (bdg_ifp == BDG_DROP)
+ goto dropit;
+ else {
+ if (bdg_ifp != BDG_LOCAL)
+ bdg_forward(&m, bdg_ifp);
+ if (!m)
+ goto dropit ;
+ if (bdg_ifp == BDG_LOCAL || bdg_ifp == BDG_BCAST ||
+ bdg_ifp == BDG_MCAST)
+ goto getit ;
+ else if (m)
+ goto dropit ;
+ }
+ } else
+#endif
if (ifp->if_flags & IFF_PROMISC &&
(bcmp(eh->ether_dhost, sc->arpcom.ac_enaddr,
- ETHER_ADDR_LEN) &&
- (eh->ether_dhost[0] & 1) == 0)) {
+ ETHER_ADDR_LEN) && (eh->ether_dhost[0] & 1) == 0)) {
+dropit:
m_freem(m);
continue;
}
- }
-#endif
+getit:
/* Remove header from mbuf and pass it on. */
m_adj(m, sizeof(struct ether_header));
ether_input(ifp, eh, m);
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810061618.RAA06850>
