#include <linux/rtnetlink.h> #include <linux/notifier.h> #include <linux/rcupdate.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <net/net_namespace.h> #include <net/netns/generic.h> #include <net/fib_notifier.h> static unsigned int fib_notifier_net_id; struct fib_notifier_net { … }; int call_fib_notifier(struct notifier_block *nb, enum fib_event_type event_type, struct fib_notifier_info *info) { … } EXPORT_SYMBOL(…); int call_fib_notifiers(struct net *net, enum fib_event_type event_type, struct fib_notifier_info *info) { … } EXPORT_SYMBOL(…); static unsigned int fib_seq_sum(struct net *net) { … } static int fib_net_dump(struct net *net, struct notifier_block *nb, struct netlink_ext_ack *extack) { … } static bool fib_dump_is_consistent(struct net *net, struct notifier_block *nb, void (*cb)(struct notifier_block *nb), unsigned int fib_seq) { … } #define FIB_DUMP_MAX_RETRIES … int register_fib_notifier(struct net *net, struct notifier_block *nb, void (*cb)(struct notifier_block *nb), struct netlink_ext_ack *extack) { … } EXPORT_SYMBOL(…); int unregister_fib_notifier(struct net *net, struct notifier_block *nb) { … } EXPORT_SYMBOL(…); static int __fib_notifier_ops_register(struct fib_notifier_ops *ops, struct net *net) { … } struct fib_notifier_ops * fib_notifier_ops_register(const struct fib_notifier_ops *tmpl, struct net *net) { … } EXPORT_SYMBOL(…); void fib_notifier_ops_unregister(struct fib_notifier_ops *ops) { … } EXPORT_SYMBOL(…); static int __net_init fib_notifier_net_init(struct net *net) { … } static void __net_exit fib_notifier_net_exit(struct net *net) { … } static struct pernet_operations fib_notifier_net_ops = …; static int __init fib_notifier_init(void) { … } subsys_initcall(fib_notifier_init);