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