-/*
- * Raw protocol interface.
- */
-raw_input(m0, pf, daf, saf)
- struct mbuf *m0;
- struct sockproto *pf;
- struct sockaddr *daf, *saf;
-{
- register struct mbuf *m;
- struct raw_header *rh;
- int s;
-
-COUNT(RAW_INPUT);
- /*
- * Rip off an mbuf for a generic header.
- */
- m = m_get(M_DONTWAIT);
- if (m == 0) {
- m_freem(m0);
- return;
- }
- m->m_next = m0;
- m->m_off = MMINOFF;
- m->m_len = sizeof(struct raw_header);
- rh = mtod(m, struct raw_header *);
- rh->raw_dst = *daf;
- rh->raw_src = *saf;
- rh->raw_protocol = *pf;
-
- /*
- * Header now contains enough info to decide
- * which socket to place packet in (if any).
- * Queue it up for the raw protocol process
- * running at software interrupt level.
- */
- s = splimp();
- IF_ENQUEUE(&rawintrq, m);
- splx(s);
- setrawintr();
-}