mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 17:54:13 +08:00
85e482285b
In order for an interface to forward packets according to the kernel multicast routing table, it must be configured with a VIF index according to the mroute user API. The VIF index is then used to refer to that interface in the mroute user API, for example, to set the iif and oifs of an MFC entry. In order to allow drivers to be aware and offload multicast routes, they have to be aware of the VIF add and delete notifications. Due to the fact that a specific VIF can be deleted and re-added pointing to another netdevice, and the MFC routes that point to it will forward the matching packets to the new netdevice, a driver willing to offload MFC cache entries must be aware of the VIF add and delete events in addition to MFC routes notifications. Signed-off-by: Yotam Gigi <yotamg@mellanox.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
49 lines
1.3 KiB
C
49 lines
1.3 KiB
C
#ifndef __NET_FIB_NOTIFIER_H
|
|
#define __NET_FIB_NOTIFIER_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/module.h>
|
|
#include <linux/notifier.h>
|
|
#include <net/net_namespace.h>
|
|
|
|
struct fib_notifier_info {
|
|
struct net *net;
|
|
int family;
|
|
};
|
|
|
|
enum fib_event_type {
|
|
FIB_EVENT_ENTRY_REPLACE,
|
|
FIB_EVENT_ENTRY_APPEND,
|
|
FIB_EVENT_ENTRY_ADD,
|
|
FIB_EVENT_ENTRY_DEL,
|
|
FIB_EVENT_RULE_ADD,
|
|
FIB_EVENT_RULE_DEL,
|
|
FIB_EVENT_NH_ADD,
|
|
FIB_EVENT_NH_DEL,
|
|
FIB_EVENT_VIF_ADD,
|
|
FIB_EVENT_VIF_DEL,
|
|
};
|
|
|
|
struct fib_notifier_ops {
|
|
int family;
|
|
struct list_head list;
|
|
unsigned int (*fib_seq_read)(struct net *net);
|
|
int (*fib_dump)(struct net *net, struct notifier_block *nb);
|
|
struct module *owner;
|
|
struct rcu_head rcu;
|
|
};
|
|
|
|
int call_fib_notifier(struct notifier_block *nb, struct net *net,
|
|
enum fib_event_type event_type,
|
|
struct fib_notifier_info *info);
|
|
int call_fib_notifiers(struct net *net, enum fib_event_type event_type,
|
|
struct fib_notifier_info *info);
|
|
int register_fib_notifier(struct notifier_block *nb,
|
|
void (*cb)(struct notifier_block *nb));
|
|
int unregister_fib_notifier(struct notifier_block *nb);
|
|
struct fib_notifier_ops *
|
|
fib_notifier_ops_register(const struct fib_notifier_ops *tmpl, struct net *net);
|
|
void fib_notifier_ops_unregister(struct fib_notifier_ops *ops);
|
|
|
|
#endif
|