xref: /OK3568_Linux_fs/kernel/include/net/fib_notifier.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #ifndef __NET_FIB_NOTIFIER_H
2*4882a593Smuzhiyun #define __NET_FIB_NOTIFIER_H
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #include <linux/types.h>
5*4882a593Smuzhiyun #include <linux/notifier.h>
6*4882a593Smuzhiyun #include <net/net_namespace.h>
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun struct module;
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun struct fib_notifier_info {
11*4882a593Smuzhiyun 	int family;
12*4882a593Smuzhiyun 	struct netlink_ext_ack  *extack;
13*4882a593Smuzhiyun };
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun enum fib_event_type {
16*4882a593Smuzhiyun 	FIB_EVENT_ENTRY_REPLACE,
17*4882a593Smuzhiyun 	FIB_EVENT_ENTRY_APPEND,
18*4882a593Smuzhiyun 	FIB_EVENT_ENTRY_ADD,
19*4882a593Smuzhiyun 	FIB_EVENT_ENTRY_DEL,
20*4882a593Smuzhiyun 	FIB_EVENT_RULE_ADD,
21*4882a593Smuzhiyun 	FIB_EVENT_RULE_DEL,
22*4882a593Smuzhiyun 	FIB_EVENT_NH_ADD,
23*4882a593Smuzhiyun 	FIB_EVENT_NH_DEL,
24*4882a593Smuzhiyun 	FIB_EVENT_VIF_ADD,
25*4882a593Smuzhiyun 	FIB_EVENT_VIF_DEL,
26*4882a593Smuzhiyun };
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun struct fib_notifier_ops {
29*4882a593Smuzhiyun 	int family;
30*4882a593Smuzhiyun 	struct list_head list;
31*4882a593Smuzhiyun 	unsigned int (*fib_seq_read)(struct net *net);
32*4882a593Smuzhiyun 	int (*fib_dump)(struct net *net, struct notifier_block *nb,
33*4882a593Smuzhiyun 			struct netlink_ext_ack *extack);
34*4882a593Smuzhiyun 	struct module *owner;
35*4882a593Smuzhiyun 	struct rcu_head rcu;
36*4882a593Smuzhiyun };
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun int call_fib_notifier(struct notifier_block *nb,
39*4882a593Smuzhiyun 		      enum fib_event_type event_type,
40*4882a593Smuzhiyun 		      struct fib_notifier_info *info);
41*4882a593Smuzhiyun int call_fib_notifiers(struct net *net, enum fib_event_type event_type,
42*4882a593Smuzhiyun 		       struct fib_notifier_info *info);
43*4882a593Smuzhiyun int register_fib_notifier(struct net *net, struct notifier_block *nb,
44*4882a593Smuzhiyun 			  void (*cb)(struct notifier_block *nb),
45*4882a593Smuzhiyun 			  struct netlink_ext_ack *extack);
46*4882a593Smuzhiyun int unregister_fib_notifier(struct net *net, struct notifier_block *nb);
47*4882a593Smuzhiyun struct fib_notifier_ops *
48*4882a593Smuzhiyun fib_notifier_ops_register(const struct fib_notifier_ops *tmpl, struct net *net);
49*4882a593Smuzhiyun void fib_notifier_ops_unregister(struct fib_notifier_ops *ops);
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #endif
52