summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gallatin <gallatin@FreeBSD.org>2000-05-26 13:47:02 +0000
committerAndrew Gallatin <gallatin@FreeBSD.org>2000-05-26 13:47:02 +0000
commitfe81f64ffc3a8148ab01fce878641ac899881d64 (patch)
treead8bace54dd3b9f7346c53506a2f2d78414b79bc
parentd02e84a626a249fb34e969ab12415b9ee5f74a70 (diff)
Notes
-rw-r--r--sys/net/if_loop.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/sys/net/if_loop.c b/sys/net/if_loop.c
index 5f6e91b30de0..741e09c65c47 100644
--- a/sys/net/if_loop.c
+++ b/sys/net/if_loop.c
@@ -242,17 +242,19 @@ if_simloop(ifp, m, af, hlen)
/* Strip away media header */
if (hlen > 0) {
+ m_adj(m, hlen);
#ifdef __alpha__
/* The alpha doesn't like unaligned data.
* We move data down in the first mbuf */
- if (hlen & 3) {
- bcopy(m->m_data + hlen, m->m_data, m->m_len - hlen);
- m->m_len -= hlen;
- if (m->m_flags & M_PKTHDR)
- m->m_pkthdr.len -= hlen;
- } else
+ if (mtod(m, vm_offset_t) & 3) {
+ KASSERT(hlen >= 3, "if_simloop: hlen too small");
+ bcopy(m->m_data,
+ (char *)(mtod(m, vm_offset_t)
+ - (mtod(m, vm_offset_t) & 3)),
+ m->m_len);
+ mtod(m,vm_offset_t) -= (mtod(m, vm_offset_t) & 3);
+ }
#endif
- m_adj(m, hlen);
}
/* Deliver to upper layer protocol */