summaryrefslogtreecommitdiffstats
path: root/sys/net/bridge.c
diff options
context:
space:
mode:
authornsayer <nsayer@FreeBSD.org>2000-09-25 17:24:02 +0000
committernsayer <nsayer@FreeBSD.org>2000-09-25 17:24:02 +0000
commit72c8811083b11214841357c89840ddd617af521e (patch)
treed639ec0488a3068d57e5eb7ffeef2ae9c113f597 /sys/net/bridge.c
parent63438a4afe1d5d7fabd91bd0ed71e4f23223e788 (diff)
downloadFreeBSD-src-72c8811083b11214841357c89840ddd617af521e.zip
FreeBSD-src-72c8811083b11214841357c89840ddd617af521e.tar.gz
In theory, m_dup should not be necessary, as m_copypacket should be
sifficient. But somewhere (I believe in the UDP stuff), someone is overwriting an mbuf without calling m_pullup() first. This results in broad- and multi-cast traffic that is passed through the bridge getting corrupted. This should be backed out when there is some assurance that the upper layers (and I suppose all of the device drivers) are fixed. Suggested by: archie
Diffstat (limited to 'sys/net/bridge.c')
-rw-r--r--sys/net/bridge.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/net/bridge.c b/sys/net/bridge.c
index 106ddac..7116346 100644
--- a/sys/net/bridge.c
+++ b/sys/net/bridge.c
@@ -802,10 +802,10 @@ forward:
if (canfree && once ) { /* no need to copy */
m = *m0 ;
*m0 = NULL ; /* original is gone */
- } else /* on a P5-90, m_copypacket takes 540 ticks */
- m = m_copypacket(*m0, M_DONTWAIT);
+ } else
+ m = m_dup(*m0, M_DONTWAIT); /* XXX m_copypacket should work */
if (m == NULL) {
- printf("bdg_forward: sorry, m_copy failed!\n");
+ printf("bdg_forward: sorry, m_dup failed!\n");
return ENOBUFS ; /* the original is still there... */
}
/*
OpenPOWER on IntegriCloud