source: src/linux/universal/linux-3.18/net/netlink/af_netlink.h @ 31869

Last change on this file since 31869 was 31869, checked in by brainslayer, 3 months ago

update

File size: 1.6 KB
Line 
1#ifndef _AF_NETLINK_H
2#define _AF_NETLINK_H
3
4#include <linux/rhashtable.h>
5#include <net/sock.h>
6
7#define NLGRPSZ(x)      (ALIGN(x, sizeof(unsigned long) * 8) / 8)
8#define NLGRPLONGS(x)   (NLGRPSZ(x)/sizeof(unsigned long))
9
10struct netlink_ring {
11        void                    **pg_vec;
12        unsigned int            head;
13        unsigned int            frames_per_block;
14        unsigned int            frame_size;
15        unsigned int            frame_max;
16
17        unsigned int            pg_vec_order;
18        unsigned int            pg_vec_pages;
19        unsigned int            pg_vec_len;
20
21        atomic_t                pending;
22};
23
24struct netlink_sock {
25        /* struct sock has to be the first member of netlink_sock */
26        struct sock             sk;
27        u32                     portid;
28        u32                     dst_portid;
29        u32                     dst_group;
30        u32                     flags;
31        u32                     subscriptions;
32        u32                     ngroups;
33        unsigned long           *groups;
34        unsigned long           state;
35        size_t                  max_recvmsg_len;
36        wait_queue_head_t       wait;
37        bool                    cb_running;
38        struct netlink_callback cb;
39        struct mutex            *cb_mutex;
40        struct mutex            cb_def_mutex;
41        void                    (*netlink_rcv)(struct sk_buff *skb);
42        int                     (*netlink_bind)(int group);
43        void                    (*netlink_unbind)(int group);
44        struct module           *module;
45
46        struct rhash_head       node;
47};
48
49static inline struct netlink_sock *nlk_sk(struct sock *sk)
50{
51        return container_of(sk, struct netlink_sock, sk);
52}
53
54struct netlink_table {
55        struct rhashtable       hash;
56        struct hlist_head       mc_list;
57        struct listeners __rcu  *listeners;
58        unsigned int            flags;
59        unsigned int            groups;
60        struct mutex            *cb_mutex;
61        struct module           *module;
62        int                     (*bind)(int group);
63        void                    (*unbind)(int group);
64        bool                    (*compare)(struct net *net, struct sock *sock);
65        int                     registered;
66};
67
68extern struct netlink_table *nl_table;
69extern rwlock_t nl_table_lock;
70extern struct mutex nl_sk_hash_lock;
71
72#endif
Note: See TracBrowser for help on using the repository browser.