]> git.karo-electronics.de Git - karo-tx-linux.git/blob - net/netlink/af_netlink.h
Merge remote-tracking branch 'usb/usb-next'
[karo-tx-linux.git] / net / netlink / af_netlink.h
1 #ifndef _AF_NETLINK_H
2 #define _AF_NETLINK_H
3
4 #include <net/sock.h>
5
6 #define NLGRPSZ(x)      (ALIGN(x, sizeof(unsigned long) * 8) / 8)
7 #define NLGRPLONGS(x)   (NLGRPSZ(x)/sizeof(unsigned long))
8
9 struct netlink_sock {
10         /* struct sock has to be the first member of netlink_sock */
11         struct sock             sk;
12         u32                     portid;
13         u32                     dst_portid;
14         u32                     dst_group;
15         u32                     flags;
16         u32                     subscriptions;
17         u32                     ngroups;
18         unsigned long           *groups;
19         unsigned long           state;
20         wait_queue_head_t       wait;
21         struct netlink_callback *cb;
22         struct mutex            *cb_mutex;
23         struct mutex            cb_def_mutex;
24         void                    (*netlink_rcv)(struct sk_buff *skb);
25         void                    (*netlink_bind)(int group);
26         struct module           *module;
27 };
28
29 static inline struct netlink_sock *nlk_sk(struct sock *sk)
30 {
31         return container_of(sk, struct netlink_sock, sk);
32 }
33
34 struct nl_portid_hash {
35         struct hlist_head       *table;
36         unsigned long           rehash_time;
37
38         unsigned int            mask;
39         unsigned int            shift;
40
41         unsigned int            entries;
42         unsigned int            max_shift;
43
44         u32                     rnd;
45 };
46
47 struct netlink_table {
48         struct nl_portid_hash   hash;
49         struct hlist_head       mc_list;
50         struct listeners __rcu  *listeners;
51         unsigned int            flags;
52         unsigned int            groups;
53         struct mutex            *cb_mutex;
54         struct module           *module;
55         void                    (*bind)(int group);
56         int                     registered;
57 };
58
59 extern struct netlink_table *nl_table;
60 extern rwlock_t nl_table_lock;
61
62 #endif