Contributors: 20
Author |
Tokens |
Token Proportion |
Commits |
Commit Proportion |
Patrick McHardy |
43 |
13.11% |
6 |
14.63% |
Andrey Vagin |
40 |
12.20% |
2 |
4.88% |
Anjali Kulkarni |
34 |
10.37% |
2 |
4.88% |
Linus Torvalds (pre-git) |
32 |
9.76% |
5 |
12.20% |
Johannes Berg |
31 |
9.45% |
4 |
9.76% |
Eric Dumazet |
30 |
9.15% |
3 |
7.32% |
Herbert Xu |
25 |
7.62% |
3 |
7.32% |
Richard Guy Briggs |
22 |
6.71% |
1 |
2.44% |
Arnaldo Carvalho de Melo |
22 |
6.71% |
1 |
2.44% |
Thomas Graf |
12 |
3.66% |
2 |
4.88% |
Pablo Neira Ayuso |
9 |
2.74% |
3 |
7.32% |
Cheng Renquan |
6 |
1.83% |
1 |
2.44% |
Harald Welte |
6 |
1.83% |
1 |
2.44% |
Denis V. Lunev |
3 |
0.91% |
1 |
2.44% |
David S. Miller |
3 |
0.91% |
1 |
2.44% |
Pravin B Shelar |
3 |
0.91% |
1 |
2.44% |
Jason A. Donenfeld |
3 |
0.91% |
1 |
2.44% |
Eric W. Biedermann |
2 |
0.61% |
1 |
2.44% |
Greg Kroah-Hartman |
1 |
0.30% |
1 |
2.44% |
David Ahern |
1 |
0.30% |
1 |
2.44% |
Total |
328 |
|
41 |
|
/* 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 */
enum {
NETLINK_F_KERNEL_SOCKET,
NETLINK_F_RECV_PKTINFO,
NETLINK_F_BROADCAST_SEND_ERROR,
NETLINK_F_RECV_NO_ENOBUFS,
NETLINK_F_LISTEN_ALL_NSID,
NETLINK_F_CAP_ACK,
NETLINK_F_EXT_ACK,
NETLINK_F_STRICT_CHK,
};
#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;
unsigned long flags;
u32 portid;
u32 dst_portid;
u32 dst_group;
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);
void (*netlink_release)(struct sock *sk,
unsigned long *groups);
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);
}
#define nlk_test_bit(nr, sk) test_bit(NETLINK_F_##nr, &nlk_sk(sk)->flags)
struct netlink_table {
struct rhashtable hash;
struct hlist_head mc_list;
struct listeners __rcu *listeners;
unsigned int flags;
unsigned int groups;
struct mutex *cb_mutex;
struct module *module;
int (*bind)(struct net *net, int group);
void (*unbind)(struct net *net, int group);
void (*release)(struct sock *sk,
unsigned long *groups);
int registered;
};
extern struct netlink_table *nl_table;
extern rwlock_t nl_table_lock;
#endif