/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _AF_NETLINK_H #define _AF_NETLINK_H #include <linux/rhashtable.h> #include <linux/atomic.h> #include <linux/workqueue.h> #include <net/sock.h> /* flags */ #define NETLINK_F_KERNEL_SOCKET 0x1 #define NETLINK_F_RECV_PKTINFO 0x2 #define NETLINK_F_BROADCAST_SEND_ERROR 0x4 #define NETLINK_F_RECV_NO_ENOBUFS 0x8 #define NETLINK_F_LISTEN_ALL_NSID 0x10 #define NETLINK_F_CAP_ACK 0x20 #define NETLINK_F_EXT_ACK 0x40 #define NLGRPSZ(x) (ALIGN(x, sizeof(unsigned long) * 8) / 8) #define NLGRPLONGS(x) (NLGRPSZ(x)/sizeof(unsigned long)) struct netlink_sock { /* struct sock has to be the first member of netlink_sock */ struct sock sk; u32 portid; u32 dst_portid; u32 dst_group; u32 flags; u32 subscriptions; u32 ngroups; unsigned long *groups; unsigned long state; size_t max_recvmsg_len; wait_queue_head_t wait; bool bound; bool cb_running; int dump_done_errno; struct netlink_callback cb; struct mutex *cb_mutex; struct mutex cb_def_mutex; void (*netlink_rcv)(struct sk_buff *skb); int (*netlink_bind)(struct net *net, int group); void (*netlink_unbind)(struct net *net, int group); struct module *module; struct rhash_head node; struct rcu_head rcu; struct work_struct work; };
static inline struct netlink_sock *nlk_sk(struct sock *sk) { return container_of(sk, struct netlink_sock, sk); }Contributors
Person | Tokens | Prop | Commits | CommitProp |
Andrey Vagin | 25 | 100.00% | 1 | 100.00% |
Total | 25 | 100.00% | 1 | 100.00% |
Person | Tokens | Prop | Commits | CommitProp |
Andrey Vagin | 212 | 68.39% | 2 | 13.33% |
Johannes Berg | 27 | 8.71% | 3 | 20.00% |
Richard Guy Briggs | 22 | 7.10% | 1 | 6.67% |
Gao Feng | 17 | 5.48% | 1 | 6.67% |
Thomas Graf | 12 | 3.87% | 2 | 13.33% |
Herbert Xu | 10 | 3.23% | 2 | 13.33% |
Pravin B Shelar | 3 | 0.97% | 1 | 6.67% |
Jason A. Donenfeld | 3 | 0.97% | 1 | 6.67% |
Eric Dumazet | 3 | 0.97% | 1 | 6.67% |
Greg Kroah-Hartman | 1 | 0.32% | 1 | 6.67% |
Total | 310 | 100.00% | 15 | 100.00% |