-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[NET]: Network Event Notifier Mechanism.
This patch uses notifier blocks to implement a network event notifier mechanism. Clients register their callback function by calling register_netevent_notifier() like this: static struct notifier_block nb = { .notifier_call = my_callback_func }; ... register_netevent_notifier(&nb); Signed-off-by: Tom Tucker <tom@opengridcomputing.com> Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
Tom Tucker
authored and
David S. Miller
committed
Aug 2, 2006
1 parent
3687b1d
commit 792d193
Showing
2 changed files
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
#ifndef _NET_EVENT_H | ||
#define _NET_EVENT_H | ||
|
||
/* | ||
* Generic netevent notifiers | ||
* | ||
* Authors: | ||
* Tom Tucker <tom@opengridcomputing.com> | ||
* Steve Wise <swise@opengridcomputing.com> | ||
* | ||
* Changes: | ||
*/ | ||
#ifdef __KERNEL__ | ||
|
||
#include <net/dst.h> | ||
|
||
struct netevent_redirect { | ||
struct dst_entry *old; | ||
struct dst_entry *new; | ||
}; | ||
|
||
enum netevent_notif_type { | ||
NETEVENT_NEIGH_UPDATE = 1, /* arg is struct neighbour ptr */ | ||
NETEVENT_PMTU_UPDATE, /* arg is struct dst_entry ptr */ | ||
NETEVENT_REDIRECT, /* arg is struct netevent_redirect ptr */ | ||
}; | ||
|
||
extern int register_netevent_notifier(struct notifier_block *nb); | ||
extern int unregister_netevent_notifier(struct notifier_block *nb); | ||
extern int call_netevent_notifiers(unsigned long val, void *v); | ||
|
||
#endif | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* Network event notifiers | ||
* | ||
* Authors: | ||
* Tom Tucker <tom@opengridcomputing.com> | ||
* Steve Wise <swise@opengridcomputing.com> | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version | ||
* 2 of the License, or (at your option) any later version. | ||
* | ||
* Fixes: | ||
*/ | ||
|
||
#include <linux/rtnetlink.h> | ||
#include <linux/notifier.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) | ||
{ | ||
int err; | ||
|
||
err = atomic_notifier_chain_register(&netevent_notif_chain, nb); | ||
return err; | ||
} | ||
|
||
/** | ||
* netevent_unregister_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); | ||
} | ||
|
||
/** | ||
* 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(register_netevent_notifier); | ||
EXPORT_SYMBOL_GPL(unregister_netevent_notifier); | ||
EXPORT_SYMBOL_GPL(call_netevent_notifiers); |