Message ID | 20190813135232.27146-1-liuhangbin@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | David Miller |
Headers | show |
Series | [net] ipv6/addrconf: allow adding multicast addr if IFA_F_MCAUTOJOIN is set | expand |
From: Hangbin Liu <liuhangbin@gmail.com> Date: Tue, 13 Aug 2019 21:52:32 +0800 > The ip address autojoin is not working for IPv6 as ipv6_add_addr() > will return -EADDRNOTAVAIL when adding a multicast address. > > Reported-by: Jianlin Shi <jishi@redhat.com> > Fixes: 93a714d6b53d ("multicast: Extend ip address command to enable multicast group join/leave on") > Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> I don't understand how all of this works and why ipv6_add_addr(), which seems designed explicitly to exclude multicast addresses, should accept them and what all of the possible fallout might be from such a change. Your commit message is way too terse and makes it impossible to evaluate your change. Really, a change of this nature should have a couple paragraphs of text explaining the existing situation, what is wrong with it, how you are fixing it, and why you are fixing it that way. Thanks.
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index dc73888c7859..ced995f3fec4 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -1045,7 +1045,8 @@ ipv6_add_addr(struct inet6_dev *idev, struct ifa6_config *cfg, int err = 0; if (addr_type == IPV6_ADDR_ANY || - addr_type & IPV6_ADDR_MULTICAST || + (addr_type & IPV6_ADDR_MULTICAST && + !(cfg->ifa_flags & IFA_F_MCAUTOJOIN)) || (!(idev->dev->flags & IFF_LOOPBACK) && !netif_is_l3_master(idev->dev) && addr_type & IPV6_ADDR_LOOPBACK))
The ip address autojoin is not working for IPv6 as ipv6_add_addr() will return -EADDRNOTAVAIL when adding a multicast address. Reported-by: Jianlin Shi <jishi@redhat.com> Fixes: 93a714d6b53d ("multicast: Extend ip address command to enable multicast group join/leave on") Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> --- net/ipv6/addrconf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)