mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 14:14:24 +08:00
net: add net available in build_state
The build_state callback of lwtunnel doesn't contain the net namespace structure yet. This patch will add it so we can check on specific address configuration at creation time of rpl source routes. Signed-off-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8610c7c6e3
commit
faee676944
@ -470,8 +470,9 @@ int fib_nh_init(struct net *net, struct fib_nh *fib_nh,
|
||||
struct fib_config *cfg, int nh_weight,
|
||||
struct netlink_ext_ack *extack);
|
||||
void fib_nh_release(struct net *net, struct fib_nh *fib_nh);
|
||||
int fib_nh_common_init(struct fib_nh_common *nhc, struct nlattr *fc_encap,
|
||||
u16 fc_encap_type, void *cfg, gfp_t gfp_flags,
|
||||
int fib_nh_common_init(struct net *net, struct fib_nh_common *nhc,
|
||||
struct nlattr *fc_encap, u16 fc_encap_type,
|
||||
void *cfg, gfp_t gfp_flags,
|
||||
struct netlink_ext_ack *extack);
|
||||
void fib_nh_common_release(struct fib_nh_common *nhc);
|
||||
|
||||
|
@ -34,7 +34,7 @@ struct lwtunnel_state {
|
||||
};
|
||||
|
||||
struct lwtunnel_encap_ops {
|
||||
int (*build_state)(struct nlattr *encap,
|
||||
int (*build_state)(struct net *net, struct nlattr *encap,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **ts,
|
||||
struct netlink_ext_ack *extack);
|
||||
@ -113,7 +113,7 @@ int lwtunnel_valid_encap_type(u16 encap_type,
|
||||
struct netlink_ext_ack *extack);
|
||||
int lwtunnel_valid_encap_type_attr(struct nlattr *attr, int len,
|
||||
struct netlink_ext_ack *extack);
|
||||
int lwtunnel_build_state(u16 encap_type,
|
||||
int lwtunnel_build_state(struct net *net, u16 encap_type,
|
||||
struct nlattr *encap,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **lws,
|
||||
@ -209,7 +209,7 @@ static inline int lwtunnel_valid_encap_type_attr(struct nlattr *attr, int len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int lwtunnel_build_state(u16 encap_type,
|
||||
static inline int lwtunnel_build_state(struct net *net, u16 encap_type,
|
||||
struct nlattr *encap,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **lws,
|
||||
|
@ -367,7 +367,7 @@ static const struct nla_policy bpf_nl_policy[LWT_BPF_MAX + 1] = {
|
||||
[LWT_BPF_XMIT_HEADROOM] = { .type = NLA_U32 },
|
||||
};
|
||||
|
||||
static int bpf_build_state(struct nlattr *nla,
|
||||
static int bpf_build_state(struct net *net, struct nlattr *nla,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **ts,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
@ -98,7 +98,7 @@ int lwtunnel_encap_del_ops(const struct lwtunnel_encap_ops *ops,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(lwtunnel_encap_del_ops);
|
||||
|
||||
int lwtunnel_build_state(u16 encap_type,
|
||||
int lwtunnel_build_state(struct net *net, u16 encap_type,
|
||||
struct nlattr *encap, unsigned int family,
|
||||
const void *cfg, struct lwtunnel_state **lws,
|
||||
struct netlink_ext_ack *extack)
|
||||
@ -122,7 +122,7 @@ int lwtunnel_build_state(u16 encap_type,
|
||||
rcu_read_unlock();
|
||||
|
||||
if (found) {
|
||||
ret = ops->build_state(encap, family, cfg, lws, extack);
|
||||
ret = ops->build_state(net, encap, family, cfg, lws, extack);
|
||||
if (ret)
|
||||
module_put(ops->owner);
|
||||
} else {
|
||||
|
@ -35,7 +35,7 @@ static inline void fib_alias_accessed(struct fib_alias *fa)
|
||||
void fib_release_info(struct fib_info *);
|
||||
struct fib_info *fib_create_info(struct fib_config *cfg,
|
||||
struct netlink_ext_ack *extack);
|
||||
int fib_nh_match(struct fib_config *cfg, struct fib_info *fi,
|
||||
int fib_nh_match(struct net *net, struct fib_config *cfg, struct fib_info *fi,
|
||||
struct netlink_ext_ack *extack);
|
||||
bool fib_metrics_match(struct fib_config *cfg, struct fib_info *fi);
|
||||
int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
|
||||
|
@ -570,8 +570,9 @@ static int fib_detect_death(struct fib_info *fi, int order,
|
||||
return 1;
|
||||
}
|
||||
|
||||
int fib_nh_common_init(struct fib_nh_common *nhc, struct nlattr *encap,
|
||||
u16 encap_type, void *cfg, gfp_t gfp_flags,
|
||||
int fib_nh_common_init(struct net *net, struct fib_nh_common *nhc,
|
||||
struct nlattr *encap, u16 encap_type,
|
||||
void *cfg, gfp_t gfp_flags,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
int err;
|
||||
@ -589,8 +590,9 @@ int fib_nh_common_init(struct fib_nh_common *nhc, struct nlattr *encap,
|
||||
err = -EINVAL;
|
||||
goto lwt_failure;
|
||||
}
|
||||
err = lwtunnel_build_state(encap_type, encap, nhc->nhc_family,
|
||||
cfg, &lwtstate, extack);
|
||||
err = lwtunnel_build_state(net, encap_type, encap,
|
||||
nhc->nhc_family, cfg, &lwtstate,
|
||||
extack);
|
||||
if (err)
|
||||
goto lwt_failure;
|
||||
|
||||
@ -614,7 +616,7 @@ int fib_nh_init(struct net *net, struct fib_nh *nh,
|
||||
|
||||
nh->fib_nh_family = AF_INET;
|
||||
|
||||
err = fib_nh_common_init(&nh->nh_common, cfg->fc_encap,
|
||||
err = fib_nh_common_init(net, &nh->nh_common, cfg->fc_encap,
|
||||
cfg->fc_encap_type, cfg, GFP_KERNEL, extack);
|
||||
if (err)
|
||||
return err;
|
||||
@ -814,7 +816,7 @@ static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh,
|
||||
|
||||
#endif /* CONFIG_IP_ROUTE_MULTIPATH */
|
||||
|
||||
static int fib_encap_match(u16 encap_type,
|
||||
static int fib_encap_match(struct net *net, u16 encap_type,
|
||||
struct nlattr *encap,
|
||||
const struct fib_nh *nh,
|
||||
const struct fib_config *cfg,
|
||||
@ -826,7 +828,7 @@ static int fib_encap_match(u16 encap_type,
|
||||
if (encap_type == LWTUNNEL_ENCAP_NONE)
|
||||
return 0;
|
||||
|
||||
ret = lwtunnel_build_state(encap_type, encap, AF_INET,
|
||||
ret = lwtunnel_build_state(net, encap_type, encap, AF_INET,
|
||||
cfg, &lwtstate, extack);
|
||||
if (!ret) {
|
||||
result = lwtunnel_cmp_encap(lwtstate, nh->fib_nh_lws);
|
||||
@ -836,7 +838,7 @@ static int fib_encap_match(u16 encap_type,
|
||||
return result;
|
||||
}
|
||||
|
||||
int fib_nh_match(struct fib_config *cfg, struct fib_info *fi,
|
||||
int fib_nh_match(struct net *net, struct fib_config *cfg, struct fib_info *fi,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
#ifdef CONFIG_IP_ROUTE_MULTIPATH
|
||||
@ -857,8 +859,8 @@ int fib_nh_match(struct fib_config *cfg, struct fib_info *fi,
|
||||
struct fib_nh *nh = fib_info_nh(fi, 0);
|
||||
|
||||
if (cfg->fc_encap) {
|
||||
if (fib_encap_match(cfg->fc_encap_type, cfg->fc_encap,
|
||||
nh, cfg, extack))
|
||||
if (fib_encap_match(net, cfg->fc_encap_type,
|
||||
cfg->fc_encap, nh, cfg, extack))
|
||||
return 1;
|
||||
}
|
||||
#ifdef CONFIG_IP_ROUTE_CLASSID
|
||||
|
@ -1679,7 +1679,7 @@ int fib_table_delete(struct net *net, struct fib_table *tb,
|
||||
fi->fib_prefsrc == cfg->fc_prefsrc) &&
|
||||
(!cfg->fc_protocol ||
|
||||
fi->fib_protocol == cfg->fc_protocol) &&
|
||||
fib_nh_match(cfg, fi, extack) == 0 &&
|
||||
fib_nh_match(net, cfg, fi, extack) == 0 &&
|
||||
fib_metrics_match(cfg, fi)) {
|
||||
fa_to_delete = fa;
|
||||
break;
|
||||
|
@ -432,7 +432,7 @@ static int ip_tun_set_opts(struct nlattr *attr, struct ip_tunnel_info *info,
|
||||
return ip_tun_parse_opts(attr, info, extack);
|
||||
}
|
||||
|
||||
static int ip_tun_build_state(struct nlattr *attr,
|
||||
static int ip_tun_build_state(struct net *net, struct nlattr *attr,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **ts,
|
||||
struct netlink_ext_ack *extack)
|
||||
@ -719,7 +719,7 @@ static const struct nla_policy ip6_tun_policy[LWTUNNEL_IP6_MAX + 1] = {
|
||||
[LWTUNNEL_IP6_OPTS] = { .type = NLA_NESTED },
|
||||
};
|
||||
|
||||
static int ip6_tun_build_state(struct nlattr *attr,
|
||||
static int ip6_tun_build_state(struct net *net, struct nlattr *attr,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **ts,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
@ -125,7 +125,7 @@ static const struct nla_policy ila_nl_policy[ILA_ATTR_MAX + 1] = {
|
||||
[ILA_ATTR_HOOK_TYPE] = { .type = NLA_U8, },
|
||||
};
|
||||
|
||||
static int ila_build_state(struct nlattr *nla,
|
||||
static int ila_build_state(struct net *net, struct nlattr *nla,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **ts,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
@ -3471,7 +3471,7 @@ int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh,
|
||||
!netif_carrier_ok(dev))
|
||||
fib6_nh->fib_nh_flags |= RTNH_F_LINKDOWN;
|
||||
|
||||
err = fib_nh_common_init(&fib6_nh->nh_common, cfg->fc_encap,
|
||||
err = fib_nh_common_init(net, &fib6_nh->nh_common, cfg->fc_encap,
|
||||
cfg->fc_encap_type, cfg, gfp_flags, extack);
|
||||
if (err)
|
||||
goto out;
|
||||
|
@ -376,7 +376,7 @@ drop:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int seg6_build_state(struct nlattr *nla,
|
||||
static int seg6_build_state(struct net *net, struct nlattr *nla,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **ts,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
@ -970,8 +970,9 @@ static int parse_nla_action(struct nlattr **attrs, struct seg6_local_lwt *slwt)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int seg6_local_build_state(struct nlattr *nla, unsigned int family,
|
||||
const void *cfg, struct lwtunnel_state **ts,
|
||||
static int seg6_local_build_state(struct net *net, struct nlattr *nla,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **ts,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct nlattr *tb[SEG6_LOCAL_MAX + 1];
|
||||
|
@ -162,7 +162,7 @@ drop:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int mpls_build_state(struct nlattr *nla,
|
||||
static int mpls_build_state(struct net *net, struct nlattr *nla,
|
||||
unsigned int family, const void *cfg,
|
||||
struct lwtunnel_state **ts,
|
||||
struct netlink_ext_ack *extack)
|
||||
|
Loading…
Reference in New Issue
Block a user