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> 18bc3b2d7fb9b014d75ebb79ba371a763dbab5e8cfPaul Gortmaker#include <linux/export.h> 1994b83419e5b56a87410fd9c9939f0081fc155d65Adrian Bunk#include <net/netevent.h> 20792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 21792d1932e319ff8ba01361e7d151b1794c55c31fTom Tuckerstatic ATOMIC_NOTIFIER_HEAD(netevent_notif_chain); 22792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 23792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker/** 24792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * register_netevent_notifier - register a netevent notifier block 25792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * @nb: notifier 26792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 27792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Register a notifier to be called when a netevent occurs. 28792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * The notifier passed is linked into the kernel structures and must 29792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * not be reused until it has been unregistered. A negative errno code 30792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * is returned on a failure. 31792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker */ 32792d1932e319ff8ba01361e7d151b1794c55c31fTom Tuckerint register_netevent_notifier(struct notifier_block *nb) 33792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker{ 34792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker int err; 35792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 36792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker err = atomic_notifier_chain_register(&netevent_notif_chain, nb); 37792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker return err; 38792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker} 399e34a5b51684bc90ac827ec4ba339f3892632eacEric DumazetEXPORT_SYMBOL_GPL(register_netevent_notifier); 40792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 41792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker/** 42792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * netevent_unregister_notifier - unregister a netevent notifier block 43792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * @nb: notifier 44792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 45792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Unregister a notifier previously registered by 46792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * register_neigh_notifier(). The notifier is unlinked into the 47792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * kernel structures and may then be reused. A negative errno code 48792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * is returned on a failure. 49792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker */ 50792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 51792d1932e319ff8ba01361e7d151b1794c55c31fTom Tuckerint unregister_netevent_notifier(struct notifier_block *nb) 52792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker{ 53792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker return atomic_notifier_chain_unregister(&netevent_notif_chain, nb); 54792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker} 559e34a5b51684bc90ac827ec4ba339f3892632eacEric DumazetEXPORT_SYMBOL_GPL(unregister_netevent_notifier); 56792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 57792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker/** 58792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * call_netevent_notifiers - call all netevent notifier blocks 59792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * @val: value passed unmodified to notifier function 60792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * @v: pointer passed unmodified to notifier function 61792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * 62792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * Call all neighbour notifier blocks. Parameters and return value 63792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker * are as for notifier_call_chain(). 64792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker */ 65792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker 66792d1932e319ff8ba01361e7d151b1794c55c31fTom Tuckerint call_netevent_notifiers(unsigned long val, void *v) 67792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker{ 68792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker return atomic_notifier_call_chain(&netevent_notif_chain, val, v); 69792d1932e319ff8ba01361e7d151b1794c55c31fTom Tucker} 70792d1932e319ff8ba01361e7d151b1794c55c31fTom TuckerEXPORT_SYMBOL_GPL(call_netevent_notifiers); 71