* rodolfo.garciapenas@telefonica.es <rodolfo.garciapenas@telefonica.es> [2012-01-13 16:31]: > > > Hi, > > Go to the kernel source folder ( /usr/src/linux-source-*/net/ipv6) and > search for "temp_prefered_lft" you will see that the variable is set at > addressconf.c > > .temp_valid_lft = TEMP_VALID_LIFETIME; > > If you search for this constant, is set at include/net/addrconf.h (one week > at 3.0 kernel) > > #define TEMP_VALID_LIFETIME (7*86400) > > Same idea for the other variable (is the next line in the files :-)

The problem is that all Linux kernels before 3.2 did only implement the older RFC3041 which says:

1) Process the Prefix Information Option as defined in [ADDRCONF], either creating a public address or adjusting the lifetimes of existing addresses, both public and temporary. When adjusting the lifetimes of an existing temporary address, only lower the lifetimes. Implementations must not increase the lifetimes of an existing temporary address when processing a Prefix Information Option.

While RFC4941 (updated version of 3041) says:

1. Process the Prefix Information Option as defined in [ADDRCONF], either creating a new public address or adjusting the lifetimes of existing addresses, both public and temporary. If a received option will extend the lifetime of a public address, the lifetimes of temporary addresses should be extended, subject to the overall constraint that no temporary addresses should ever remain "valid" or "preferred" for a time longer than (TEMP_VALID_LIFETIME) or (TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR), respectively. The configuration variables TEMP_VALID_LIFETIME and TEMP_PREFERRED_LIFETIME correspond to approximate target lifetimes for temporary addresses.

So the behaviour you see is a shortcoming of the original specification, fixed by RFC4941.