|
@@ -1103,8 +1103,11 @@ retry:
|
|
* Lifetime is greater than REGEN_ADVANCE time units. In particular,
|
|
* Lifetime is greater than REGEN_ADVANCE time units. In particular,
|
|
* an implementation must not create a temporary address with a zero
|
|
* an implementation must not create a temporary address with a zero
|
|
* Preferred Lifetime.
|
|
* Preferred Lifetime.
|
|
|
|
+ * Use age calculation as in addrconf_verify to avoid unnecessary
|
|
|
|
+ * temporary addresses being generated.
|
|
*/
|
|
*/
|
|
- if (tmp_prefered_lft <= regen_advance) {
|
|
|
|
|
|
+ age = (now - tmp_tstamp + ADDRCONF_TIMER_FUZZ_MINUS) / HZ;
|
|
|
|
+ if (tmp_prefered_lft <= regen_advance + age) {
|
|
in6_ifa_put(ifp);
|
|
in6_ifa_put(ifp);
|
|
in6_dev_put(idev);
|
|
in6_dev_put(idev);
|
|
ret = -1;
|
|
ret = -1;
|