+ 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;
+ s = splimp();