summaryrefslogtreecommitdiff
path: root/net/core/netevent.c
blob: 5bb615e963cc974645e811308f6cf00a4ff94411 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 *	Network event notifiers
 *
 *	Authors:
 *      Tom Tucker             <tom@opengridcomputing.com>
 *      Steve Wise             <swise@opengridcomputing.com>
 *
 *	Fixes:
 */

#include <linux/rtnetlink.h>
#include <linux/notifier.h>
#include <linux/export.h>
#include <net/netevent.h>

static ATOMIC_NOTIFIER_HEAD(netevent_notif_chain);

/**
 *	register_netevent_notifier - register a netevent notifier block
 *	@nb: notifier
 *
 *	Register a notifier to be called when a netevent occurs.
 *	The notifier passed is linked into the kernel structures and must
 *	not be reused until it has been unregistered. A negative errno code
 *	is returned on a failure.
 */
int register_netevent_notifier(struct notifier_block *nb)
{
	return atomic_notifier_chain_register(&netevent_notif_chain, nb);
}
EXPORT_SYMBOL_GPL(register_netevent_notifier);

/**
 *	unregister_netevent_notifier - unregister a netevent notifier block
 *	@nb: notifier
 *
 *	Unregister a notifier previously registered by
 *	register_neigh_notifier(). The notifier is unlinked into the
 *	kernel structures and may then be reused. A negative errno code
 *	is returned on a failure.
 */

int unregister_netevent_notifier(struct notifier_block *nb)
{
	return atomic_notifier_chain_unregister(&netevent_notif_chain, nb);
}
EXPORT_SYMBOL_GPL(unregister_netevent_notifier);

/**
 *	call_netevent_notifiers - call all netevent notifier blocks
 *      @val: value passed unmodified to notifier function
 *      @v:   pointer passed unmodified to notifier function
 *
 *	Call all neighbour notifier blocks.  Parameters and return value
 *	are as for notifier_call_chain().
 */

int call_netevent_notifiers(unsigned long val, void *v)
{
	return atomic_notifier_call_chain(&netevent_notif_chain, val, v);
}
EXPORT_SYMBOL_GPL(call_netevent_notifiers);
endmsg(MSG_SPLICE_PAGES)David Howells 2023-06-24rds: Use sendmsg(MSG_SPLICE_PAGES) rather than sendpageDavid Howells 2023-02-13rds: rds_rm_zerocopy_callback() correct order for list_add_tail()Pietro Borrello 2023-02-09Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/netJakub Kicinski 2023-02-09rds: rds_rm_zerocopy_callback() use list_first_entry()Pietro Borrello 2023-01-27net: add missing includes of linux/sched/clock.hJakub Kicinski 2023-01-23net/sock: Introduce trace_sk_data_ready()Peilin Ye 2022-11-04rds: remove redundant variable total_payload_lenColin Ian King 2022-10-26net/rds: remove variable total_copiedColin Ian King 2022-10-24net: add a refcount tracker for kernel socketsEric Dumazet 2022-10-11treewide: use get_random_{u8,u16}() when possible, part 2Jason A. Donenfeld 2022-10-03Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/netJakub Kicinski 2022-10-03net: rds: don't hold sock lock when cancelling work from rds_tcp_reset_callba...Tetsuo Handa 2022-09-19net: rds: add missing __init/__exit annotations to module init/exit funcsXiu Jianfeng 2022-08-31net/rds: Pass a pointer to virt_to_page()Linus Walleij 2022-08-12rds: add missing barrier to release_refillMikulas Patocka 2022-08-08iov_iter: advancing variants of iov_iter_get_pages{,_alloc}()Al Viro 2022-08-01net/rds: Use PTR_ERR instead of IS_ERR for rdsdebug()Li Qiong 2022-05-24Merge tag 'v5.18' into rdma.git for-nextJason Gunthorpe 2022-05-05net: rds: use maybe_get_net() when acquiring refcount on TCP socketsTetsuo Handa 2022-05-03net: rds: acquire refcount on TCP socketsTetsuo Handa 2022-04-06RDMA: Split kernel-only global device caps from uverbs device capsJason Gunthorpe 2021-12-16Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/netJakub Kicinski