xref: /csrg-svn/sys/deprecated/bbnnet/in_pcb.h (revision 25202)
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