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