home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / net / af_unix.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.4 KB  |  94 lines

  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.  
  13. #define UNIX_HASH_SIZE    256
  14.  
  15. extern struct hlist_head unix_socket_table[UNIX_HASH_SIZE + 1];
  16. extern spinlock_t unix_table_lock;
  17.  
  18. extern atomic_t unix_tot_inflight;
  19.  
  20. static inline struct sock *first_unix_socket(int *i)
  21. {
  22.     for (*i = 0; *i <= UNIX_HASH_SIZE; (*i)++) {
  23.         if (!hlist_empty(&unix_socket_table[*i]))
  24.             return __sk_head(&unix_socket_table[*i]);
  25.     }
  26.     return NULL;
  27. }
  28.  
  29. static inline struct sock *next_unix_socket(int *i, struct sock *s)
  30. {
  31.     struct sock *next = sk_next(s);
  32.     /* More in this chain? */
  33.     if (next)
  34.         return next;
  35.     /* Look for next non-empty chain. */
  36.     for ((*i)++; *i <= UNIX_HASH_SIZE; (*i)++) {
  37.         if (!hlist_empty(&unix_socket_table[*i]))
  38.             return __sk_head(&unix_socket_table[*i]);
  39.     }
  40.     return NULL;
  41. }
  42.  
  43. #define forall_unix_sockets(i, s) \
  44.     for (s = first_unix_socket(&(i)); s; s = next_unix_socket(&(i),(s)))
  45.  
  46. struct unix_address {
  47.     atomic_t    refcnt;
  48.     int        len;
  49.     unsigned    hash;
  50.     struct sockaddr_un name[0];
  51. };
  52.  
  53. struct unix_skb_parms {
  54.     struct ucred        creds;        /* Skb credentials    */
  55.     struct scm_fp_list    *fp;        /* Passed files        */
  56. };
  57.  
  58. #define UNIXCB(skb)     (*(struct unix_skb_parms*)&((skb)->cb))
  59. #define UNIXCREDS(skb)    (&UNIXCB((skb)).creds)
  60.  
  61. #define unix_state_rlock(s)    spin_lock(&unix_sk(s)->lock)
  62. #define unix_state_runlock(s)    spin_unlock(&unix_sk(s)->lock)
  63. #define unix_state_wlock(s)    spin_lock(&unix_sk(s)->lock)
  64. #define unix_state_wunlock(s)    spin_unlock(&unix_sk(s)->lock)
  65.  
  66. #ifdef __KERNEL__
  67. /* The AF_UNIX socket */
  68. struct unix_sock {
  69.     /* WARNING: sk has to be the first member */
  70.     struct sock        sk;
  71.         struct unix_address     *addr;
  72.         struct dentry        *dentry;
  73.         struct vfsmount        *mnt;
  74.     struct mutex        readlock;
  75.         struct sock        *peer;
  76.         struct sock        *other;
  77.         struct sock        *gc_tree;
  78.         atomic_t                inflight;
  79.         spinlock_t        lock;
  80.         wait_queue_head_t       peer_wait;
  81. };
  82. #define unix_sk(__sk) ((struct unix_sock *)__sk)
  83.  
  84. #ifdef CONFIG_SYSCTL
  85. extern int sysctl_unix_max_dgram_qlen;
  86. extern void unix_sysctl_register(void);
  87. extern void unix_sysctl_unregister(void);
  88. #else
  89. static inline void unix_sysctl_register(void) {}
  90. static inline void unix_sysctl_unregister(void) {}
  91. #endif
  92. #endif
  93. #endif
  94.