Quoted from NetBSD kern/35897:
The KAME code provided an ioctl to set the lifetimes of
an IPv6 address - that is, SIOCSIFALIFETIME_IN6 (it also
provides one to fetch those lifetimes, which does not quite
have the problem described below, but is very ugly because of
the same issue).
The arg data to SIOCSIFALIFETIME_IN6 is the fairly generic
struct in6_ifreq that handles lots of IPv6 ioctl data.
The problem is, that this general interface provides just the
interface name, and the ioctl specific data (which in this case
is the ifru_lifetime field in the ifr_ifru union. ifru_lifetime
contains everything necessary to set the lifetimes for an
address - except which address they're to be set for...
As a specific address is needed, the v6 address ioctl
code simply uses the ifru_addr of the in6_ifreq to select
the address to which the ioctl is to apply.
Unfortunately, ifr_ifru is a union, ifru_addr and ifru_lifetime
occupy the same bits in the request. Unless the lifetimes
that need to be set just happen to bear a startling resemblance
to the address to which they are to be applied, this cannot
possibly work.
Please check:
http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=35897