Skip to content

Commit a2d481b

Browse files
LorenzoBianconidavem330
authored andcommitted
ipv6: send netlink notifications for manually configured addresses
Send a netlink notification when userspace adds a manually configured address if DAD is enabled and optimistic flag isn't set. Moreover send RTM_DELADDR notifications for tentative addresses. Some userspace applications (e.g. NetworkManager) are interested in addr netlink events albeit the address is still in tentative state, however events are not sent if DAD process is not completed. If the address is added and immediately removed userspace listeners are not notified. This behaviour can be easily reproduced by using veth interfaces: $ ip -b - <<EOF > link add dev vm1 type veth peer name vm2 > link set dev vm1 up > link set dev vm2 up > addr add 2001:db8:a:b:1:2:3:4/64 dev vm1 > addr del 2001:db8:a:b:1:2:3:4/64 dev vm1 EOF This patch reverts the behaviour introduced by the commit f784ad3 ("ipv6: do not send RTM_DELADDR for tentative addresses") Suggested-by: Thomas Haller <thaller@redhat.com> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent a64dcdd commit a2d481b

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

net/ipv6/addrconf.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2901,6 +2901,11 @@ static int inet6_addr_add(struct net *net, int ifindex,
29012901
expires, flags);
29022902
}
29032903

2904+
/* Send a netlink notification if DAD is enabled and
2905+
* optimistic flag is not set
2906+
*/
2907+
if (!(ifp->flags & (IFA_F_OPTIMISTIC | IFA_F_NODAD)))
2908+
ipv6_ifa_notify(0, ifp);
29042909
/*
29052910
* Note that section 3.1 of RFC 4429 indicates
29062911
* that the Optimistic flag should not be set for
@@ -5028,14 +5033,6 @@ static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa)
50285033
struct net *net = dev_net(ifa->idev->dev);
50295034
int err = -ENOBUFS;
50305035

5031-
/* Don't send DELADDR notification for TENTATIVE address,
5032-
* since NEWADDR notification is sent only after removing
5033-
* TENTATIVE flag, if DAD has not failed.
5034-
*/
5035-
if (ifa->flags & IFA_F_TENTATIVE && !(ifa->flags & IFA_F_DADFAILED) &&
5036-
event == RTM_DELADDR)
5037-
return;
5038-
50395036
skb = nlmsg_new(inet6_ifaddr_msgsize(), GFP_ATOMIC);
50405037
if (!skb)
50415038
goto errout;

0 commit comments

Comments
 (0)