- struct mbuf *m;
-
- /*
- * Place interface pointer before the data
- * for the receiving protocol.
- */
- if (m0->m_off <= MMAXOFF &&
- m0->m_off >= MMINOFF + sizeof(struct ifnet *)) {
- m0->m_off -= sizeof(struct ifnet *);
- m0->m_len += sizeof(struct ifnet *);
- } else {
- MGET(m, M_DONTWAIT, MT_HEADER);
- if (m == (struct mbuf *)0)
- return (ENOBUFS);
- m->m_off = MMINOFF;
- m->m_len = sizeof(struct ifnet *);
- m->m_next = m0;
- m0 = m;
- }
- *(mtod(m0, struct ifnet **)) = ifp;
+
+ if ((m->m_flags & M_PKTHDR) == 0)
+ panic("looutput no HDR");
+ m->m_pkthdr.rcvif = ifp;
+
+{struct mbuf *mm; int mlen = 0;
+for (mm = m; m; m = m->m_next) /* XXX debugging code -- sklwoer */
+ mlen += m->m_len;
+m = mm;
+if (mlen != m->m_pkthdr.len) {
+ if (Loop_Sanity)
+ m_freem(Loop_Sanity);
+ Loop_Sanity = m_copy(m, 0, M_COPYALL);
+}
+}
+