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 /* flags */ 10 #define NETLINK_F_KERNEL_SOCKET 0x1 11 #define NETLINK_F_RECV_PKTINFO 0x2 12 #define NETLINK_F_BROADCAST_SEND_ERROR 0x4 13 #define NETLINK_F_RECV_NO_ENOBUFS 0x8 14 #define NETLINK_F_LISTEN_ALL_NSID 0x10 15 #define NETLINK_F_CAP_ACK 0x20 16 #define NETLINK_F_EXT_ACK 0x40 17 18 #define NLGRPSZ(x) (ALIGN(x, sizeof(unsigned long) * 8) / 8) 19 #define NLGRPLONGS(x) (NLGRPSZ(x)/sizeof(unsigned long)) 20 21 struct netlink_sock { 22 /* struct sock has to be the first member of netlink_sock */ 23 struct sock sk; 24 u32 portid; 25 u32 dst_portid; 26 u32 dst_group; 27 u32 flags; 28 u32 subscriptions; 29 u32 ngroups; 30 unsigned long *groups; 31 unsigned long state; 32 size_t max_recvmsg_len; 33 wait_queue_head_t wait; 34 bool bound; 35 bool cb_running; 36 struct netlink_callback cb; 37 struct mutex *cb_mutex; 38 struct mutex cb_def_mutex; 39 void (*netlink_rcv)(struct sk_buff *skb); 40 int (*netlink_bind)(struct net *net, int group); 41 void (*netlink_unbind)(struct net *net, int group); 42 struct module *module; 43 44 struct rhash_head node; 45 struct rcu_head rcu; 46 struct work_struct work; 47 }; 48 49 static inline struct netlink_sock *nlk_sk(struct sock *sk) 50 { 51 return container_of(sk, struct netlink_sock, sk); 52 } 53 54 struct 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)(struct net *net, int group); 63 void (*unbind)(struct net *net, int group); 64 bool (*compare)(struct net *net, struct sock *sock); 65 int registered; 66 }; 67 68 extern struct netlink_table *nl_table; 69 extern rwlock_t nl_table_lock; 70 71 #endif 72