IPv6: Create temporary address if none exists.
authorGlenn Wurster <gwurster@scs.carleton.ca>
Mon, 27 Sep 2010 07:04:30 +0000 (07:04 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Oct 2010 19:35:12 +0000 (12:35 -0700)
If privacy extentions are enabled, but no current temporary address exists,
then create one when we get a router advertisement.

Signed-off-by: Glenn Wurster <gwurster@scs.carleton.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/addrconf.c

index ec7a91d9e86553475555b9df19d22ced2dc5eb31..8ed6763dae96c426ffb12dd18da2e8fbe916ef10 100644 (file)
@@ -2021,10 +2021,11 @@ ok:
                                        ipv6_ifa_notify(0, ift);
                        }
 
-                       if (create && in6_dev->cnf.use_tempaddr > 0) {
+                       if ((create || list_empty(&in6_dev->tempaddr_list)) && in6_dev->cnf.use_tempaddr > 0) {
                                /*
                                 * When a new public address is created as described in [ADDRCONF],
-                                * also create a new temporary address.
+                                * also create a new temporary address. Also create a temporary
+                                * address if it's enabled but no temporary address currently exists.
                                 */
                                read_unlock_bh(&in6_dev->lock);
                                ipv6_create_tempaddr(ifp, NULL);