diff options
author | 2010-09-27 07:04:30 +0000 | |
---|---|---|
committer | 2010-10-26 12:35:12 -0700 | |
commit | aed65501e8c072b52c5b4dc807cd938659329673 (patch) | |
tree | c604168d37323a2ca02faee256cb0d21e9ccf578 /net/ipv6/addrconf.c | |
parent | fib_hash: fix rcu sparse and logical errors (diff) | |
download | linux-aed65501e8c072b52c5b4dc807cd938659329673.tar.gz linux-aed65501e8c072b52c5b4dc807cd938659329673.tar.bz2 linux-aed65501e8c072b52c5b4dc807cd938659329673.zip |
IPv6: Create temporary address if none exists.
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>
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r-- | net/ipv6/addrconf.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index ec7a91d9e865..8ed6763dae96 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -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); |