mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
ipv6: introduce dst_rt6_info() helper
[ Upstream commit e8dfd42c17faf183415323db1ef0c977be0d6489 ]
Instead of (struct rt6_info *)dst casts, we can use :
#define dst_rt6_info(_ptr) \
container_of_const(_ptr, struct rt6_info, dst)
Some places needed missing const qualifiers :
ip6_confirm_neigh(), ipv6_anycast_destination(),
ipv6_unicast_destination(), has_gateway()
v2: added missing parts (David Ahern)
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Stable-dep-of: 3301ab7d5aeb ("net/ipv6: release expired exception dst cached in socket")
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
19a788bd40
commit
797a4c1f5b
@@ -348,15 +348,15 @@ static int dst_fetch_ha(const struct dst_entry *dst,
|
||||
|
||||
static bool has_gateway(const struct dst_entry *dst, sa_family_t family)
|
||||
{
|
||||
struct rtable *rt;
|
||||
struct rt6_info *rt6;
|
||||
const struct rtable *rt;
|
||||
const struct rt6_info *rt6;
|
||||
|
||||
if (family == AF_INET) {
|
||||
rt = container_of(dst, struct rtable, dst);
|
||||
return rt->rt_uses_gateway;
|
||||
}
|
||||
|
||||
rt6 = container_of(dst, struct rt6_info, dst);
|
||||
rt6 = dst_rt6_info(dst);
|
||||
return rt6->rt6i_flags & RTF_GATEWAY;
|
||||
}
|
||||
|
||||
|
||||
@@ -539,7 +539,7 @@ mlxsw_sp_span_gretap6_route(const struct net_device *to_dev,
|
||||
if (!dst || dst->error)
|
||||
goto out;
|
||||
|
||||
rt6 = container_of(dst, struct rt6_info, dst);
|
||||
rt6 = dst_rt6_info(dst);
|
||||
|
||||
dev = dst->dev;
|
||||
*saddrp = fl6.saddr;
|
||||
|
||||
@@ -655,7 +655,7 @@ static int vrf_finish_output6(struct net *net, struct sock *sk,
|
||||
skb->dev = dev;
|
||||
|
||||
rcu_read_lock();
|
||||
nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr);
|
||||
nexthop = rt6_nexthop(dst_rt6_info(dst), &ipv6_hdr(skb)->daddr);
|
||||
neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
|
||||
if (unlikely(!neigh))
|
||||
neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
|
||||
|
||||
@@ -2629,7 +2629,7 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||
}
|
||||
|
||||
if (!info) {
|
||||
u32 rt6i_flags = ((struct rt6_info *)ndst)->rt6i_flags;
|
||||
u32 rt6i_flags = dst_rt6_info(ndst)->rt6i_flags;
|
||||
|
||||
err = encap_bypass_if_local(skb, dev, vxlan, dst,
|
||||
dst_port, ifindex, vni,
|
||||
|
||||
@@ -956,7 +956,7 @@ static inline struct dst_entry *qeth_dst_check_rcu(struct sk_buff *skb,
|
||||
struct dst_entry *dst = skb_dst(skb);
|
||||
struct rt6_info *rt;
|
||||
|
||||
rt = (struct rt6_info *) dst;
|
||||
rt = dst_rt6_info(dst);
|
||||
if (dst) {
|
||||
if (proto == htons(ETH_P_IPV6))
|
||||
dst = dst_check(dst, rt6_get_cookie(rt));
|
||||
@@ -978,7 +978,7 @@ static inline __be32 qeth_next_hop_v4_rcu(struct sk_buff *skb,
|
||||
static inline struct in6_addr *qeth_next_hop_v6_rcu(struct sk_buff *skb,
|
||||
struct dst_entry *dst)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *) dst;
|
||||
struct rt6_info *rt = dst_rt6_info(dst);
|
||||
|
||||
if (rt && !ipv6_addr_any(&rt->rt6i_gateway))
|
||||
return &rt->rt6i_gateway;
|
||||
|
||||
@@ -237,9 +237,11 @@ struct fib6_result {
|
||||
for (rt = (w)->leaf; rt; \
|
||||
rt = rcu_dereference_protected(rt->fib6_next, 1))
|
||||
|
||||
static inline struct inet6_dev *ip6_dst_idev(struct dst_entry *dst)
|
||||
#define dst_rt6_info(_ptr) container_of_const(_ptr, struct rt6_info, dst)
|
||||
|
||||
static inline struct inet6_dev *ip6_dst_idev(const struct dst_entry *dst)
|
||||
{
|
||||
return ((struct rt6_info *)dst)->rt6i_idev;
|
||||
return dst_rt6_info(dst)->rt6i_idev;
|
||||
}
|
||||
|
||||
static inline bool fib6_requires_src(const struct fib6_info *rt)
|
||||
|
||||
@@ -218,12 +218,11 @@ void rt6_uncached_list_del(struct rt6_info *rt);
|
||||
static inline const struct rt6_info *skb_rt6_info(const struct sk_buff *skb)
|
||||
{
|
||||
const struct dst_entry *dst = skb_dst(skb);
|
||||
const struct rt6_info *rt6 = NULL;
|
||||
|
||||
if (dst)
|
||||
rt6 = container_of(dst, struct rt6_info, dst);
|
||||
return dst_rt6_info(dst);
|
||||
|
||||
return rt6;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -235,7 +234,7 @@ static inline void ip6_dst_store(struct sock *sk, struct dst_entry *dst,
|
||||
{
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
|
||||
np->dst_cookie = rt6_get_cookie((struct rt6_info *)dst);
|
||||
np->dst_cookie = rt6_get_cookie(dst_rt6_info(dst));
|
||||
sk_setup_caps(sk, dst);
|
||||
np->daddr_cache = daddr;
|
||||
#ifdef CONFIG_IPV6_SUBTREES
|
||||
@@ -248,7 +247,7 @@ void ip6_sk_dst_store_flow(struct sock *sk, struct dst_entry *dst,
|
||||
|
||||
static inline bool ipv6_unicast_destination(const struct sk_buff *skb)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *) skb_dst(skb);
|
||||
const struct rt6_info *rt = dst_rt6_info(skb_dst(skb));
|
||||
|
||||
return rt->rt6i_flags & RTF_LOCAL;
|
||||
}
|
||||
@@ -256,7 +255,7 @@ static inline bool ipv6_unicast_destination(const struct sk_buff *skb)
|
||||
static inline bool ipv6_anycast_destination(const struct dst_entry *dst,
|
||||
const struct in6_addr *daddr)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *)dst;
|
||||
const struct rt6_info *rt = dst_rt6_info(dst);
|
||||
|
||||
return rt->rt6i_flags & RTF_ANYCAST ||
|
||||
(rt->rt6i_dst.plen < 127 &&
|
||||
|
||||
@@ -133,7 +133,7 @@ static inline struct lowpan_peer *peer_lookup_dst(struct lowpan_btle_dev *dev,
|
||||
struct in6_addr *daddr,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *)skb_dst(skb);
|
||||
struct rt6_info *rt = dst_rt6_info(skb_dst(skb));
|
||||
int count = atomic_read(&dev->peer_count);
|
||||
const struct in6_addr *nexthop;
|
||||
struct lowpan_peer *peer;
|
||||
|
||||
@@ -112,7 +112,7 @@ void dst_cache_set_ip6(struct dst_cache *dst_cache, struct dst_entry *dst,
|
||||
|
||||
idst = this_cpu_ptr(dst_cache->cache);
|
||||
dst_cache_per_cpu_dst_set(this_cpu_ptr(dst_cache->cache), dst,
|
||||
rt6_get_cookie((struct rt6_info *)dst));
|
||||
rt6_get_cookie(dst_rt6_info(dst)));
|
||||
idst->in6_saddr = *saddr;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dst_cache_set_ip6);
|
||||
|
||||
@@ -2215,7 +2215,7 @@ static int bpf_out_neigh_v6(struct net *net, struct sk_buff *skb,
|
||||
rcu_read_lock();
|
||||
if (!nh) {
|
||||
dst = skb_dst(skb);
|
||||
nexthop = rt6_nexthop(container_of(dst, struct rt6_info, dst),
|
||||
nexthop = rt6_nexthop(dst_rt6_info(dst),
|
||||
&ipv6_hdr(skb)->daddr);
|
||||
} else {
|
||||
nexthop = &nh->ipv6_nh;
|
||||
|
||||
@@ -544,7 +544,7 @@ static int tnl_update_pmtu(struct net_device *dev, struct sk_buff *skb,
|
||||
struct rt6_info *rt6;
|
||||
__be32 daddr;
|
||||
|
||||
rt6 = skb_valid_dst(skb) ? (struct rt6_info *)skb_dst(skb) :
|
||||
rt6 = skb_valid_dst(skb) ? dst_rt6_info(skb_dst(skb)) :
|
||||
NULL;
|
||||
daddr = md ? dst : tunnel->parms.iph.daddr;
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@ static bool icmpv6_xrlim_allow(struct sock *sk, u8 type,
|
||||
} else if (dst->dev && (dst->dev->flags&IFF_LOOPBACK)) {
|
||||
res = true;
|
||||
} else {
|
||||
struct rt6_info *rt = (struct rt6_info *)dst;
|
||||
struct rt6_info *rt = dst_rt6_info(dst);
|
||||
int tmo = net->ipv6.sysctl.icmpv6_time;
|
||||
struct inet_peer *peer;
|
||||
|
||||
@@ -245,7 +245,7 @@ static bool icmpv6_rt_has_prefsrc(struct sock *sk, u8 type,
|
||||
|
||||
dst = ip6_route_output(net, sk, fl6);
|
||||
if (!dst->error) {
|
||||
struct rt6_info *rt = (struct rt6_info *)dst;
|
||||
struct rt6_info *rt = dst_rt6_info(dst);
|
||||
struct in6_addr prefsrc;
|
||||
|
||||
rt6_get_prefsrc(rt, &prefsrc);
|
||||
@@ -622,7 +622,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
|
||||
if (ip6_append_data(sk, icmpv6_getfrag, &msg,
|
||||
len + sizeof(struct icmp6hdr),
|
||||
sizeof(struct icmp6hdr),
|
||||
&ipc6, &fl6, (struct rt6_info *)dst,
|
||||
&ipc6, &fl6, dst_rt6_info(dst),
|
||||
MSG_DONTWAIT)) {
|
||||
ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTERRORS);
|
||||
ip6_flush_pending_frames(sk);
|
||||
@@ -811,7 +811,7 @@ static enum skb_drop_reason icmpv6_echo_reply(struct sk_buff *skb)
|
||||
if (ip6_append_data(sk, icmpv6_getfrag, &msg,
|
||||
skb->len + sizeof(struct icmp6hdr),
|
||||
sizeof(struct icmp6hdr), &ipc6, &fl6,
|
||||
(struct rt6_info *)dst, MSG_DONTWAIT)) {
|
||||
dst_rt6_info(dst), MSG_DONTWAIT)) {
|
||||
__ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTERRORS);
|
||||
ip6_flush_pending_frames(sk);
|
||||
} else {
|
||||
|
||||
@@ -38,7 +38,7 @@ static inline struct ila_params *ila_params_lwtunnel(
|
||||
static int ila_output(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
struct dst_entry *orig_dst = skb_dst(skb);
|
||||
struct rt6_info *rt = (struct rt6_info *)orig_dst;
|
||||
struct rt6_info *rt = dst_rt6_info(orig_dst);
|
||||
struct ila_lwt *ilwt = ila_lwt_lwtunnel(orig_dst->lwtstate);
|
||||
struct dst_entry *dst;
|
||||
int err = -EINVAL;
|
||||
@@ -72,7 +72,7 @@ static int ila_output(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
memset(&fl6, 0, sizeof(fl6));
|
||||
fl6.flowi6_oif = orig_dst->dev->ifindex;
|
||||
fl6.flowi6_iif = LOOPBACK_IFINDEX;
|
||||
fl6.daddr = *rt6_nexthop((struct rt6_info *)orig_dst,
|
||||
fl6.daddr = *rt6_nexthop(dst_rt6_info(orig_dst),
|
||||
&ip6h->daddr);
|
||||
|
||||
dst = ip6_route_output(net, NULL, &fl6);
|
||||
|
||||
@@ -124,7 +124,7 @@ static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *
|
||||
IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUT, skb->len);
|
||||
|
||||
rcu_read_lock();
|
||||
nexthop = rt6_nexthop((struct rt6_info *)dst, daddr);
|
||||
nexthop = rt6_nexthop(dst_rt6_info(dst), daddr);
|
||||
neigh = __ipv6_neigh_lookup_noref(dev, nexthop);
|
||||
|
||||
if (unlikely(IS_ERR_OR_NULL(neigh))) {
|
||||
@@ -606,7 +606,7 @@ int ip6_forward(struct sk_buff *skb)
|
||||
* send a redirect.
|
||||
*/
|
||||
|
||||
rt = (struct rt6_info *) dst;
|
||||
rt = dst_rt6_info(dst);
|
||||
if (rt->rt6i_flags & RTF_GATEWAY)
|
||||
target = &rt->rt6i_gateway;
|
||||
else
|
||||
@@ -861,7 +861,7 @@ int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
|
||||
int (*output)(struct net *, struct sock *, struct sk_buff *))
|
||||
{
|
||||
struct sk_buff *frag;
|
||||
struct rt6_info *rt = (struct rt6_info *)skb_dst(skb);
|
||||
struct rt6_info *rt = dst_rt6_info(skb_dst(skb));
|
||||
struct ipv6_pinfo *np = skb->sk && !dev_recursion_level() ?
|
||||
inet6_sk(skb->sk) : NULL;
|
||||
bool mono_delivery_time = skb->mono_delivery_time;
|
||||
@@ -1069,7 +1069,7 @@ static struct dst_entry *ip6_sk_dst_check(struct sock *sk,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rt = (struct rt6_info *)dst;
|
||||
rt = dst_rt6_info(dst);
|
||||
/* Yes, checking route validity in not connected
|
||||
* case is not very simple. Take into account,
|
||||
* that we do not support routing by source, TOS,
|
||||
@@ -1124,7 +1124,7 @@ static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk,
|
||||
struct rt6_info *rt;
|
||||
|
||||
*dst = ip6_route_output(net, sk, fl6);
|
||||
rt = (*dst)->error ? NULL : (struct rt6_info *)*dst;
|
||||
rt = (*dst)->error ? NULL : dst_rt6_info(*dst);
|
||||
|
||||
rcu_read_lock();
|
||||
from = rt ? rcu_dereference(rt->from) : NULL;
|
||||
@@ -1166,7 +1166,7 @@ static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk,
|
||||
* dst entry and replace it instead with the
|
||||
* dst entry of the nexthop router
|
||||
*/
|
||||
rt = (struct rt6_info *) *dst;
|
||||
rt = dst_rt6_info(*dst);
|
||||
rcu_read_lock();
|
||||
n = __ipv6_neigh_lookup_noref(rt->dst.dev,
|
||||
rt6_nexthop(rt, &fl6->daddr));
|
||||
@@ -1500,7 +1500,7 @@ static int __ip6_append_data(struct sock *sk,
|
||||
int offset = 0;
|
||||
bool zc = false;
|
||||
u32 tskey = 0;
|
||||
struct rt6_info *rt = (struct rt6_info *)cork->dst;
|
||||
struct rt6_info *rt = dst_rt6_info(cork->dst);
|
||||
bool paged, hold_tskey, extra_uref = false;
|
||||
struct ipv6_txoptions *opt = v6_cork->opt;
|
||||
int csummode = CHECKSUM_NONE;
|
||||
@@ -1959,7 +1959,7 @@ struct sk_buff *__ip6_make_skb(struct sock *sk,
|
||||
struct net *net = sock_net(sk);
|
||||
struct ipv6hdr *hdr;
|
||||
struct ipv6_txoptions *opt = v6_cork->opt;
|
||||
struct rt6_info *rt = (struct rt6_info *)cork->base.dst;
|
||||
struct rt6_info *rt = dst_rt6_info(cork->base.dst);
|
||||
struct flowi6 *fl6 = &cork->fl.u.ip6;
|
||||
unsigned char proto = fl6->flowi6_proto;
|
||||
|
||||
@@ -2031,7 +2031,7 @@ out:
|
||||
int ip6_send_skb(struct sk_buff *skb)
|
||||
{
|
||||
struct net *net = sock_net(skb->sk);
|
||||
struct rt6_info *rt = (struct rt6_info *)skb_dst(skb);
|
||||
struct rt6_info *rt = dst_rt6_info(skb_dst(skb));
|
||||
int err;
|
||||
|
||||
rcu_read_lock();
|
||||
|
||||
@@ -2290,7 +2290,7 @@ int ip6mr_get_route(struct net *net, struct sk_buff *skb, struct rtmsg *rtm,
|
||||
int err;
|
||||
struct mr_table *mrt;
|
||||
struct mfc6_cache *cache;
|
||||
struct rt6_info *rt = (struct rt6_info *)skb_dst(skb);
|
||||
struct rt6_info *rt = dst_rt6_info(skb_dst(skb));
|
||||
|
||||
rcu_read_lock();
|
||||
mrt = __ip6mr_get_table(net, RT6_TABLE_DFLT);
|
||||
|
||||
@@ -1710,7 +1710,7 @@ void ndisc_send_redirect(struct sk_buff *skb, const struct in6_addr *target)
|
||||
if (IS_ERR(dst))
|
||||
return;
|
||||
|
||||
rt = (struct rt6_info *) dst;
|
||||
rt = dst_rt6_info(dst);
|
||||
|
||||
if (rt->rt6i_flags & RTF_GATEWAY) {
|
||||
ND_PRINTK(2, warn,
|
||||
|
||||
@@ -154,7 +154,7 @@ static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
||||
dst = ip6_sk_dst_lookup_flow(sk, &fl6, daddr, false);
|
||||
if (IS_ERR(dst))
|
||||
return PTR_ERR(dst);
|
||||
rt = (struct rt6_info *) dst;
|
||||
rt = dst_rt6_info(dst);
|
||||
|
||||
if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
|
||||
fl6.flowi6_oif = np->mcast_oif;
|
||||
|
||||
@@ -592,7 +592,7 @@ static int rawv6_send_hdrinc(struct sock *sk, struct msghdr *msg, int length,
|
||||
struct ipv6hdr *iph;
|
||||
struct sk_buff *skb;
|
||||
int err;
|
||||
struct rt6_info *rt = (struct rt6_info *)*dstp;
|
||||
struct rt6_info *rt = dst_rt6_info(*dstp);
|
||||
int hlen = LL_RESERVED_SPACE(rt->dst.dev);
|
||||
int tlen = rt->dst.dev->needed_tailroom;
|
||||
|
||||
@@ -911,7 +911,7 @@ back_from_confirm:
|
||||
ipc6.opt = opt;
|
||||
lock_sock(sk);
|
||||
err = ip6_append_data(sk, raw6_getfrag, &rfv,
|
||||
len, 0, &ipc6, &fl6, (struct rt6_info *)dst,
|
||||
len, 0, &ipc6, &fl6, dst_rt6_info(dst),
|
||||
msg->msg_flags);
|
||||
|
||||
if (err)
|
||||
|
||||
@@ -227,7 +227,7 @@ static struct neighbour *ip6_dst_neigh_lookup(const struct dst_entry *dst,
|
||||
struct sk_buff *skb,
|
||||
const void *daddr)
|
||||
{
|
||||
const struct rt6_info *rt = container_of(dst, struct rt6_info, dst);
|
||||
const struct rt6_info *rt = dst_rt6_info(dst);
|
||||
|
||||
return ip6_neigh_lookup(rt6_nexthop(rt, &in6addr_any),
|
||||
dst->dev, skb, daddr);
|
||||
@@ -235,8 +235,8 @@ static struct neighbour *ip6_dst_neigh_lookup(const struct dst_entry *dst,
|
||||
|
||||
static void ip6_confirm_neigh(const struct dst_entry *dst, const void *daddr)
|
||||
{
|
||||
const struct rt6_info *rt = dst_rt6_info(dst);
|
||||
struct net_device *dev = dst->dev;
|
||||
struct rt6_info *rt = (struct rt6_info *)dst;
|
||||
|
||||
daddr = choose_neigh_daddr(rt6_nexthop(rt, &in6addr_any), NULL, daddr);
|
||||
if (!daddr)
|
||||
@@ -355,7 +355,7 @@ EXPORT_SYMBOL(ip6_dst_alloc);
|
||||
|
||||
static void ip6_dst_destroy(struct dst_entry *dst)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *)dst;
|
||||
struct rt6_info *rt = dst_rt6_info(dst);
|
||||
struct fib6_info *from;
|
||||
struct inet6_dev *idev;
|
||||
|
||||
@@ -374,7 +374,7 @@ static void ip6_dst_destroy(struct dst_entry *dst)
|
||||
|
||||
static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *)dst;
|
||||
struct rt6_info *rt = dst_rt6_info(dst);
|
||||
struct inet6_dev *idev = rt->rt6i_idev;
|
||||
struct fib6_info *from;
|
||||
|
||||
@@ -1284,7 +1284,7 @@ struct rt6_info *rt6_lookup(struct net *net, const struct in6_addr *daddr,
|
||||
|
||||
dst = fib6_rule_lookup(net, &fl6, skb, flags, ip6_pol_route_lookup);
|
||||
if (dst->error == 0)
|
||||
return (struct rt6_info *) dst;
|
||||
return dst_rt6_info(dst);
|
||||
|
||||
dst_release(dst);
|
||||
|
||||
@@ -2641,7 +2641,7 @@ struct dst_entry *ip6_route_output_flags(struct net *net,
|
||||
|
||||
rcu_read_lock();
|
||||
dst = ip6_route_output_flags_noref(net, sk, fl6, flags);
|
||||
rt6 = (struct rt6_info *)dst;
|
||||
rt6 = dst_rt6_info(dst);
|
||||
/* For dst cached in uncached_list, refcnt is already taken. */
|
||||
if (list_empty(&rt6->dst.rt_uncached) && !dst_hold_safe(dst)) {
|
||||
dst = &net->ipv6.ip6_null_entry->dst;
|
||||
@@ -2655,7 +2655,7 @@ EXPORT_SYMBOL_GPL(ip6_route_output_flags);
|
||||
|
||||
struct dst_entry *ip6_blackhole_route(struct net *net, struct dst_entry *dst_orig)
|
||||
{
|
||||
struct rt6_info *rt, *ort = (struct rt6_info *) dst_orig;
|
||||
struct rt6_info *rt, *ort = dst_rt6_info(dst_orig);
|
||||
struct net_device *loopback_dev = net->loopback_dev;
|
||||
struct dst_entry *new = NULL;
|
||||
|
||||
@@ -2738,7 +2738,7 @@ INDIRECT_CALLABLE_SCOPE struct dst_entry *ip6_dst_check(struct dst_entry *dst,
|
||||
struct fib6_info *from;
|
||||
struct rt6_info *rt;
|
||||
|
||||
rt = container_of(dst, struct rt6_info, dst);
|
||||
rt = dst_rt6_info(dst);
|
||||
|
||||
if (rt->sernum)
|
||||
return rt6_is_valid(rt) ? dst : NULL;
|
||||
@@ -2767,7 +2767,7 @@ EXPORT_INDIRECT_CALLABLE(ip6_dst_check);
|
||||
static void ip6_negative_advice(struct sock *sk,
|
||||
struct dst_entry *dst)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *) dst;
|
||||
struct rt6_info *rt = dst_rt6_info(dst);
|
||||
|
||||
if (rt->rt6i_flags & RTF_CACHE) {
|
||||
rcu_read_lock();
|
||||
@@ -2790,7 +2790,7 @@ static void ip6_link_failure(struct sk_buff *skb)
|
||||
|
||||
icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0);
|
||||
|
||||
rt = (struct rt6_info *) skb_dst(skb);
|
||||
rt = dst_rt6_info(skb_dst(skb));
|
||||
if (rt) {
|
||||
rcu_read_lock();
|
||||
if (rt->rt6i_flags & RTF_CACHE) {
|
||||
@@ -2846,7 +2846,7 @@ static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk,
|
||||
bool confirm_neigh)
|
||||
{
|
||||
const struct in6_addr *daddr, *saddr;
|
||||
struct rt6_info *rt6 = (struct rt6_info *)dst;
|
||||
struct rt6_info *rt6 = dst_rt6_info(dst);
|
||||
|
||||
/* Note: do *NOT* check dst_metric_locked(dst, RTAX_MTU)
|
||||
* IPv6 pmtu discovery isn't optional, so 'mtu lock' cannot disable it.
|
||||
@@ -4169,7 +4169,7 @@ static void rt6_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_bu
|
||||
}
|
||||
}
|
||||
|
||||
rt = (struct rt6_info *) dst;
|
||||
rt = dst_rt6_info(dst);
|
||||
if (rt->rt6i_flags & RTF_REJECT) {
|
||||
net_dbg_ratelimited("rt6_redirect: source isn't a valid nexthop for redirect target\n");
|
||||
return;
|
||||
@@ -5604,7 +5604,7 @@ static int rt6_fill_node(struct net *net, struct sk_buff *skb,
|
||||
int iif, int type, u32 portid, u32 seq,
|
||||
unsigned int flags)
|
||||
{
|
||||
struct rt6_info *rt6 = (struct rt6_info *)dst;
|
||||
struct rt6_info *rt6 = dst_rt6_info(dst);
|
||||
struct rt6key *rt6_dst, *rt6_src;
|
||||
u32 *pmetrics, table, rt6_flags;
|
||||
unsigned char nh_flags = 0;
|
||||
@@ -6107,7 +6107,7 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
||||
}
|
||||
|
||||
|
||||
rt = container_of(dst, struct rt6_info, dst);
|
||||
rt = dst_rt6_info(dst);
|
||||
if (rt->dst.error) {
|
||||
err = rt->dst.error;
|
||||
ip6_rt_put(rt);
|
||||
|
||||
@@ -101,11 +101,9 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
|
||||
struct dst_entry *dst = skb_dst(skb);
|
||||
|
||||
if (dst && dst_hold_safe(dst)) {
|
||||
const struct rt6_info *rt = (const struct rt6_info *)dst;
|
||||
|
||||
rcu_assign_pointer(sk->sk_rx_dst, dst);
|
||||
sk->sk_rx_dst_ifindex = skb->skb_iif;
|
||||
sk->sk_rx_dst_cookie = rt6_get_cookie(rt);
|
||||
sk->sk_rx_dst_cookie = rt6_get_cookie(dst_rt6_info(dst));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user