Line data Source code
1 : #ifndef __LINUX_NET_AFUNIX_H
2 : #define __LINUX_NET_AFUNIX_H
3 :
4 : #include <linux/socket.h>
5 : #include <linux/un.h>
6 : #include <linux/mutex.h>
7 : #include <net/sock.h>
8 :
9 : extern void unix_inflight(struct file *fp);
10 : extern void unix_notinflight(struct file *fp);
11 : extern void unix_gc(void);
12 : extern void wait_for_unix_gc(void);
13 :
14 : #define UNIX_HASH_SIZE 256
15 :
16 1 : extern unsigned int unix_tot_inflight;
17 1 :
18 : struct unix_address {
19 : atomic_t refcnt;
20 : int len;
21 : unsigned hash;
22 : struct sockaddr_un name[0];
23 : };
24 2 :
25 : struct unix_skb_parms {
26 : struct ucred creds; /* Skb credentials */
27 : struct scm_fp_list *fp; /* Passed files */
28 : #ifdef CONFIG_SECURITY_NETWORK
29 1 : u32 secid; /* Security ID */
30 : #endif
31 : };
32 :
33 : #define UNIXCB(skb) (*(struct unix_skb_parms*)&((skb)->cb))
34 : #define UNIXCREDS(skb) (&UNIXCB((skb)).creds)
35 : #define UNIXSID(skb) (&UNIXCB((skb)).secid)
36 :
37 : #define unix_state_lock(s) spin_lock(&unix_sk(s)->lock)
38 : #define unix_state_unlock(s) spin_unlock(&unix_sk(s)->lock)
39 : #define unix_state_lock_nested(s) \
40 : spin_lock_nested(&unix_sk(s)->lock, \
41 : SINGLE_DEPTH_NESTING)
42 :
43 : #ifdef __KERNEL__
44 : /* The AF_UNIX socket */
45 : struct unix_sock {
46 : /* WARNING: sk has to be the first member */
47 : struct sock sk;
48 : struct unix_address *addr;
49 : struct dentry *dentry;
50 : struct vfsmount *mnt;
51 : struct mutex readlock;
52 : struct sock *peer;
53 : struct sock *other;
54 : struct list_head link;
55 : atomic_long_t inflight;
56 : spinlock_t lock;
57 : unsigned int gc_candidate : 1;
58 : unsigned int gc_maybe_cycle : 1;
59 : wait_queue_head_t peer_wait;
60 : };
61 : #define unix_sk(__sk) ((struct unix_sock *)__sk)
62 :
63 : #ifdef CONFIG_SYSCTL
64 : extern int unix_sysctl_register(struct net *net);
65 : extern void unix_sysctl_unregister(struct net *net);
66 : #else
67 : static inline int unix_sysctl_register(struct net *net) { return 0; }
68 : static inline void unix_sysctl_unregister(struct net *net) {}
69 : #endif
70 : #endif
71 : #endif
|