fib: introduce FIB notification infrastructure
This allows to pass information about added/deleted FIB entries/rules to whoever is interested. This is done in a very similar way as devinet notifies address additions/removals. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
eb523f42d7
commit
b90eb75494
@@ -22,6 +22,7 @@
|
||||
#include <net/fib_rules.h>
|
||||
#include <net/inetpeer.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
struct fib_config {
|
||||
u8 fc_dst_len;
|
||||
@@ -185,6 +186,33 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh);
|
||||
#define FIB_RES_PREFSRC(net, res) ((res).fi->fib_prefsrc ? : \
|
||||
FIB_RES_SADDR(net, res))
|
||||
|
||||
struct fib_notifier_info {
|
||||
struct net *net;
|
||||
};
|
||||
|
||||
struct fib_entry_notifier_info {
|
||||
struct fib_notifier_info info; /* must be first */
|
||||
u32 dst;
|
||||
int dst_len;
|
||||
struct fib_info *fi;
|
||||
u8 tos;
|
||||
u8 type;
|
||||
u32 tb_id;
|
||||
u32 nlflags;
|
||||
};
|
||||
|
||||
enum fib_event_type {
|
||||
FIB_EVENT_ENTRY_ADD,
|
||||
FIB_EVENT_ENTRY_DEL,
|
||||
FIB_EVENT_RULE_ADD,
|
||||
FIB_EVENT_RULE_DEL,
|
||||
};
|
||||
|
||||
int register_fib_notifier(struct notifier_block *nb);
|
||||
int unregister_fib_notifier(struct notifier_block *nb);
|
||||
int call_fib_notifiers(struct net *net, enum fib_event_type event_type,
|
||||
struct fib_notifier_info *info);
|
||||
|
||||
struct fib_table {
|
||||
struct hlist_node tb_hlist;
|
||||
u32 tb_id;
|
||||
@@ -196,11 +224,11 @@ struct fib_table {
|
||||
|
||||
int fib_table_lookup(struct fib_table *tb, const struct flowi4 *flp,
|
||||
struct fib_result *res, int fib_flags);
|
||||
int fib_table_insert(struct fib_table *, struct fib_config *);
|
||||
int fib_table_delete(struct fib_table *, struct fib_config *);
|
||||
int fib_table_insert(struct net *, struct fib_table *, struct fib_config *);
|
||||
int fib_table_delete(struct net *, struct fib_table *, struct fib_config *);
|
||||
int fib_table_dump(struct fib_table *table, struct sk_buff *skb,
|
||||
struct netlink_callback *cb);
|
||||
int fib_table_flush(struct fib_table *table);
|
||||
int fib_table_flush(struct net *net, struct fib_table *table);
|
||||
struct fib_table *fib_trie_unmerge(struct fib_table *main_tb);
|
||||
void fib_table_flush_external(struct fib_table *table);
|
||||
void fib_free_table(struct fib_table *tb);
|
||||
|
Reference in New Issue
Block a user