1*25202Skarels #define RCSINPCBHDR "$Header: in_pcb.h,v 1.7 85/07/31 09:31:17 walsh Exp $" 2*25202Skarels 3*25202Skarels /* 4*25202Skarels * Common structure pcb for internet protocol implementation. 5*25202Skarels * Here are stored pointers to local and foreign host table 6*25202Skarels * entries, local and foreign socket numbers, and pointers 7*25202Skarels * up (to a socket structure) and down (to a protocol-specific) 8*25202Skarels * control block. 9*25202Skarels */ 10*25202Skarels #define MAX_IPOPTLEN 60 11*25202Skarels 12*25202Skarels struct inpcb { 13*25202Skarels struct inpcb *inp_next,*inp_prev; 14*25202Skarels /* pointers to other pcb's */ 15*25202Skarels struct in_addr inp_faddr; /* foreign host table entry */ 16*25202Skarels struct in_addr inp_laddr; /* local host table entry */ 17*25202Skarels u_short inp_fport; /* foreign port */ 18*25202Skarels u_short inp_lport; /* local port */ 19*25202Skarels struct socket *inp_socket; /* back pointer to socket */ 20*25202Skarels caddr_t inp_ppcb; /* pointer to per-protocol pcb */ 21*25202Skarels struct route inp_route; /* routing entry */ 22*25202Skarels char inp_optlen; 23*25202Skarels char inp_options[MAX_IPOPTLEN]; 24*25202Skarels }; 25*25202Skarels 26*25202Skarels /* 27*25202Skarels * protocol specific structure passed to some pcb controlling routines. 28*25202Skarels * new in 4.3 because addition of new protocols required a more generalized 29*25202Skarels * in_pcbbind(). rootport <= resvport <= maxport. non-superuser can 30*25202Skarels * bind rootport -> maxport, but kernel will bind resvport -> maxport so 31*25202Skarels * that projects can test things without being root and without fearing 32*25202Skarels * someone may accidentally take their port. 33*25202Skarels */ 34*25202Skarels 35*25202Skarels struct pr_advice { 36*25202Skarels u_short rootport; /* ports reserved exclusively for root */ 37*25202Skarels u_short resvport; /* ports reserved from random allocation */ 38*25202Skarels u_short maxport; /* absolute max port */ 39*25202Skarels u_short nowport; /* port last used, initialize to resvport! */ 40*25202Skarels u_short portsize; /* size of port (in bytes) */ 41*25202Skarels int (*bind_used)(); /* routine called to check before binding */ 42*25202Skarels }; 43*25202Skarels 44*25202Skarels /* 45*25202Skarels * protocol specific setsockopt/getsockopt calls. 46*25202Skarels */ 47*25202Skarels #define SO_IPROUTE 2 48*25202Skarels 49*25202Skarels #define sotoinpcb(so) ((struct inpcb *)(so)->so_pcb) 50*25202Skarels 51*25202Skarels 52*25202Skarels #ifdef KERNEL 53*25202Skarels 54*25202Skarels extern struct inpcb *in_pcblookup(); 55*25202Skarels 56*25202Skarels #define uwake(inp) \ 57*25202Skarels { \ 58*25202Skarels sbwakeup(&inp->inp_socket->so_rcv); \ 59*25202Skarels sbwakeup(&inp->inp_socket->so_snd); \ 60*25202Skarels } 61*25202Skarels 62*25202Skarels #endif 63