1 /* 2 * Copyright (c) 1982, 1986, 1989 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 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 16 * 17 * @(#)unpcb.h 7.5 (Berkeley) 06/22/90 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 vnode in the 25 * file system. If so, the unp_vnode pointer holds 26 * a reference count to this vnode, 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 vnode *unp_vnode; /* 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