1 /*
2 * UNIX An implementation of the AF_UNIX network domain for the
3 * LINUX operating system. UNIX is implemented using the
4 * BSD Socket interface as the means of communication with
5 * the user level.
6 *
7 * This file descibes some things of the UNIX protocol family
8 * module. It is mainly used for the "proc" sub-module now,
9 * but it may be useful for cleaning up the UNIX module as a
10 * whole later.
11 *
12 * Version: @(#)unix.h 1.0.3 05/25/93
13 *
14 * Authors: Orest Zborowski, <obz@Kodak.COM>
15 * Ross Biro, <bir7@leland.Stanford.Edu>
16 * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
17 *
18 * Fixes:
19 * Dmitry Gorodchanin - proc locking
20 *
21 * This program is free software; you can redistribute it and/or
22 * modify it under the terms of the GNU General Public License
23 * as published by the Free Software Foundation; either version
24 * 2 of the License, or (at your option) any later version.
25 */
26
27
28 #ifdef _LINUX_UN_H
29
30
31 struct unix_proto_data {
32 int refcnt; /* cnt of reference 0=free */
33 /* -1=not initialised -bgm */
34 struct socket *socket; /* socket we're bound to */
35 int protocol;
36 struct sockaddr_un sockaddr_un;
37 short sockaddr_len; /* >0 if name bound */
38 char *buf;
39 int bp_head, bp_tail;
40 struct inode *inode;
41 struct unix_proto_data *peerupd;
42 struct wait_queue *wait; /* Lock across page faults (FvK) */
43 int lock_flag;
44 };
45
46 extern struct unix_proto_data unix_datas[NSOCKETS];
47
48
49 #define last_unix_data (unix_datas + NSOCKETS - 1)
50
51
52 #define UN_DATA(SOCK) ((struct unix_proto_data *)(SOCK)->data)
53 #define UN_PATH_OFFSET ((unsigned long)((struct sockaddr_un *)0) \
54 ->sun_path)
55
56 /*
57 * Buffer size must be power of 2. buffer mgmt inspired by pipe code.
58 * note that buffer contents can wraparound, and we can write one byte less
59 * than full size to discern full vs empty.
60 */
61 #define BUF_SIZE PAGE_SIZE
62 #define UN_BUF_AVAIL(UPD) (((UPD)->bp_head - (UPD)->bp_tail) & \
63 (BUF_SIZE-1))
64 #define UN_BUF_SPACE(UPD) ((BUF_SIZE-1) - UN_BUF_AVAIL(UPD))
65
66 #endif /* _LINUX_UN_H */
67
68
69 extern void unix_proto_init(struct net_proto *pro);