xref: /original-bsd/sys/sys/unpcb.h (revision f1324ba5)
1 /*
2  * Copyright (c) 1982, 1986 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  *	@(#)unpcb.h	7.3 (Berkeley) 06/27/88
18  */
19 
20 /*
21  * Protocol control block for an active
22  * instance of a UNIX internal protocol.
23  *
24  * A socket may be associated with an inode in the
25  * file system.  If so, the unp_inode pointer holds
26  * a reference count to this inode, which should be irele'd
27  * when the socket goes away.
28  *
29  * A socket may be connected to another socket, in which
30  * case the control block of the socket to which it is connected
31  * is given by unp_conn.
32  *
33  * A socket may be referenced by a number of sockets (e.g. several
34  * sockets may be connected to a datagram socket.)  These sockets
35  * are in a linked list starting with unp_refs, linked through
36  * unp_nextref and null-terminated.  Note that a socket may be referenced
37  * by a number of other sockets and may also reference a socket (not
38  * necessarily one which is referencing it).  This generates
39  * the need for unp_refs and unp_nextref to be separate fields.
40  *
41  * Stream sockets keep copies of receive sockbuf sb_cc and sb_mbcnt
42  * so that changes in the sockbuf may be computed to modify
43  * back pressure on the sender accordingly.
44  */
45 struct	unpcb {
46 	struct	socket *unp_socket;	/* pointer back to socket */
47 	struct	inode *unp_inode;	/* if associated with file */
48 	ino_t	unp_ino;		/* fake inode number */
49 	struct	unpcb *unp_conn;	/* control block of connected socket */
50 	struct	unpcb *unp_refs;	/* referencing socket linked list */
51 	struct 	unpcb *unp_nextref;	/* link in unp_refs list */
52 	struct	mbuf *unp_addr;		/* bound address of socket */
53 	int	unp_cc;			/* copy of rcv.sb_cc */
54 	int	unp_mbcnt;		/* copy of rcv.sb_mbcnt */
55 };
56 
57 #define	sotounpcb(so)	((struct unpcb *)((so)->so_pcb))
58