104b1d4e5SIdo Schimmel #ifndef __NET_FIB_NOTIFIER_H 204b1d4e5SIdo Schimmel #define __NET_FIB_NOTIFIER_H 304b1d4e5SIdo Schimmel 404b1d4e5SIdo Schimmel #include <linux/types.h> 504b1d4e5SIdo Schimmel #include <linux/notifier.h> 604b1d4e5SIdo Schimmel #include <net/net_namespace.h> 704b1d4e5SIdo Schimmel 8113e6328SPaul Gortmaker struct module; 9113e6328SPaul Gortmaker 1004b1d4e5SIdo Schimmel struct fib_notifier_info { 1104b1d4e5SIdo Schimmel int family; 126c31e5a9SDavid Ahern struct netlink_ext_ack *extack; 1304b1d4e5SIdo Schimmel }; 1404b1d4e5SIdo Schimmel 1504b1d4e5SIdo Schimmel enum fib_event_type { 1604b1d4e5SIdo Schimmel FIB_EVENT_ENTRY_REPLACE, 1704b1d4e5SIdo Schimmel FIB_EVENT_ENTRY_APPEND, 1804b1d4e5SIdo Schimmel FIB_EVENT_ENTRY_ADD, 1904b1d4e5SIdo Schimmel FIB_EVENT_ENTRY_DEL, 2004b1d4e5SIdo Schimmel FIB_EVENT_RULE_ADD, 2104b1d4e5SIdo Schimmel FIB_EVENT_RULE_DEL, 2204b1d4e5SIdo Schimmel FIB_EVENT_NH_ADD, 2304b1d4e5SIdo Schimmel FIB_EVENT_NH_DEL, 2485e48228SYotam Gigi FIB_EVENT_VIF_ADD, 2585e48228SYotam Gigi FIB_EVENT_VIF_DEL, 2604b1d4e5SIdo Schimmel }; 2704b1d4e5SIdo Schimmel 2804b1d4e5SIdo Schimmel struct fib_notifier_ops { 2904b1d4e5SIdo Schimmel int family; 3004b1d4e5SIdo Schimmel struct list_head list; 3104b1d4e5SIdo Schimmel unsigned int (*fib_seq_read)(struct net *net); 32*b7a59557SJiri Pirko int (*fib_dump)(struct net *net, struct notifier_block *nb, 33*b7a59557SJiri Pirko struct netlink_ext_ack *extack); 34864150dfSIdo Schimmel struct module *owner; 3504b1d4e5SIdo Schimmel struct rcu_head rcu; 3604b1d4e5SIdo Schimmel }; 3704b1d4e5SIdo Schimmel 387c550dafSJiri Pirko int call_fib_notifier(struct notifier_block *nb, 3904b1d4e5SIdo Schimmel enum fib_event_type event_type, 4004b1d4e5SIdo Schimmel struct fib_notifier_info *info); 4104b1d4e5SIdo Schimmel int call_fib_notifiers(struct net *net, enum fib_event_type event_type, 4204b1d4e5SIdo Schimmel struct fib_notifier_info *info); 437c550dafSJiri Pirko int register_fib_notifier(struct net *net, struct notifier_block *nb, 44*b7a59557SJiri Pirko void (*cb)(struct notifier_block *nb), 45*b7a59557SJiri Pirko struct netlink_ext_ack *extack); 467c550dafSJiri Pirko int unregister_fib_notifier(struct net *net, struct notifier_block *nb); 4704b1d4e5SIdo Schimmel struct fib_notifier_ops * 4804b1d4e5SIdo Schimmel fib_notifier_ops_register(const struct fib_notifier_ops *tmpl, struct net *net); 4904b1d4e5SIdo Schimmel void fib_notifier_ops_unregister(struct fib_notifier_ops *ops); 5004b1d4e5SIdo Schimmel 5104b1d4e5SIdo Schimmel #endif 52