xref: /csrg-svn/sys/net/raw_usrreq.c (revision 5121)
1*5121Swnj /*	raw_usrreq.c	4.1	81/11/29	*/
2*5121Swnj 
3*5121Swnj #include "../h/param.h"
4*5121Swnj #include "../h/mbuf.h"
5*5121Swnj #include "../h/socket.h"
6*5121Swnj #include "../h/socketvar.h"
7*5121Swnj #include "../h/mtpr.h"
8*5121Swnj #include "../net/in.h"
9*5121Swnj #include "../net/in_systm.h"
10*5121Swnj #include "../net/if.h"
11*5121Swnj 
12*5121Swnj /*
13*5121Swnj  * Raw protocol interface.
14*5121Swnj  */
15*5121Swnj raw_input(m, pf, af)
16*5121Swnj 	struct mbuf *m;
17*5121Swnj 	struct sockproto pf;
18*5121Swnj 	struct sockaddr af;
19*5121Swnj {
20*5121Swnj 	struct mbuf *mh;
21*5121Swnj 	struct sockproto *pfp;
22*5121Swnj 	int s;
23*5121Swnj 
24*5121Swnj 	mh = m_get(0);
25*5121Swnj 	if (mh == 0)
26*5121Swnj 		goto drop;
27*5121Swnj 	mh->m_next = m;
28*5121Swnj 	mh->m_off = MMINOFF + sizeof (struct sockproto);
29*5121Swnj 	*mtod(m, struct sockaddr *) = af;
30*5121Swnj 	mh->m_off = MMINOFF;
31*5121Swnj 	*mtod(m, struct sockproto *) = pf;
32*5121Swnj 	mh->m_len = sizeof (struct sockproto) + sizeof (struct sockaddr);
33*5121Swnj 	s = splimp();
34*5121Swnj 	IF_ENQUEUE(&rawintrq, mh);
35*5121Swnj 	splx(s);
36*5121Swnj 	setrawintr();
37*5121Swnj 	return;
38*5121Swnj drop:
39*5121Swnj 	m_freem(m);
40*5121Swnj }
41*5121Swnj 
42*5121Swnj rawintr()
43*5121Swnj {
44*5121Swnj 	int s;
45*5121Swnj 	struct mbuf *m;
46*5121Swnj 
47*5121Swnj COUNT(RAWINTR);
48*5121Swnj next:
49*5121Swnj 	s = splimp();
50*5121Swnj /*###45 [cc] rawintrq undefined %%%*/
51*5121Swnj 	IF_DEQUEUE(&rawintrq, m);
52*5121Swnj 	splx(s);
53*5121Swnj 	if (m == 0)
54*5121Swnj 		return;
55*5121Swnj 	/* ... */
56*5121Swnj 	goto drop;
57*5121Swnj drop:
58*5121Swnj 	m_freem(m);
59*5121Swnj 	goto next;
60*5121Swnj }
61*5121Swnj 
62*5121Swnj /*ARGSUSED*/
63*5121Swnj raw_usrreq(so, req, m, addr)
64*5121Swnj 	struct socket *so;
65*5121Swnj 	int req;
66*5121Swnj 	struct mbuf *m;
67*5121Swnj 	caddr_t addr;
68*5121Swnj {
69*5121Swnj 
70*5121Swnj COUNT(RAW_USRREQ);
71*5121Swnj 
72*5121Swnj }
73