[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(usagi-users 03567) Privacy Extensions problem



Hello,

I tried Privacy Extensions, but passed amount of time, kernel put out
following message and stoped to make temporary address.

 ipv6_create_tempaddr(): regeneration time exceeded. disabled temporary address support.

I've made a fix-patch with other problems as following;

Hunk 1: If RA does not come in amount of time (in something trouble)
and ifpub(it has EUI-64 addr) becomes deprecated, and then RA comes again
ifpub becomes OK. But temporary address is not made any more.
Fix it.

Hunk 2: redundancy code.

Hunk 3: Main code, initialize regen_count.

Thanks,
--
Hiroyuki YAMAMORI <h-yamamo@xxxxxxxxxxxxxxxx>

--- linux-2.6.14.3usagi-s20051121/net/ipv6/addrconf.c
+++ linux-2.6.14.3new/net/ipv6/addrconf.c
@@ -1754,6 +1754,8 @@
 				ifp->flags &= ~IFA_F_DEPRECATED;
 				spin_unlock(&ifp->lock);
 
+				if (flags&IFA_F_DEPRECATED)
+					create = 1;
 				if (!(flags&IFA_F_TENTATIVE))
 					ipv6_ifa_notify(0, ifp);
 			} else
@@ -2683,10 +2685,6 @@
 			unsigned long regen_advance;
 #endif
 
-#ifdef CONFIG_IPV6_PRIVACY
-			regen_advance = ifp->idev->cnf.regen_max_retry * ifp->idev->cnf.dad_transmits * ifp->idev->nd_parms->retrans_time / HZ;
-#endif
-
 			if (ifp->flags & IFA_F_PERMANENT)
 				continue;
 
@@ -2740,6 +2738,9 @@
 					in6_ifa_hold(ifpub);
 					spin_unlock(&ifp->lock);
 					write_unlock(&addrconf_hash_lock);
+					spin_lock(&ifpub->lock);
+					ifpub->regen_count = 0;
+					spin_unlock(&ifpub->lock);
 					ipv6_create_tempaddr(ifpub, ifp);
 					in6_ifa_put(ifpub);
 					in6_ifa_put(ifp);