1 | // SPDX-License-Identifier: GPL-2.0-or-later |
---|---|
2 | /* |
3 | * Network event notifiers |
4 | * |
5 | * Authors: |
6 | * Tom Tucker <tom@opengridcomputing.com> |
7 | * Steve Wise <swise@opengridcomputing.com> |
8 | * |
9 | * Fixes: |
10 | */ |
11 | |
12 | #include <linux/rtnetlink.h> |
13 | #include <linux/notifier.h> |
14 | #include <linux/export.h> |
15 | #include <net/netevent.h> |
16 | |
17 | static ATOMIC_NOTIFIER_HEAD(netevent_notif_chain); |
18 | |
19 | /** |
20 | * register_netevent_notifier - register a netevent notifier block |
21 | * @nb: notifier |
22 | * |
23 | * Register a notifier to be called when a netevent occurs. |
24 | * The notifier passed is linked into the kernel structures and must |
25 | * not be reused until it has been unregistered. A negative errno code |
26 | * is returned on a failure. |
27 | */ |
28 | int register_netevent_notifier(struct notifier_block *nb) |
29 | { |
30 | return atomic_notifier_chain_register(nh: &netevent_notif_chain, nb); |
31 | } |
32 | EXPORT_SYMBOL_GPL(register_netevent_notifier); |
33 | |
34 | /** |
35 | * unregister_netevent_notifier - unregister a netevent notifier block |
36 | * @nb: notifier |
37 | * |
38 | * Unregister a notifier previously registered by |
39 | * register_neigh_notifier(). The notifier is unlinked into the |
40 | * kernel structures and may then be reused. A negative errno code |
41 | * is returned on a failure. |
42 | */ |
43 | |
44 | int unregister_netevent_notifier(struct notifier_block *nb) |
45 | { |
46 | return atomic_notifier_chain_unregister(nh: &netevent_notif_chain, nb); |
47 | } |
48 | EXPORT_SYMBOL_GPL(unregister_netevent_notifier); |
49 | |
50 | /** |
51 | * call_netevent_notifiers - call all netevent notifier blocks |
52 | * @val: value passed unmodified to notifier function |
53 | * @v: pointer passed unmodified to notifier function |
54 | * |
55 | * Call all neighbour notifier blocks. Parameters and return value |
56 | * are as for notifier_call_chain(). |
57 | */ |
58 | |
59 | int call_netevent_notifiers(unsigned long val, void *v) |
60 | { |
61 | return atomic_notifier_call_chain(nh: &netevent_notif_chain, val, v); |
62 | } |
63 | EXPORT_SYMBOL_GPL(call_netevent_notifiers); |
64 |