diff options
author | Eric Dumazet <edumazet@google.com> | 2024-04-29 13:30:09 +0000 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2024-04-30 18:32:38 -0700 |
commit | 05d6d492097c55f2d153fc3fd33cbe78e1e28e0a (patch) | |
tree | 9adf856d1bf6bece623d78a5f6412ec337927ec5 /net/core | |
parent | b45176703647e5302314c740a51e7d1054a7bd3c (diff) | |
download | linux-05d6d492097c55f2d153fc3fd33cbe78e1e28e0a.tar.gz linux-05d6d492097c55f2d153fc3fd33cbe78e1e28e0a.tar.bz2 linux-05d6d492097c55f2d153fc3fd33cbe78e1e28e0a.zip |
inet: introduce dst_rtable() helper
I added dst_rt6_info() in commit
e8dfd42c17fa ("ipv6: introduce dst_rt6_info() helper")
This patch does a similar change for IPv4.
Instead of (struct rtable *)dst casts, we can use :
#define dst_rtable(_ptr) \
container_of_const(_ptr, struct rtable, dst)
Patch is smaller than IPv6 one, because IPv4 has skb_rtable() helper.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
Link: https://lore.kernel.org/r/20240429133009.1227754-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dst_cache.c | 2 | ||||
-rw-r--r-- | net/core/filter.c | 3 |
2 files changed, 2 insertions, 3 deletions
diff --git a/net/core/dst_cache.c b/net/core/dst_cache.c index b17171345d64..0c0bdb058c5b 100644 --- a/net/core/dst_cache.c +++ b/net/core/dst_cache.c @@ -83,7 +83,7 @@ struct rtable *dst_cache_get_ip4(struct dst_cache *dst_cache, __be32 *saddr) return NULL; *saddr = idst->in_saddr.s_addr; - return container_of(dst, struct rtable, dst); + return dst_rtable(dst); } EXPORT_SYMBOL_GPL(dst_cache_get_ip4); diff --git a/net/core/filter.c b/net/core/filter.c index 6d319c76188b..29165744c505 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2317,8 +2317,7 @@ static int bpf_out_neigh_v4(struct net *net, struct sk_buff *skb, rcu_read_lock(); if (!nh) { - struct dst_entry *dst = skb_dst(skb); - struct rtable *rt = container_of(dst, struct rtable, dst); + struct rtable *rt = skb_rtable(skb); neigh = ip_neigh_for_gw(rt, skb, &is_v6gw); } else if (nh->nh_family == AF_INET6) { |