Skip to content
Snippets Groups Projects
af_unix.h 1.85 KiB
Newer Older
  • Learn to ignore specific revisions
  • Linus Torvalds's avatar
    Linus Torvalds committed
    #ifndef __LINUX_NET_AFUNIX_H
    #define __LINUX_NET_AFUNIX_H
    
    
    #include <linux/socket.h>
    #include <linux/un.h>
    
    Ingo Molnar's avatar
    Ingo Molnar committed
    #include <linux/mutex.h>
    
    #include <net/sock.h>
    
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    extern void unix_inflight(struct file *fp);
    extern void unix_notinflight(struct file *fp);
    extern void unix_gc(void);
    
    extern void wait_for_unix_gc(void);
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    #define UNIX_HASH_SIZE	256
    
    
    extern unsigned int unix_tot_inflight;
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    struct unix_address {
    	atomic_t	refcnt;
    	int		len;
    	unsigned	hash;
    	struct sockaddr_un name[0];
    };
    
    struct unix_skb_parms {
    	struct ucred		creds;		/* Skb credentials	*/
    	struct scm_fp_list	*fp;		/* Passed files		*/
    
    #ifdef CONFIG_SECURITY_NETWORK
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    };
    
    #define UNIXCB(skb) 	(*(struct unix_skb_parms*)&((skb)->cb))
    #define UNIXCREDS(skb)	(&UNIXCB((skb)).creds)
    
    #define UNIXSID(skb)	(&UNIXCB((skb)).secid)
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    
    #define unix_state_lock(s)	spin_lock(&unix_sk(s)->lock)
    #define unix_state_unlock(s)	spin_unlock(&unix_sk(s)->lock)
    #define unix_state_lock_nested(s) \
    
    				spin_lock_nested(&unix_sk(s)->lock, \
    				SINGLE_DEPTH_NESTING)
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    #ifdef __KERNEL__
    /* The AF_UNIX socket */
    struct unix_sock {
    	/* WARNING: sk has to be the first member */
    	struct sock		sk;
            struct unix_address     *addr;
            struct dentry		*dentry;
            struct vfsmount		*mnt;
    
    Ingo Molnar's avatar
    Ingo Molnar committed
    	struct mutex		readlock;
    
    Linus Torvalds's avatar
    Linus Torvalds committed
            struct sock		*peer;
            struct sock		*other;
    
    	struct list_head	link;
    
    Al Viro's avatar
    Al Viro committed
            atomic_long_t           inflight;
    
    	unsigned int		gc_candidate : 1;
    
    	unsigned int		gc_maybe_cycle : 1;
    
    Linus Torvalds's avatar
    Linus Torvalds committed
            wait_queue_head_t       peer_wait;
    };
    #define unix_sk(__sk) ((struct unix_sock *)__sk)
    
    
    #ifdef CONFIG_SYSCTL
    
    extern int unix_sysctl_register(struct net *net);
    extern void unix_sysctl_unregister(struct net *net);
    
    static inline int unix_sysctl_register(struct net *net) { return 0; }
    static inline void unix_sysctl_unregister(struct net *net) {}
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    #endif
    #endif