Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : #ifndef _AF_NETLINK_H 3 : : #define _AF_NETLINK_H 4 : : 5 : : #include <linux/rhashtable.h> 6 : : #include <linux/atomic.h> 7 : : #include <linux/workqueue.h> 8 : : #include <net/sock.h> 9 : : 10 : : /* flags */ 11 : : #define NETLINK_F_KERNEL_SOCKET 0x1 12 : : #define NETLINK_F_RECV_PKTINFO 0x2 13 : : #define NETLINK_F_BROADCAST_SEND_ERROR 0x4 14 : : #define NETLINK_F_RECV_NO_ENOBUFS 0x8 15 : : #define NETLINK_F_LISTEN_ALL_NSID 0x10 16 : : #define NETLINK_F_CAP_ACK 0x20 17 : : #define NETLINK_F_EXT_ACK 0x40 18 : : #define NETLINK_F_STRICT_CHK 0x80 19 : : 20 : : #define NLGRPSZ(x) (ALIGN(x, sizeof(unsigned long) * 8) / 8) 21 : : #define NLGRPLONGS(x) (NLGRPSZ(x)/sizeof(unsigned long)) 22 : : 23 : : struct netlink_sock { 24 : : /* struct sock has to be the first member of netlink_sock */ 25 : : struct sock sk; 26 : : u32 portid; 27 : : u32 dst_portid; 28 : : u32 dst_group; 29 : : u32 flags; 30 : : u32 subscriptions; 31 : : u32 ngroups; 32 : : unsigned long *groups; 33 : : unsigned long state; 34 : : size_t max_recvmsg_len; 35 : : wait_queue_head_t wait; 36 : : bool bound; 37 : : bool cb_running; 38 : : int dump_done_errno; 39 : : struct netlink_callback cb; 40 : : struct mutex *cb_mutex; 41 : : struct mutex cb_def_mutex; 42 : : void (*netlink_rcv)(struct sk_buff *skb); 43 : : int (*netlink_bind)(struct net *net, int group); 44 : : void (*netlink_unbind)(struct net *net, int group); 45 : : struct module *module; 46 : : 47 : : struct rhash_head node; 48 : : struct rcu_head rcu; 49 : : struct work_struct work; 50 : : }; 51 : : 52 : 143066 : static inline struct netlink_sock *nlk_sk(struct sock *sk) 53 : : { 54 [ + + - + : 136158 : return container_of(sk, struct netlink_sock, sk); + - + - + - + - - - + - - + + + + - + - + - - - - + - - - + - - + - - - - + - + - + + + - + + + - + + - - + - + + + - - ] 55 : : } 56 : : 57 : : struct netlink_table { 58 : : struct rhashtable hash; 59 : : struct hlist_head mc_list; 60 : : struct listeners __rcu *listeners; 61 : : unsigned int flags; 62 : : unsigned int groups; 63 : : struct mutex *cb_mutex; 64 : : struct module *module; 65 : : int (*bind)(struct net *net, int group); 66 : : void (*unbind)(struct net *net, int group); 67 : : bool (*compare)(struct net *net, struct sock *sock); 68 : : int registered; 69 : : }; 70 : : 71 : : extern struct netlink_table *nl_table; 72 : : extern rwlock_t nl_table_lock; 73 : : 74 : : #endif