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