ipv6: Pass fib6_result to ip6_mtu_from_fib6 and fib6_mtu
Change ip6_mtu_from_fib6 and fib6_mtu to take a fib6_result over a fib6_info. Update both to use the fib6_nh from fib6_result. Since the signature of ip6_mtu_from_fib6 is already changing, add const to daddr and saddr. Signed-off-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5012f0a594
commit
b748f26092
|
@ -302,8 +302,9 @@ static inline unsigned int ip6_dst_mtu_forward(const struct dst_entry *dst)
|
||||||
return mtu;
|
return mtu;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 ip6_mtu_from_fib6(struct fib6_info *f6i, struct in6_addr *daddr,
|
u32 ip6_mtu_from_fib6(const struct fib6_result *res,
|
||||||
struct in6_addr *saddr);
|
const struct in6_addr *daddr,
|
||||||
|
const struct in6_addr *saddr);
|
||||||
|
|
||||||
struct neighbour *ip6_neigh_lookup(const struct in6_addr *gw,
|
struct neighbour *ip6_neigh_lookup(const struct in6_addr *gw,
|
||||||
struct net_device *dev, struct sk_buff *skb,
|
struct net_device *dev, struct sk_buff *skb,
|
||||||
|
|
|
@ -38,8 +38,9 @@ struct ipv6_stub {
|
||||||
void (*fib6_select_path)(const struct net *net, struct fib6_result *res,
|
void (*fib6_select_path)(const struct net *net, struct fib6_result *res,
|
||||||
struct flowi6 *fl6, int oif, bool oif_match,
|
struct flowi6 *fl6, int oif, bool oif_match,
|
||||||
const struct sk_buff *skb, int strict);
|
const struct sk_buff *skb, int strict);
|
||||||
u32 (*ip6_mtu_from_fib6)(struct fib6_info *f6i, struct in6_addr *daddr,
|
u32 (*ip6_mtu_from_fib6)(const struct fib6_result *res,
|
||||||
struct in6_addr *saddr);
|
const struct in6_addr *daddr,
|
||||||
|
const struct in6_addr *saddr);
|
||||||
|
|
||||||
int (*fib6_nh_init)(struct net *net, struct fib6_nh *fib6_nh,
|
int (*fib6_nh_init)(struct net *net, struct fib6_nh *fib6_nh,
|
||||||
struct fib6_config *cfg, gfp_t gfp_flags,
|
struct fib6_config *cfg, gfp_t gfp_flags,
|
||||||
|
|
|
@ -4761,7 +4761,7 @@ static int bpf_ipv6_fib_lookup(struct net *net, struct bpf_fib_lookup *params,
|
||||||
fl6.flowi6_oif != 0, NULL, strict);
|
fl6.flowi6_oif != 0, NULL, strict);
|
||||||
|
|
||||||
if (check_mtu) {
|
if (check_mtu) {
|
||||||
mtu = ipv6_stub->ip6_mtu_from_fib6(res.f6i, dst, src);
|
mtu = ipv6_stub->ip6_mtu_from_fib6(&res, dst, src);
|
||||||
if (params->tot_len > mtu)
|
if (params->tot_len > mtu)
|
||||||
return BPF_FIB_LKUP_RET_FRAG_NEEDED;
|
return BPF_FIB_LKUP_RET_FRAG_NEEDED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,8 +166,9 @@ eafnosupport_fib6_select_path(const struct net *net, struct fib6_result *res,
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32
|
static u32
|
||||||
eafnosupport_ip6_mtu_from_fib6(struct fib6_info *f6i, struct in6_addr *daddr,
|
eafnosupport_ip6_mtu_from_fib6(const struct fib6_result *res,
|
||||||
struct in6_addr *saddr)
|
const struct in6_addr *daddr,
|
||||||
|
const struct in6_addr *saddr)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1417,14 +1417,15 @@ __rt6_find_exception_rcu(struct rt6_exception_bucket **bucket,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int fib6_mtu(const struct fib6_info *rt)
|
static unsigned int fib6_mtu(const struct fib6_result *res)
|
||||||
{
|
{
|
||||||
|
const struct fib6_nh *nh = res->nh;
|
||||||
unsigned int mtu;
|
unsigned int mtu;
|
||||||
|
|
||||||
if (rt->fib6_pmtu) {
|
if (res->f6i->fib6_pmtu) {
|
||||||
mtu = rt->fib6_pmtu;
|
mtu = res->f6i->fib6_pmtu;
|
||||||
} else {
|
} else {
|
||||||
struct net_device *dev = fib6_info_nh_dev(rt);
|
struct net_device *dev = nh->fib_nh_dev;
|
||||||
struct inet6_dev *idev;
|
struct inet6_dev *idev;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
|
@ -1435,7 +1436,7 @@ static unsigned int fib6_mtu(const struct fib6_info *rt)
|
||||||
|
|
||||||
mtu = min_t(unsigned int, mtu, IP6_MAX_MTU);
|
mtu = min_t(unsigned int, mtu, IP6_MAX_MTU);
|
||||||
|
|
||||||
return mtu - lwtunnel_headroom(rt->fib6_nh.fib_nh_lws, mtu);
|
return mtu - lwtunnel_headroom(nh->fib_nh_lws, mtu);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rt6_insert_exception(struct rt6_info *nrt,
|
static int rt6_insert_exception(struct rt6_info *nrt,
|
||||||
|
@ -1481,7 +1482,7 @@ static int rt6_insert_exception(struct rt6_info *nrt,
|
||||||
* Only insert this exception route if its mtu
|
* Only insert this exception route if its mtu
|
||||||
* is less than f6i's mtu value.
|
* is less than f6i's mtu value.
|
||||||
*/
|
*/
|
||||||
if (dst_metric_raw(&nrt->dst, RTAX_MTU) >= fib6_mtu(res->f6i)) {
|
if (dst_metric_raw(&nrt->dst, RTAX_MTU) >= fib6_mtu(res)) {
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -2640,12 +2641,15 @@ static unsigned int ip6_mtu(const struct dst_entry *dst)
|
||||||
* based on ip6_dst_mtu_forward and exception logic of
|
* based on ip6_dst_mtu_forward and exception logic of
|
||||||
* rt6_find_cached_rt; called with rcu_read_lock
|
* rt6_find_cached_rt; called with rcu_read_lock
|
||||||
*/
|
*/
|
||||||
u32 ip6_mtu_from_fib6(struct fib6_info *f6i, struct in6_addr *daddr,
|
u32 ip6_mtu_from_fib6(const struct fib6_result *res,
|
||||||
struct in6_addr *saddr)
|
const struct in6_addr *daddr,
|
||||||
|
const struct in6_addr *saddr)
|
||||||
{
|
{
|
||||||
struct rt6_exception_bucket *bucket;
|
struct rt6_exception_bucket *bucket;
|
||||||
|
const struct fib6_nh *nh = res->nh;
|
||||||
|
struct fib6_info *f6i = res->f6i;
|
||||||
|
const struct in6_addr *src_key;
|
||||||
struct rt6_exception *rt6_ex;
|
struct rt6_exception *rt6_ex;
|
||||||
struct in6_addr *src_key;
|
|
||||||
struct inet6_dev *idev;
|
struct inet6_dev *idev;
|
||||||
u32 mtu = 0;
|
u32 mtu = 0;
|
||||||
|
|
||||||
|
@ -2667,7 +2671,7 @@ u32 ip6_mtu_from_fib6(struct fib6_info *f6i, struct in6_addr *daddr,
|
||||||
mtu = dst_metric_raw(&rt6_ex->rt6i->dst, RTAX_MTU);
|
mtu = dst_metric_raw(&rt6_ex->rt6i->dst, RTAX_MTU);
|
||||||
|
|
||||||
if (likely(!mtu)) {
|
if (likely(!mtu)) {
|
||||||
struct net_device *dev = fib6_info_nh_dev(f6i);
|
struct net_device *dev = nh->fib_nh_dev;
|
||||||
|
|
||||||
mtu = IPV6_MIN_MTU;
|
mtu = IPV6_MIN_MTU;
|
||||||
idev = __in6_dev_get(dev);
|
idev = __in6_dev_get(dev);
|
||||||
|
@ -2677,7 +2681,7 @@ u32 ip6_mtu_from_fib6(struct fib6_info *f6i, struct in6_addr *daddr,
|
||||||
|
|
||||||
mtu = min_t(unsigned int, mtu, IP6_MAX_MTU);
|
mtu = min_t(unsigned int, mtu, IP6_MAX_MTU);
|
||||||
out:
|
out:
|
||||||
return mtu - lwtunnel_headroom(fib6_info_nh_lwt(f6i), mtu);
|
return mtu - lwtunnel_headroom(nh->fib_nh_lws, mtu);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dst_entry *icmp6_dst_alloc(struct net_device *dev,
|
struct dst_entry *icmp6_dst_alloc(struct net_device *dev,
|
||||||
|
|
Loading…
Reference in New Issue