Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / include / net / af_unix.h
1 #ifndef __LINUX_NET_AFUNIX_H
2 #define __LINUX_NET_AFUNIX_H
3
4 #include <linux/config.h>
5 #include <linux/socket.h>
6 #include <linux/un.h>
7 #include <linux/mutex.h>
8 #include <net/sock.h>
9 #include <linux/vs_base.h>
10
11 extern void unix_inflight(struct file *fp);
12 extern void unix_notinflight(struct file *fp);
13 extern void unix_gc(void);
14
15 #define UNIX_HASH_SIZE  256
16
17 extern struct hlist_head unix_socket_table[UNIX_HASH_SIZE + 1];
18 extern spinlock_t unix_table_lock;
19
20 extern atomic_t unix_tot_inflight;
21
22 static inline struct sock *next_unix_socket_table(int *i)
23 {
24         for ((*i)++; *i <= UNIX_HASH_SIZE; (*i)++) {
25                 if (!hlist_empty(&unix_socket_table[*i]))
26                         return __sk_head(&unix_socket_table[*i]);
27         }
28         return NULL;
29 }
30
31 static inline struct sock *next_unix_socket(int *i, struct sock *s)
32 {
33         do {
34                 if (s)
35                         s = sk_next(s);
36                 if (!s)
37                         s = next_unix_socket_table(i);
38         } while (s && !vx_check(s->sk_xid, VX_IDENT|VX_WATCH));
39         return s;
40 }
41
42 static inline struct sock *first_unix_socket(int *i)
43 {
44         *i = 0;
45         return next_unix_socket(i, NULL);
46 }
47
48 #define forall_unix_sockets(i, s) \
49         for (s = first_unix_socket(&(i)); s; s = next_unix_socket(&(i),(s)))
50
51 struct unix_address {
52         atomic_t        refcnt;
53         int             len;
54         unsigned        hash;
55         struct sockaddr_un name[0];
56 };
57
58 struct unix_skb_parms {
59         struct ucred            creds;          /* Skb credentials      */
60         struct scm_fp_list      *fp;            /* Passed files         */
61 };
62
63 #define UNIXCB(skb)     (*(struct unix_skb_parms*)&((skb)->cb))
64 #define UNIXCREDS(skb)  (&UNIXCB((skb)).creds)
65
66 #define unix_state_rlock(s)     spin_lock(&unix_sk(s)->lock)
67 #define unix_state_runlock(s)   spin_unlock(&unix_sk(s)->lock)
68 #define unix_state_wlock(s)     spin_lock(&unix_sk(s)->lock)
69 #define unix_state_wunlock(s)   spin_unlock(&unix_sk(s)->lock)
70
71 #ifdef __KERNEL__
72 /* The AF_UNIX socket */
73 struct unix_sock {
74         /* WARNING: sk has to be the first member */
75         struct sock             sk;
76         struct unix_address     *addr;
77         struct dentry           *dentry;
78         struct vfsmount         *mnt;
79         struct mutex            readlock;
80         struct sock             *peer;
81         struct sock             *other;
82         struct sock             *gc_tree;
83         atomic_t                inflight;
84         spinlock_t              lock;
85         wait_queue_head_t       peer_wait;
86 };
87 #define unix_sk(__sk) ((struct unix_sock *)__sk)
88
89 #ifdef CONFIG_SYSCTL
90 extern int sysctl_unix_max_dgram_qlen;
91 extern void unix_sysctl_register(void);
92 extern void unix_sysctl_unregister(void);
93 #else
94 static inline void unix_sysctl_register(void) {}
95 static inline void unix_sysctl_unregister(void) {}
96 #endif
97 #endif
98 #endif