linux/net/netlink/af_netlink.h
<<
>>
Prefs
   1#ifndef _AF_NETLINK_H
   2#define _AF_NETLINK_H
   3
   4#include <linux/rhashtable.h>
   5#include <linux/atomic.h>
   6#include <linux/workqueue.h>
   7#include <net/sock.h>
   8
   9#define NLGRPSZ(x)      (ALIGN(x, sizeof(unsigned long) * 8) / 8)
  10#define NLGRPLONGS(x)   (NLGRPSZ(x)/sizeof(unsigned long))
  11
  12struct netlink_sock {
  13        /* struct sock has to be the first member of netlink_sock */
  14        struct sock             sk;
  15        u32                     portid;
  16        u32                     dst_portid;
  17        u32                     dst_group;
  18        u32                     flags;
  19        u32                     subscriptions;
  20        u32                     ngroups;
  21        unsigned long           *groups;
  22        unsigned long           state;
  23        size_t                  max_recvmsg_len;
  24        wait_queue_head_t       wait;
  25        bool                    bound;
  26        bool                    cb_running;
  27        struct netlink_callback cb;
  28        struct mutex            *cb_mutex;
  29        struct mutex            cb_def_mutex;
  30        void                    (*netlink_rcv)(struct sk_buff *skb);
  31        int                     (*netlink_bind)(struct net *net, int group);
  32        void                    (*netlink_unbind)(struct net *net, int group);
  33        struct module           *module;
  34
  35        struct rhash_head       node;
  36        struct rcu_head         rcu;
  37        struct work_struct      work;
  38};
  39
  40static inline struct netlink_sock *nlk_sk(struct sock *sk)
  41{
  42        return container_of(sk, struct netlink_sock, sk);
  43}
  44
  45struct netlink_table {
  46        struct rhashtable       hash;
  47        struct hlist_head       mc_list;
  48        struct listeners __rcu  *listeners;
  49        unsigned int            flags;
  50        unsigned int            groups;
  51        struct mutex            *cb_mutex;
  52        struct module           *module;
  53        int                     (*bind)(struct net *net, int group);
  54        void                    (*unbind)(struct net *net, int group);
  55        bool                    (*compare)(struct net *net, struct sock *sock);
  56        int                     registered;
  57};
  58
  59extern struct netlink_table *nl_table;
  60extern rwlock_t nl_table_lock;
  61
  62#endif
  63