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
@@ -164,6 +164,14 @@ static struct fib_table *fib_empty_table(struct net *net)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int call_fib_rule_notifiers(struct net *net,
|
||||
enum fib_event_type event_type)
|
||||
{
|
||||
struct fib_notifier_info info;
|
||||
|
||||
return call_fib_notifiers(net, event_type, &info);
|
||||
}
|
||||
|
||||
static const struct nla_policy fib4_rule_policy[FRA_MAX+1] = {
|
||||
FRA_GENERIC_POLICY,
|
||||
[FRA_FLOW] = { .type = NLA_U32 },
|
||||
@@ -221,6 +229,7 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
|
||||
|
||||
net->ipv4.fib_has_custom_rules = true;
|
||||
fib_flush_external(rule->fr_net);
|
||||
call_fib_rule_notifiers(net, FIB_EVENT_RULE_ADD);
|
||||
|
||||
err = 0;
|
||||
errout:
|
||||
@@ -243,6 +252,7 @@ static int fib4_rule_delete(struct fib_rule *rule)
|
||||
#endif
|
||||
net->ipv4.fib_has_custom_rules = true;
|
||||
fib_flush_external(rule->fr_net);
|
||||
call_fib_rule_notifiers(net, FIB_EVENT_RULE_DEL);
|
||||
errout:
|
||||
return err;
|
||||
}
|
||||
|
Reference in New Issue
Block a user