Commit faee6769 authored by Alexander Aring's avatar Alexander Aring Committed by David S. Miller

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: default avatarAlexander Aring <alex.aring@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8610c7c6
...@@ -470,8 +470,9 @@ int fib_nh_init(struct net *net, struct fib_nh *fib_nh, ...@@ -470,8 +470,9 @@ int fib_nh_init(struct net *net, struct fib_nh *fib_nh,
struct fib_config *cfg, int nh_weight, struct fib_config *cfg, int nh_weight,
struct netlink_ext_ack *extack); struct netlink_ext_ack *extack);
void fib_nh_release(struct net *net, struct fib_nh *fib_nh); 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, int fib_nh_common_init(struct net *net, struct fib_nh_common *nhc,
u16 fc_encap_type, void *cfg, gfp_t gfp_flags, struct nlattr *fc_encap, u16 fc_encap_type,
void *cfg, gfp_t gfp_flags,
struct netlink_ext_ack *extack); struct netlink_ext_ack *extack);
void fib_nh_common_release(struct fib_nh_common *nhc); void fib_nh_common_release(struct fib_nh_common *nhc);
......
...@@ -34,7 +34,7 @@ struct lwtunnel_state { ...@@ -34,7 +34,7 @@ struct lwtunnel_state {
}; };
struct lwtunnel_encap_ops { 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, unsigned int family, const void *cfg,
struct lwtunnel_state **ts, struct lwtunnel_state **ts,
struct netlink_ext_ack *extack); struct netlink_ext_ack *extack);
...@@ -113,7 +113,7 @@ int lwtunnel_valid_encap_type(u16 encap_type, ...@@ -113,7 +113,7 @@ int lwtunnel_valid_encap_type(u16 encap_type,
struct netlink_ext_ack *extack); struct netlink_ext_ack *extack);
int lwtunnel_valid_encap_type_attr(struct nlattr *attr, int len, int lwtunnel_valid_encap_type_attr(struct nlattr *attr, int len,
struct netlink_ext_ack *extack); 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, struct nlattr *encap,
unsigned int family, const void *cfg, unsigned int family, const void *cfg,
struct lwtunnel_state **lws, struct lwtunnel_state **lws,
...@@ -209,7 +209,7 @@ static inline int lwtunnel_valid_encap_type_attr(struct nlattr *attr, int len, ...@@ -209,7 +209,7 @@ static inline int lwtunnel_valid_encap_type_attr(struct nlattr *attr, int len,
return 0; 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, struct nlattr *encap,
unsigned int family, const void *cfg, unsigned int family, const void *cfg,
struct lwtunnel_state **lws, struct lwtunnel_state **lws,
......
...@@ -367,7 +367,7 @@ static const struct nla_policy bpf_nl_policy[LWT_BPF_MAX + 1] = { ...@@ -367,7 +367,7 @@ static const struct nla_policy bpf_nl_policy[LWT_BPF_MAX + 1] = {
[LWT_BPF_XMIT_HEADROOM] = { .type = NLA_U32 }, [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, unsigned int family, const void *cfg,
struct lwtunnel_state **ts, struct lwtunnel_state **ts,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
......
...@@ -98,7 +98,7 @@ int lwtunnel_encap_del_ops(const struct lwtunnel_encap_ops *ops, ...@@ -98,7 +98,7 @@ int lwtunnel_encap_del_ops(const struct lwtunnel_encap_ops *ops,
} }
EXPORT_SYMBOL_GPL(lwtunnel_encap_del_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, struct nlattr *encap, unsigned int family,
const void *cfg, struct lwtunnel_state **lws, const void *cfg, struct lwtunnel_state **lws,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
...@@ -122,7 +122,7 @@ int lwtunnel_build_state(u16 encap_type, ...@@ -122,7 +122,7 @@ int lwtunnel_build_state(u16 encap_type,
rcu_read_unlock(); rcu_read_unlock();
if (found) { if (found) {
ret = ops->build_state(encap, family, cfg, lws, extack); ret = ops->build_state(net, encap, family, cfg, lws, extack);
if (ret) if (ret)
module_put(ops->owner); module_put(ops->owner);
} else { } else {
......
...@@ -35,7 +35,7 @@ static inline void fib_alias_accessed(struct fib_alias *fa) ...@@ -35,7 +35,7 @@ static inline void fib_alias_accessed(struct fib_alias *fa)
void fib_release_info(struct fib_info *); void fib_release_info(struct fib_info *);
struct fib_info *fib_create_info(struct fib_config *cfg, struct fib_info *fib_create_info(struct fib_config *cfg,
struct netlink_ext_ack *extack); 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); struct netlink_ext_ack *extack);
bool fib_metrics_match(struct fib_config *cfg, struct fib_info *fi); 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, 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, ...@@ -570,8 +570,9 @@ static int fib_detect_death(struct fib_info *fi, int order,
return 1; return 1;
} }
int fib_nh_common_init(struct fib_nh_common *nhc, struct nlattr *encap, int fib_nh_common_init(struct net *net, struct fib_nh_common *nhc,
u16 encap_type, void *cfg, gfp_t gfp_flags, struct nlattr *encap, u16 encap_type,
void *cfg, gfp_t gfp_flags,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
{ {
int err; int err;
...@@ -589,8 +590,9 @@ int fib_nh_common_init(struct fib_nh_common *nhc, struct nlattr *encap, ...@@ -589,8 +590,9 @@ int fib_nh_common_init(struct fib_nh_common *nhc, struct nlattr *encap,
err = -EINVAL; err = -EINVAL;
goto lwt_failure; goto lwt_failure;
} }
err = lwtunnel_build_state(encap_type, encap, nhc->nhc_family, err = lwtunnel_build_state(net, encap_type, encap,
cfg, &lwtstate, extack); nhc->nhc_family, cfg, &lwtstate,
extack);
if (err) if (err)
goto lwt_failure; goto lwt_failure;
...@@ -614,7 +616,7 @@ int fib_nh_init(struct net *net, struct fib_nh *nh, ...@@ -614,7 +616,7 @@ int fib_nh_init(struct net *net, struct fib_nh *nh,
nh->fib_nh_family = AF_INET; 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); cfg->fc_encap_type, cfg, GFP_KERNEL, extack);
if (err) if (err)
return err; return err;
...@@ -814,7 +816,7 @@ static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh, ...@@ -814,7 +816,7 @@ static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh,
#endif /* CONFIG_IP_ROUTE_MULTIPATH */ #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, struct nlattr *encap,
const struct fib_nh *nh, const struct fib_nh *nh,
const struct fib_config *cfg, const struct fib_config *cfg,
...@@ -826,7 +828,7 @@ static int fib_encap_match(u16 encap_type, ...@@ -826,7 +828,7 @@ static int fib_encap_match(u16 encap_type,
if (encap_type == LWTUNNEL_ENCAP_NONE) if (encap_type == LWTUNNEL_ENCAP_NONE)
return 0; return 0;
ret = lwtunnel_build_state(encap_type, encap, AF_INET, ret = lwtunnel_build_state(net, encap_type, encap, AF_INET,
cfg, &lwtstate, extack); cfg, &lwtstate, extack);
if (!ret) { if (!ret) {
result = lwtunnel_cmp_encap(lwtstate, nh->fib_nh_lws); result = lwtunnel_cmp_encap(lwtstate, nh->fib_nh_lws);
...@@ -836,7 +838,7 @@ static int fib_encap_match(u16 encap_type, ...@@ -836,7 +838,7 @@ static int fib_encap_match(u16 encap_type,
return result; 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) struct netlink_ext_ack *extack)
{ {
#ifdef CONFIG_IP_ROUTE_MULTIPATH #ifdef CONFIG_IP_ROUTE_MULTIPATH
...@@ -857,8 +859,8 @@ int fib_nh_match(struct fib_config *cfg, struct fib_info *fi, ...@@ -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); struct fib_nh *nh = fib_info_nh(fi, 0);
if (cfg->fc_encap) { if (cfg->fc_encap) {
if (fib_encap_match(cfg->fc_encap_type, cfg->fc_encap, if (fib_encap_match(net, cfg->fc_encap_type,
nh, cfg, extack)) cfg->fc_encap, nh, cfg, extack))
return 1; return 1;
} }
#ifdef CONFIG_IP_ROUTE_CLASSID #ifdef CONFIG_IP_ROUTE_CLASSID
......
...@@ -1679,7 +1679,7 @@ int fib_table_delete(struct net *net, struct fib_table *tb, ...@@ -1679,7 +1679,7 @@ int fib_table_delete(struct net *net, struct fib_table *tb,
fi->fib_prefsrc == cfg->fc_prefsrc) && fi->fib_prefsrc == cfg->fc_prefsrc) &&
(!cfg->fc_protocol || (!cfg->fc_protocol ||
fi->fib_protocol == 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)) { fib_metrics_match(cfg, fi)) {
fa_to_delete = fa; fa_to_delete = fa;
break; break;
......
...@@ -432,7 +432,7 @@ static int ip_tun_set_opts(struct nlattr *attr, struct ip_tunnel_info *info, ...@@ -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); 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, unsigned int family, const void *cfg,
struct lwtunnel_state **ts, struct lwtunnel_state **ts,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
...@@ -719,7 +719,7 @@ static const struct nla_policy ip6_tun_policy[LWTUNNEL_IP6_MAX + 1] = { ...@@ -719,7 +719,7 @@ static const struct nla_policy ip6_tun_policy[LWTUNNEL_IP6_MAX + 1] = {
[LWTUNNEL_IP6_OPTS] = { .type = NLA_NESTED }, [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, unsigned int family, const void *cfg,
struct lwtunnel_state **ts, struct lwtunnel_state **ts,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
......
...@@ -125,7 +125,7 @@ static const struct nla_policy ila_nl_policy[ILA_ATTR_MAX + 1] = { ...@@ -125,7 +125,7 @@ static const struct nla_policy ila_nl_policy[ILA_ATTR_MAX + 1] = {
[ILA_ATTR_HOOK_TYPE] = { .type = NLA_U8, }, [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, unsigned int family, const void *cfg,
struct lwtunnel_state **ts, struct lwtunnel_state **ts,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
......
...@@ -3471,7 +3471,7 @@ int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh, ...@@ -3471,7 +3471,7 @@ int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh,
!netif_carrier_ok(dev)) !netif_carrier_ok(dev))
fib6_nh->fib_nh_flags |= RTNH_F_LINKDOWN; 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); cfg->fc_encap_type, cfg, gfp_flags, extack);
if (err) if (err)
goto out; goto out;
......
...@@ -376,7 +376,7 @@ static int seg6_output(struct net *net, struct sock *sk, struct sk_buff *skb) ...@@ -376,7 +376,7 @@ static int seg6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
return err; 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, unsigned int family, const void *cfg,
struct lwtunnel_state **ts, struct lwtunnel_state **ts,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
......
...@@ -970,8 +970,9 @@ static int parse_nla_action(struct nlattr **attrs, struct seg6_local_lwt *slwt) ...@@ -970,8 +970,9 @@ static int parse_nla_action(struct nlattr **attrs, struct seg6_local_lwt *slwt)
return 0; return 0;
} }
static int seg6_local_build_state(struct nlattr *nla, unsigned int family, static int seg6_local_build_state(struct net *net, struct nlattr *nla,
const void *cfg, struct lwtunnel_state **ts, unsigned int family, const void *cfg,
struct lwtunnel_state **ts,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
{ {
struct nlattr *tb[SEG6_LOCAL_MAX + 1]; struct nlattr *tb[SEG6_LOCAL_MAX + 1];
......
...@@ -162,7 +162,7 @@ static int mpls_xmit(struct sk_buff *skb) ...@@ -162,7 +162,7 @@ static int mpls_xmit(struct sk_buff *skb)
return -EINVAL; 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, unsigned int family, const void *cfg,
struct lwtunnel_state **ts, struct lwtunnel_state **ts,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment