mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
ipmr: Make vif fib notifiers common
The fib-notifiers are tightly coupled with the vif_device which is already common. Move the notifier struct definition and helpers to the common file; Currently they're only used by ipmr. Signed-off-by: Yuval Mintz <yuvalm@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
02a21de90c
commit
bc67a0daf8
@ -55,14 +55,6 @@ static inline bool ipmr_rule_default(const struct fib_rule *rule)
|
||||
}
|
||||
#endif
|
||||
|
||||
struct vif_entry_notifier_info {
|
||||
struct fib_notifier_info info;
|
||||
struct net_device *dev;
|
||||
vifi_t vif_index;
|
||||
unsigned short vif_flags;
|
||||
u32 tb_id;
|
||||
};
|
||||
|
||||
#define VIFF_STATIC 0x8000
|
||||
|
||||
struct mfc_cache_cmp_arg {
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <net/net_namespace.h>
|
||||
#include <net/sock.h>
|
||||
#include <net/fib_notifier.h>
|
||||
|
||||
/**
|
||||
* struct vif_device - interface representor for multicast routing
|
||||
@ -36,6 +37,58 @@ struct vif_device {
|
||||
__be32 local, remote;
|
||||
};
|
||||
|
||||
struct vif_entry_notifier_info {
|
||||
struct fib_notifier_info info;
|
||||
struct net_device *dev;
|
||||
unsigned short vif_index;
|
||||
unsigned short vif_flags;
|
||||
u32 tb_id;
|
||||
};
|
||||
|
||||
static inline int mr_call_vif_notifier(struct notifier_block *nb,
|
||||
struct net *net,
|
||||
unsigned short family,
|
||||
enum fib_event_type event_type,
|
||||
struct vif_device *vif,
|
||||
unsigned short vif_index, u32 tb_id)
|
||||
{
|
||||
struct vif_entry_notifier_info info = {
|
||||
.info = {
|
||||
.family = family,
|
||||
.net = net,
|
||||
},
|
||||
.dev = vif->dev,
|
||||
.vif_index = vif_index,
|
||||
.vif_flags = vif->flags,
|
||||
.tb_id = tb_id,
|
||||
};
|
||||
|
||||
return call_fib_notifier(nb, net, event_type, &info.info);
|
||||
}
|
||||
|
||||
static inline int mr_call_vif_notifiers(struct net *net,
|
||||
unsigned short family,
|
||||
enum fib_event_type event_type,
|
||||
struct vif_device *vif,
|
||||
unsigned short vif_index, u32 tb_id,
|
||||
unsigned int *ipmr_seq)
|
||||
{
|
||||
struct vif_entry_notifier_info info = {
|
||||
.info = {
|
||||
.family = family,
|
||||
.net = net,
|
||||
},
|
||||
.dev = vif->dev,
|
||||
.vif_index = vif_index,
|
||||
.vif_flags = vif->flags,
|
||||
.tb_id = tb_id,
|
||||
};
|
||||
|
||||
ASSERT_RTNL();
|
||||
(*ipmr_seq)++;
|
||||
return call_fib_notifiers(net, event_type, &info.info);
|
||||
}
|
||||
|
||||
#ifndef MAXVIFS
|
||||
/* This one is nasty; value is defined in uapi using different symbols for
|
||||
* mroute and morute6 but both map into same 32.
|
||||
|
@ -650,18 +650,8 @@ static int call_ipmr_vif_entry_notifier(struct notifier_block *nb,
|
||||
struct vif_device *vif,
|
||||
vifi_t vif_index, u32 tb_id)
|
||||
{
|
||||
struct vif_entry_notifier_info info = {
|
||||
.info = {
|
||||
.family = RTNL_FAMILY_IPMR,
|
||||
.net = net,
|
||||
},
|
||||
.dev = vif->dev,
|
||||
.vif_index = vif_index,
|
||||
.vif_flags = vif->flags,
|
||||
.tb_id = tb_id,
|
||||
};
|
||||
|
||||
return call_fib_notifier(nb, net, event_type, &info.info);
|
||||
return mr_call_vif_notifier(nb, net, RTNL_FAMILY_IPMR, event_type,
|
||||
vif, vif_index, tb_id);
|
||||
}
|
||||
|
||||
static int call_ipmr_vif_entry_notifiers(struct net *net,
|
||||
@ -669,20 +659,9 @@ static int call_ipmr_vif_entry_notifiers(struct net *net,
|
||||
struct vif_device *vif,
|
||||
vifi_t vif_index, u32 tb_id)
|
||||
{
|
||||
struct vif_entry_notifier_info info = {
|
||||
.info = {
|
||||
.family = RTNL_FAMILY_IPMR,
|
||||
.net = net,
|
||||
},
|
||||
.dev = vif->dev,
|
||||
.vif_index = vif_index,
|
||||
.vif_flags = vif->flags,
|
||||
.tb_id = tb_id,
|
||||
};
|
||||
|
||||
ASSERT_RTNL();
|
||||
net->ipv4.ipmr_seq++;
|
||||
return call_fib_notifiers(net, event_type, &info.info);
|
||||
return mr_call_vif_notifiers(net, RTNL_FAMILY_IPMR, event_type,
|
||||
vif, vif_index, tb_id,
|
||||
&net->ipv4.ipmr_seq);
|
||||
}
|
||||
|
||||
static int call_ipmr_mfc_entry_notifier(struct notifier_block *nb,
|
||||
|
Loading…
Reference in New Issue
Block a user