Netdev Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH net 0/2] net: fix a mcast issue for tipc udp media
@ 2020-08-03 15:34 Xin Long
2020-08-03 15:34 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Xin Long
2020-08-05 19:20 ` [PATCH net 0/2] net: fix a mcast issue for tipc udp media David Miller
0 siblings, 2 replies; 15+ messages in thread
From: Xin Long @ 2020-08-03 15:34 UTC (permalink / raw)
To: network dev
Cc: davem, Jon Maloy, Ying Xue, tipc-discussion, Alexey Kuznetsov,
Hideaki YOSHIFUJI
Patch 1 is to add a function to get the dev by source address,
whcih will be used by Patch 2.
Xin Long (2):
ipv6: add ipv6_dev_find()
tipc: set ub->ifindex for local ipv6 address
include/net/addrconf.h | 2 ++
net/ipv6/addrconf.c | 39 +++++++++++++++++++++++++++++++++++++++
net/tipc/udp_media.c | 8 ++++++++
3 files changed, 49 insertions(+)
--
2.1.0
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-03 15:34 [PATCH net 0/2] net: fix a mcast issue for tipc udp media Xin Long
@ 2020-08-03 15:34 ` Xin Long
2020-08-03 15:34 ` [PATCH net 2/2] tipc: set ub->ifindex for local ipv6 address Xin Long
` (2 more replies)
2020-08-05 19:20 ` [PATCH net 0/2] net: fix a mcast issue for tipc udp media David Miller
1 sibling, 3 replies; 15+ messages in thread
From: Xin Long @ 2020-08-03 15:34 UTC (permalink / raw)
To: network dev
Cc: davem, Jon Maloy, Ying Xue, tipc-discussion, Alexey Kuznetsov,
Hideaki YOSHIFUJI
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);
+
struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net,
const struct in6_addr *addr,
struct net_device *dev, int strict);
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 840bfdb..857d6f9 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -1983,6 +1983,45 @@ int ipv6_chk_prefix(const struct in6_addr *addr, struct net_device *dev)
}
EXPORT_SYMBOL(ipv6_chk_prefix);
+/**
+ * ipv6_dev_find - find the first device with a given source address.
+ * @net: the net namespace
+ * @addr: the source address
+ *
+ * The caller should be protected by RCU, or RTNL.
+ */
+struct net_device *ipv6_dev_find(struct net *net, const struct in6_addr *addr)
+{
+ unsigned int hash = inet6_addr_hash(net, addr);
+ struct inet6_ifaddr *ifp, *result = NULL;
+ struct net_device *dev = NULL;
+
+ rcu_read_lock();
+ hlist_for_each_entry_rcu(ifp, &inet6_addr_lst[hash], addr_lst) {
+ if (net_eq(dev_net(ifp->idev->dev), net) &&
+ ipv6_addr_equal(&ifp->addr, addr)) {
+ result = ifp;
+ break;
+ }
+ }
+
+ 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;
+ }
+ rcu_read_unlock();
+
+ return dev;
+}
+EXPORT_SYMBOL(ipv6_dev_find);
+
struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
struct net_device *dev, int strict)
{
--
2.1.0
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH net 2/2] tipc: set ub->ifindex for local ipv6 address
2020-08-03 15:34 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Xin Long
@ 2020-08-03 15:34 ` Xin Long
2020-08-05 11:03 ` Ying Xue
2020-08-05 11:03 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Ying Xue
2020-08-06 2:49 ` Hideaki Yoshifuji
2 siblings, 1 reply; 15+ messages in thread
From: Xin Long @ 2020-08-03 15:34 UTC (permalink / raw)
To: network dev
Cc: davem, Jon Maloy, Ying Xue, tipc-discussion, Alexey Kuznetsov,
Hideaki YOSHIFUJI
Without ub->ifindex set for ipv6 address in tipc_udp_enable(),
ipv6_sock_mc_join() may make the wrong dev join the multicast
address in enable_mcast(). This causes that tipc links would
never be created.
So fix it by getting the right netdev and setting ub->ifindex,
as it does for ipv4 address.
Reported-by: Shuang Li <shuali@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
net/tipc/udp_media.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c
index 28a283f..9dec596 100644
--- a/net/tipc/udp_media.c
+++ b/net/tipc/udp_media.c
@@ -738,6 +738,13 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,
b->mtu = b->media->mtu;
#if IS_ENABLED(CONFIG_IPV6)
} else if (local.proto == htons(ETH_P_IPV6)) {
+ struct net_device *dev;
+
+ dev = ipv6_dev_find(net, &local.ipv6);
+ if (!dev) {
+ err = -ENODEV;
+ goto err;
+ }
udp_conf.family = AF_INET6;
udp_conf.use_udp6_tx_checksums = true;
udp_conf.use_udp6_rx_checksums = true;
@@ -745,6 +752,7 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,
udp_conf.local_ip6 = in6addr_any;
else
udp_conf.local_ip6 = local.ipv6;
+ ub->ifindex = dev->ifindex;
b->mtu = 1280;
#endif
} else {
--
2.1.0
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-03 15:34 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Xin Long
2020-08-03 15:34 ` [PATCH net 2/2] tipc: set ub->ifindex for local ipv6 address Xin Long
@ 2020-08-05 11:03 ` Ying Xue
2020-08-05 16:31 ` David Ahern
2020-08-06 2:49 ` Hideaki Yoshifuji
2 siblings, 1 reply; 15+ messages in thread
From: Ying Xue @ 2020-08-05 11:03 UTC (permalink / raw)
To: Xin Long, network dev
Cc: davem, Jon Maloy, tipc-discussion, Alexey Kuznetsov, Hideaki YOSHIFUJI
On 8/3/20 11:34 PM, Xin Long wrote:
> 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>
Acked-by: Ying Xue <ying.xue@windriver.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);
> +
> struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net,
> const struct in6_addr *addr,
> struct net_device *dev, int strict);
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index 840bfdb..857d6f9 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -1983,6 +1983,45 @@ int ipv6_chk_prefix(const struct in6_addr *addr, struct net_device *dev)
> }
> EXPORT_SYMBOL(ipv6_chk_prefix);
>
> +/**
> + * ipv6_dev_find - find the first device with a given source address.
> + * @net: the net namespace
> + * @addr: the source address
> + *
> + * The caller should be protected by RCU, or RTNL.
> + */
> +struct net_device *ipv6_dev_find(struct net *net, const struct in6_addr *addr)
> +{
> + unsigned int hash = inet6_addr_hash(net, addr);
> + struct inet6_ifaddr *ifp, *result = NULL;
> + struct net_device *dev = NULL;
> +
> + rcu_read_lock();
> + hlist_for_each_entry_rcu(ifp, &inet6_addr_lst[hash], addr_lst) {
> + if (net_eq(dev_net(ifp->idev->dev), net) &&
> + ipv6_addr_equal(&ifp->addr, addr)) {
> + result = ifp;
> + break;
> + }
> + }
> +
> + 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;
> + }
> + rcu_read_unlock();
> +
> + return dev;
> +}
> +EXPORT_SYMBOL(ipv6_dev_find);
> +
> struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
> struct net_device *dev, int strict)
> {
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 2/2] tipc: set ub->ifindex for local ipv6 address
2020-08-03 15:34 ` [PATCH net 2/2] tipc: set ub->ifindex for local ipv6 address Xin Long
@ 2020-08-05 11:03 ` Ying Xue
0 siblings, 0 replies; 15+ messages in thread
From: Ying Xue @ 2020-08-05 11:03 UTC (permalink / raw)
To: Xin Long, network dev
Cc: davem, Jon Maloy, tipc-discussion, Alexey Kuznetsov, Hideaki YOSHIFUJI
On 8/3/20 11:34 PM, Xin Long wrote:
> Without ub->ifindex set for ipv6 address in tipc_udp_enable(),
> ipv6_sock_mc_join() may make the wrong dev join the multicast
> address in enable_mcast(). This causes that tipc links would
> never be created.
>
> So fix it by getting the right netdev and setting ub->ifindex,
> as it does for ipv4 address.
>
> Reported-by: Shuang Li <shuali@redhat.com>
> Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Ying Xue <ying.xue@windriver.com>
> ---
> net/tipc/udp_media.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c
> index 28a283f..9dec596 100644
> --- a/net/tipc/udp_media.c
> +++ b/net/tipc/udp_media.c
> @@ -738,6 +738,13 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,
> b->mtu = b->media->mtu;
> #if IS_ENABLED(CONFIG_IPV6)
> } else if (local.proto == htons(ETH_P_IPV6)) {
> + struct net_device *dev;
> +
> + dev = ipv6_dev_find(net, &local.ipv6);
> + if (!dev) {
> + err = -ENODEV;
> + goto err;
> + }
> udp_conf.family = AF_INET6;
> udp_conf.use_udp6_tx_checksums = true;
> udp_conf.use_udp6_rx_checksums = true;
> @@ -745,6 +752,7 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,
> udp_conf.local_ip6 = in6addr_any;
> else
> udp_conf.local_ip6 = local.ipv6;
> + ub->ifindex = dev->ifindex;
> b->mtu = 1280;
> #endif
> } else {
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-05 11:03 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Ying Xue
@ 2020-08-05 16:31 ` David Ahern
0 siblings, 0 replies; 15+ messages in thread
From: David Ahern @ 2020-08-05 16:31 UTC (permalink / raw)
To: Ying Xue, Xin Long, network dev
Cc: davem, Jon Maloy, tipc-discussion, Alexey Kuznetsov, Hideaki YOSHIFUJI
On 8/5/20 5:03 AM, Ying Xue wrote:
>> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
>> index 840bfdb..857d6f9 100644
>> --- a/net/ipv6/addrconf.c
>> +++ b/net/ipv6/addrconf.c
>> @@ -1983,6 +1983,45 @@ int ipv6_chk_prefix(const struct in6_addr *addr, struct net_device *dev)
>> }
>> EXPORT_SYMBOL(ipv6_chk_prefix);
>>
>> +/**
>> + * ipv6_dev_find - find the first device with a given source address.
>> + * @net: the net namespace
>> + * @addr: the source address
>> + *
>> + * The caller should be protected by RCU, or RTNL.
>> + */
>> +struct net_device *ipv6_dev_find(struct net *net, const struct in6_addr *addr)
>> +{
>> + unsigned int hash = inet6_addr_hash(net, addr);
>> + struct inet6_ifaddr *ifp, *result = NULL;
>> + struct net_device *dev = NULL;
>> +
>> + rcu_read_lock();
>> + hlist_for_each_entry_rcu(ifp, &inet6_addr_lst[hash], addr_lst) {
>> + if (net_eq(dev_net(ifp->idev->dev), net) &&
>> + ipv6_addr_equal(&ifp->addr, addr)) {
>> + result = ifp;
>> + break;
>> + }
>> + }
>> +
>> + if (!result) {
>> + struct rt6_info *rt;
>> +
>> + rt = rt6_lookup(net, addr, NULL, 0, NULL, 0);
why is this needed? you have already walked the interfaces in the
namespace and not found the address. Doing a route lookup is beyond the
stated scope of this function.
>> + if (rt) {
>> + dev = rt->dst.dev;
>> + ip6_rt_put(rt);
>> + }
>> + } else {
>> + dev = result->idev->dev;
>> + }
>> + rcu_read_unlock();
>> +
>> + return dev;
>> +}
>> +EXPORT_SYMBOL(ipv6_dev_find);
>> +
>> struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
>> struct net_device *dev, int strict)
>> {
>>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 0/2] net: fix a mcast issue for tipc udp media
2020-08-03 15:34 [PATCH net 0/2] net: fix a mcast issue for tipc udp media Xin Long
2020-08-03 15:34 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Xin Long
@ 2020-08-05 19:20 ` David Miller
1 sibling, 0 replies; 15+ messages in thread
From: David Miller @ 2020-08-05 19:20 UTC (permalink / raw)
To: lucien.xin; +Cc: netdev, jon.maloy, ying.xue, tipc-discussion, kuznet, yoshfuji
From: Xin Long <lucien.xin@gmail.com>
Date: Mon, 3 Aug 2020 23:34:45 +0800
> Patch 1 is to add a function to get the dev by source address,
> whcih will be used by Patch 2.
Series applied, thank you.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-03 15:34 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Xin Long
2020-08-03 15:34 ` [PATCH net 2/2] tipc: set ub->ifindex for local ipv6 address Xin Long
2020-08-05 11:03 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Ying Xue
@ 2020-08-06 2:49 ` Hideaki Yoshifuji
2020-08-06 8:55 ` Xin Long
2 siblings, 1 reply; 15+ messages in thread
From: Hideaki Yoshifuji @ 2020-08-06 2:49 UTC (permalink / raw)
To: Xin Long
Cc: network dev, davem, Jon Maloy, Ying Xue, tipc-discussion,
Alexey Kuznetsov, Hideaki YOSHIFUJI, Hideaki Yoshifuji
Hi,
2020年8月4日(火) 0:35 Xin Long <lucien.xin@gmail.com>:
>
> 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?
--yoshfuji
> struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net,
> const struct in6_addr *addr,
> struct net_device *dev, int strict);
> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> index 840bfdb..857d6f9 100644
> --- a/net/ipv6/addrconf.c
> +++ b/net/ipv6/addrconf.c
> @@ -1983,6 +1983,45 @@ int ipv6_chk_prefix(const struct in6_addr *addr, struct net_device *dev)
> }
> EXPORT_SYMBOL(ipv6_chk_prefix);
>
> +/**
> + * ipv6_dev_find - find the first device with a given source address.
> + * @net: the net namespace
> + * @addr: the source address
> + *
> + * The caller should be protected by RCU, or RTNL.
> + */
> +struct net_device *ipv6_dev_find(struct net *net, const struct in6_addr *addr)
> +{
> + unsigned int hash = inet6_addr_hash(net, addr);
> + struct inet6_ifaddr *ifp, *result = NULL;
> + struct net_device *dev = NULL;
> +
> + rcu_read_lock();
> + hlist_for_each_entry_rcu(ifp, &inet6_addr_lst[hash], addr_lst) {
> + if (net_eq(dev_net(ifp->idev->dev), net) &&
> + ipv6_addr_equal(&ifp->addr, addr)) {
> + result = ifp;
> + break;
> + }
> + }
> +
> + 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;
> + }
> + rcu_read_unlock();
> +
> + return dev;
> +}
> +EXPORT_SYMBOL(ipv6_dev_find);
> +
> struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
> struct net_device *dev, int strict)
> {
> --
> 2.1.0
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-06 2:49 ` Hideaki Yoshifuji
@ 2020-08-06 8:55 ` Xin Long
2020-08-06 14:03 ` David Ahern
0 siblings, 1 reply; 15+ messages in thread
From: Xin Long @ 2020-08-06 8:55 UTC (permalink / raw)
To: Hideaki Yoshifuji, David Ahern
Cc: network dev, davem, Jon Maloy, Ying Xue, tipc-discussion,
Alexey Kuznetsov, Hideaki YOSHIFUJI
On Thu, Aug 6, 2020 at 10:50 AM Hideaki Yoshifuji
<hideaki.yoshifuji@miraclelinux.com> wrote:
>
> Hi,
>
> 2020年8月4日(火) 0:35 Xin Long <lucien.xin@gmail.com>:
> >
> > 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;
+ }
Thanks.
>
> --yoshfuji
>
> > struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net,
> > const struct in6_addr *addr,
> > struct net_device *dev, int strict);
> > diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
> > index 840bfdb..857d6f9 100644
> > --- a/net/ipv6/addrconf.c
> > +++ b/net/ipv6/addrconf.c
> > @@ -1983,6 +1983,45 @@ int ipv6_chk_prefix(const struct in6_addr *addr, struct net_device *dev)
> > }
> > EXPORT_SYMBOL(ipv6_chk_prefix);
> >
> > +/**
> > + * ipv6_dev_find - find the first device with a given source address.
> > + * @net: the net namespace
> > + * @addr: the source address
> > + *
> > + * The caller should be protected by RCU, or RTNL.
> > + */
> > +struct net_device *ipv6_dev_find(struct net *net, const struct in6_addr *addr)
> > +{
> > + unsigned int hash = inet6_addr_hash(net, addr);
> > + struct inet6_ifaddr *ifp, *result = NULL;
> > + struct net_device *dev = NULL;
> > +
> > + rcu_read_lock();
> > + hlist_for_each_entry_rcu(ifp, &inet6_addr_lst[hash], addr_lst) {
> > + if (net_eq(dev_net(ifp->idev->dev), net) &&
> > + ipv6_addr_equal(&ifp->addr, addr)) {
> > + result = ifp;
> > + break;
> > + }
> > + }
> > +
> > + 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;
> > + }
> > + rcu_read_unlock();
> > +
> > + return dev;
> > +}
> > +EXPORT_SYMBOL(ipv6_dev_find);
> > +
> > struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
> > struct net_device *dev, int strict)
> > {
> > --
> > 2.1.0
> >
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-06 8:55 ` Xin Long
@ 2020-08-06 14:03 ` David Ahern
2020-08-07 7:30 ` Xin Long
2020-08-07 9:25 ` Hideaki Yoshifuji
0 siblings, 2 replies; 15+ messages in thread
From: David Ahern @ 2020-08-06 14:03 UTC (permalink / raw)
To: Xin Long, Hideaki Yoshifuji
Cc: network dev, davem, Jon Maloy, Ying Xue, tipc-discussion,
Alexey Kuznetsov, Hideaki YOSHIFUJI
On 8/6/20 2:55 AM, Xin Long wrote:
> On Thu, Aug 6, 2020 at 10:50 AM Hideaki Yoshifuji
> <hideaki.yoshifuji@miraclelinux.com> wrote:
>>
>> Hi,
>>
>> 2020年8月4日(火) 0:35 Xin Long <lucien.xin@gmail.com>:
>>>
>>> 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.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-06 14:03 ` David Ahern
@ 2020-08-07 7:30 ` Xin Long
2020-08-07 9:25 ` Hideaki Yoshifuji
1 sibling, 0 replies; 15+ messages in thread
From: Xin Long @ 2020-08-07 7:30 UTC (permalink / raw)
To: David Ahern, Ying Xue
Cc: Hideaki Yoshifuji, network dev, davem, Jon Maloy,
tipc-discussion, Alexey Kuznetsov, Hideaki YOSHIFUJI
On Thu, Aug 6, 2020 at 10:03 PM David Ahern <dsahern@gmail.com> wrote:
>
> On 8/6/20 2:55 AM, Xin Long wrote:
> > On Thu, Aug 6, 2020 at 10:50 AM Hideaki Yoshifuji
> > <hideaki.yoshifuji@miraclelinux.com> wrote:
> >>
> >> Hi,
> >>
> >> 2020年8月4日(火) 0:35 Xin Long <lucien.xin@gmail.com>:
> >>>
> >>> 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.
Hi, David,
Sorry. it does. I misunderstood the code in __ip_dev_find().
I will delete the rt6_lookup() part from ipv6_dev_find().
Also for the compatibility, tipc part should change to:
@@ -741,10 +741,8 @@ static int tipc_udp_enable(struct net *net,
struct tipc_bearer *b,
struct net_device *dev;
dev = ipv6_dev_find(net, &local.ipv6);
if (!dev)
ub->ifindex = dev->ifindex;
as when dev is not found from the hash list, it should fall back to
the old tipc code.
Ying, what do you think?
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-06 14:03 ` David Ahern
2020-08-07 7:30 ` Xin Long
@ 2020-08-07 9:25 ` Hideaki Yoshifuji
2020-08-09 11:04 ` Xin Long
1 sibling, 1 reply; 15+ messages in thread
From: Hideaki Yoshifuji @ 2020-08-07 9:25 UTC (permalink / raw)
To: David Ahern
Cc: Xin Long, network dev, davem, Jon Maloy, Ying Xue,
tipc-discussion, Alexey Kuznetsov, Hideaki YOSHIFUJI,
Hideaki Yoshifuji
Hi,
2020年8月6日(木) 23:03 David Ahern <dsahern@gmail.com>:
>
> On 8/6/20 2:55 AM, Xin Long wrote:
> > On Thu, Aug 6, 2020 at 10:50 AM Hideaki Yoshifuji
> > <hideaki.yoshifuji@miraclelinux.com> wrote:
> >>
> >> Hi,
> >>
> >> 2020年8月4日(火) 0:35 Xin Long <lucien.xin@gmail.com>:
> >>>
> >>> 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
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-07 9:25 ` Hideaki Yoshifuji
@ 2020-08-09 11:04 ` Xin Long
2020-08-11 2:25 ` Hideaki Yoshifuji
0 siblings, 1 reply; 15+ messages in thread
From: Xin Long @ 2020-08-09 11:04 UTC (permalink / raw)
To: Hideaki Yoshifuji
Cc: David Ahern, network dev, davem, Ying Xue, tipc-discussion,
Alexey Kuznetsov, Hideaki YOSHIFUJI, jmaloy
On Fri, Aug 7, 2020 at 5:26 PM Hideaki Yoshifuji
<hideaki.yoshifuji@miraclelinux.com> wrote:
>
> Hi,
>
> 2020年8月6日(木) 23:03 David Ahern <dsahern@gmail.com>:
> >
> > On 8/6/20 2:55 AM, Xin Long wrote:
> > > On Thu, Aug 6, 2020 at 10:50 AM Hideaki Yoshifuji
> > > <hideaki.yoshifuji@miraclelinux.com> wrote:
> > >>
> > >> Hi,
> > >>
> > >> 2020年8月4日(火) 0:35 Xin Long <lucien.xin@gmail.com>:
> > >>>
> > >>> 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.
Hi, Hideaki san,
Sorry for not understanding your comment earlier.
The bad thing is tipc in iproute2 doesn't seem able to set scope_id.
I saw many places in kernel doing this check:
if (__ipv6_addr_needs_scope_id(atype) &&
!ip6->sin6_scope_id) { return -EINVAL; }
Can I ask why scope id is needed for link-local addresses?
and is that for link-local addresses only?
>
> 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().
Yeah, but if scope id means ifindex for link-local addresses, ipv6_dev_find()
would be more like a function to validate the address with right scope id.
Thanks for your reviewing.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-09 11:04 ` Xin Long
@ 2020-08-11 2:25 ` Hideaki Yoshifuji
2020-08-13 16:25 ` Xin Long
0 siblings, 1 reply; 15+ messages in thread
From: Hideaki Yoshifuji @ 2020-08-11 2:25 UTC (permalink / raw)
To: Xin Long
Cc: David Ahern, network dev, davem, Ying Xue, tipc-discussion,
Alexey Kuznetsov, Hideaki YOSHIFUJI, jmaloy
Hi,
2020年8月9日(日) 19:52 Xin Long <lucien.xin@gmail.com>:
>
> On Fri, Aug 7, 2020 at 5:26 PM Hideaki Yoshifuji
> <hideaki.yoshifuji@miraclelinux.com> wrote:
> >
> > Hi,
> >
> > 2020年8月6日(木) 23:03 David Ahern <dsahern@gmail.com>:
> > >
> > > On 8/6/20 2:55 AM, Xin Long wrote:
> > > > On Thu, Aug 6, 2020 at 10:50 AM Hideaki Yoshifuji
> > > > <hideaki.yoshifuji@miraclelinux.com> wrote:
> > > >>
> > > >> Hi,
> > > >>
> > > >> 2020年8月4日(火) 0:35 Xin Long <lucien.xin@gmail.com>:
> > > >>>
> > > >>> 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.
> Hi, Hideaki san,
>
> Sorry for not understanding your comment earlier.
>
> The bad thing is tipc in iproute2 doesn't seem able to set scope_id.
I looked into the iproute2 code quickly and I think it should; it uses
getaddrinfo(3) and it will fill if you say "fe80::1%eth0" or something
like that.... OR, fix the bug.
> I saw many places in kernel doing this check:
>
> if (__ipv6_addr_needs_scope_id(atype) &&
> !ip6->sin6_scope_id) { return -EINVAL; }
>
> Can I ask why scope id is needed for link-local addresses?
> and is that for link-local addresses only?
Because we distinguish link-local scope addresses on different interfaces.
On the other hand, we do not distinguish global scope addresses on
different interfaces.
>
> >
> > 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().
> Yeah, but if scope id means ifindex for link-local addresses, ipv6_dev_find()
> would be more like a function to validate the address with right scope id.
>
I think we should find a net_device with a specific "valid" (non-tentative)
address here, and your initial implementation is not enough because it does
not reject tentative addresses. I'd recommend using generic ipv6_chk_addr()
inside.
> Thanks for your reviewing.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH net 1/2] ipv6: add ipv6_dev_find()
2020-08-11 2:25 ` Hideaki Yoshifuji
@ 2020-08-13 16:25 ` Xin Long
0 siblings, 0 replies; 15+ messages in thread
From: Xin Long @ 2020-08-13 16:25 UTC (permalink / raw)
To: Hideaki Yoshifuji
Cc: David Ahern, network dev, davem, Ying Xue, tipc-discussion,
Alexey Kuznetsov, Hideaki YOSHIFUJI, jmaloy
On Tue, Aug 11, 2020 at 10:26 AM Hideaki Yoshifuji
<hideaki.yoshifuji@miraclelinux.com> wrote:
>
> Hi,
>
> 2020年8月9日(日) 19:52 Xin Long <lucien.xin@gmail.com>:
> >
> > On Fri, Aug 7, 2020 at 5:26 PM Hideaki Yoshifuji
> > <hideaki.yoshifuji@miraclelinux.com> wrote:
> > >
> > > Hi,
> > >
> > > 2020年8月6日(木) 23:03 David Ahern <dsahern@gmail.com>:
> > > >
> > > > On 8/6/20 2:55 AM, Xin Long wrote:
> > > > > On Thu, Aug 6, 2020 at 10:50 AM Hideaki Yoshifuji
> > > > > <hideaki.yoshifuji@miraclelinux.com> wrote:
> > > > >>
> > > > >> Hi,
> > > > >>
> > > > >> 2020年8月4日(火) 0:35 Xin Long <lucien.xin@gmail.com>:
> > > > >>>
> > > > >>> 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.
> > Hi, Hideaki san,
> >
> > Sorry for not understanding your comment earlier.
> >
> > The bad thing is tipc in iproute2 doesn't seem able to set scope_id.
>
> I looked into the iproute2 code quickly and I think it should; it uses
> getaddrinfo(3) and it will fill if you say "fe80::1%eth0" or something
> like that.... OR, fix the bug.
right, thanks.
>
> > I saw many places in kernel doing this check:
> >
> > if (__ipv6_addr_needs_scope_id(atype) &&
> > !ip6->sin6_scope_id) { return -EINVAL; }
> >
> > Can I ask why scope id is needed for link-local addresses?
> > and is that for link-local addresses only?
>
> Because we distinguish link-local scope addresses on different interfaces.
> On the other hand, we do not distinguish global scope addresses on
> different interfaces.
okay.
>
> >
> > >
> > > 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().
> > Yeah, but if scope id means ifindex for link-local addresses, ipv6_dev_find()
> > would be more like a function to validate the address with right scope id.
> >
>
> I think we should find a net_device with a specific "valid" (non-tentative)
> address here, and your initial implementation is not enough because it does
> not reject tentative addresses. I'd recommend using generic ipv6_chk_addr()
> inside.
ipv6_chk_addr() is calling ipv6_chk_addr_and_flags(), which traverses
the addr hash list again. So I'm thinking to reuse the code of
ipv6_chk_addr_and_flags(), and do:
+static struct net_device *
+__ipv6_chk_addr_and_flags(struct net *net, const struct in6_addr *addr,
+ const struct net_device *dev, bool skip_dev_check,
+ int strict, u32 banned_flags)
{
unsigned int hash = inet6_addr_hash(net, addr);
const struct net_device *l3mdev;
@@ -1926,12 +1918,29 @@ int ipv6_chk_addr_and_flags(struct net *net,
const struct in6_addr *addr,
(!dev || ifp->idev->dev == dev ||
!(ifp->scope&(IFA_LINK|IFA_HOST) || strict))) {
rcu_read_unlock();
- return 1;
+ return ifp->idev->dev;
}
}
rcu_read_unlock();
- return 0;
+ return NULL;
+}
and change these functions to :
int ipv6_chk_addr_and_flags(struct net *net, const struct in6_addr *addr,
const struct net_device *dev, bool skip_dev_check,
int strict, u32 banned_flags)
{
return __ipv6_chk_addr_and_flags(net, addr, dev, skip_dev_check,
strict, banned_flags) ? 1 : 0;
}
EXPORT_SYMBOL(ipv6_chk_addr_and_flags);
struct net_device *ipv6_dev_find(struct net *net, const struct in6_addr *addr,
struct net_device *dev)
{
return __ipv6_chk_addr_and_flags(net, addr, NULL, 0, 1,
IFA_F_TENTATIVE);
}
EXPORT_SYMBOL(ipv6_dev_find);
what do you think?
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2020-08-13 16:13 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-03 15:34 [PATCH net 0/2] net: fix a mcast issue for tipc udp media Xin Long
2020-08-03 15:34 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Xin Long
2020-08-03 15:34 ` [PATCH net 2/2] tipc: set ub->ifindex for local ipv6 address Xin Long
2020-08-05 11:03 ` Ying Xue
2020-08-05 11:03 ` [PATCH net 1/2] ipv6: add ipv6_dev_find() Ying Xue
2020-08-05 16:31 ` David Ahern
2020-08-06 2:49 ` Hideaki Yoshifuji
2020-08-06 8:55 ` Xin Long
2020-08-06 14:03 ` David Ahern
2020-08-07 7:30 ` Xin Long
2020-08-07 9:25 ` Hideaki Yoshifuji
2020-08-09 11:04 ` Xin Long
2020-08-11 2:25 ` Hideaki Yoshifuji
2020-08-13 16:25 ` Xin Long
2020-08-05 19:20 ` [PATCH net 0/2] net: fix a mcast issue for tipc udp media David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).