Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
From: Hideaki Yoshifuji <hidden>
Date: 2020-08-07 09:26:20
Hi, 2020年8月6日(木) 23:03 David Ahern [off-list ref]:
On 8/6/20 2:55 AM, Xin Long wrote:quoted
On Thu, Aug 6, 2020 at 10:50 AM Hideaki Yoshifuji [off-list ref] wrote:quoted
Hi, 2020年8月4日(火) 0:35 Xin Long [off-list ref]:quoted
This is to add an ip_dev_find like function for ipv6, used to find the dev by saddr. It will be used by TIPC protocol. So also export it. Signed-off-by: Xin Long <lucien.xin@gmail.com> --- include/net/addrconf.h | 2 ++ net/ipv6/addrconf.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+)diff --git a/include/net/addrconf.h b/include/net/addrconf.h index 8418b7d..ba3f6c15 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h@@ -97,6 +97,8 @@ bool ipv6_chk_custom_prefix(const struct in6_addr *addr, int ipv6_chk_prefix(const struct in6_addr *addr, struct net_device *dev); +struct net_device *ipv6_dev_find(struct net *net, const struct in6_addr *addr); +How do we handle link-local addresses?This is what "if (!result)" branch meant to do: + if (!result) { + struct rt6_info *rt; + + rt = rt6_lookup(net, addr, NULL, 0, NULL, 0); + if (rt) { + dev = rt->dst.dev; + ip6_rt_put(rt); + } + } else { + dev = result->idev->dev; + }the stated purpose of this function is to find the netdevice to which an address is attached. A route lookup should not be needed. Walking the address hash list finds the address and hence the netdev or it does not.
User supplied scope id which should be set for link-local addresses in TIPC_NLA_UDP_LOCAL attribute must be honored when we check the address. ipv6_chk_addr() can check if the address and supplied ifindex is a valid local address. Or introduce an extra ifindex argument to ipv6_dev_find(). --yoshfuji