netevent.c revision 9e34a5b51684bc90ac827ec4ba339f3892632eac
1792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker/* 2792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Network event notifiers 3792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 4792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Authors: 5792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Tom Tucker <tom@opengridcomputing.com> 6792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Steve Wise <swise@opengridcomputing.com> 7792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 8792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * This program is free software; you can redistribute it and/or 9792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * modify it under the terms of the GNU General Public License 10792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * as published by the Free Software Foundation; either version 11792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 2 of the License, or (at your option) any later version. 12792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 13792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Fixes: 14792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker */ 15792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 16792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker#include <linux/rtnetlink.h> 17792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker#include <linux/notifier.h> 1894b83419e5b56a87410fd9c9939f0081fc155d65Adrian Bunk#include <net/netevent.h> 19792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 20792d1932e319ff8ba01361e7d151b1794c55c31fTom Tuckerstatic ATOMIC_NOTIFIER_HEAD(netevent_notif_chain); 21792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 22792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker/** 23792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * register_netevent_notifier - register a netevent notifier block 24792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * @nb: notifier 25792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 26792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Register a notifier to be called when a netevent occurs. 27792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * The notifier passed is linked into the kernel structures and must 28792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * not be reused until it has been unregistered. A negative errno code 29792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * is returned on a failure. 30792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker */ 31792d1932e319ff8ba01361e7d151b1794c55c31fTom Tuckerint register_netevent_notifier(struct notifier_block *nb) 32792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker{ 33792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker int err; 34792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 35792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker err = atomic_notifier_chain_register(&netevent_notif_chain, nb); 36792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker return err; 37792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker} 389e34a5b51684bc90ac827ec4ba339f3892632eacEric DumazetEXPORT_SYMBOL_GPL(register_netevent_notifier); 39792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 40792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker/** 41792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * netevent_unregister_notifier - unregister a netevent notifier block 42792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * @nb: notifier 43792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 44792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Unregister a notifier previously registered by 45792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * register_neigh_notifier(). The notifier is unlinked into the 46792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * kernel structures and may then be reused. A negative errno code 47792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * is returned on a failure. 48792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker */ 49792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 50792d1932e319ff8ba01361e7d151b1794c55c31fTom Tuckerint unregister_netevent_notifier(struct notifier_block *nb) 51792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker{ 52792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker return atomic_notifier_chain_unregister(&netevent_notif_chain, nb); 53792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker} 549e34a5b51684bc90ac827ec4ba339f3892632eacEric DumazetEXPORT_SYMBOL_GPL(unregister_netevent_notifier); 55792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 56792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker/** 57792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * call_netevent_notifiers - call all netevent notifier blocks 58792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * @val: value passed unmodified to notifier function 59792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * @v: pointer passed unmodified to notifier function 60792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 61792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Call all neighbour notifier blocks. Parameters and return value 62792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * are as for notifier_call_chain(). 63792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker */ 64792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 65792d1932e319ff8ba01361e7d151b1794c55c31fTom Tuckerint call_netevent_notifiers(unsigned long val, void *v) 66792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker{ 67792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker return atomic_notifier_call_chain(&netevent_notif_chain, val, v); 68792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker} 69792d1932e319ff8ba01361e7d151b1794c55c31fTom TuckerEXPORT_SYMBOL_GPL(call_netevent_notifiers); 70