Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Oct 2014 23:59:20 +0300
From:      Guy Yur <guyyur@gmail.com>
To:        freebsd-net@freebsd.org
Subject:   [patch] ipv6 prefix lifetime is not updated when address is updated through SIOCAIFADDR_IN6
Message-ID:  <CAC67Hz856UmNsWZq_QZDMsJKNuHJ5QbyJQ=VeXgREorjdhPaSA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--089e0115ec327d2d550504b33de8
Content-Type: text/plain; charset=UTF-8

Hi,

I am running dhcpcd 6.4.3 on 11.0-CURRENT r271879M
to get an ipv6 prefix from my ISP.
The prefix is received with a lifetime of 86400 seconds.
dhcpcd adds an address using the prefix with pltime and vltime of 86400.
Before the address expires dhcpcd refreshes it but the interface route
for the prefix is still deleted after 86400 seconds.

dhcpcd uses SIOCAIFADDR_IN6 to update the address and the kernel
doesn't update the prefix lifetime if the prefix already exists.
Since ndpr_lastupdate is also not updated the prefix will expire.

The issue doesn't happen when updating lifetime using ifconfig
with pltime and vltime since ifconfig removes the address before
adding it (each ifconfig invocation will reset the prefix lifetime).

I created a patch to update the prefix lifetimes in SIOCAIFADDR_IN6
from the added address's lifetime.
If there are two addresses with same prefix but different lifetimes
it means the last one added will set the prefix lifetime.

Another way will be to move the check in SIOCAIFADDR_IN6 to a new
function nd6_prelist_update that will call nd6_prefix_lookup.
If the prefix doesn't exist, call nd6_prelist_add.
If it does exist, copy lifetimes (and ndpr_flags?).


Before:

# netstat -rn -f inet6
WWWW:XXXX:YYYY:ZZZZ::/64           link#1                        U          lan0
WWWW:XXXX:YYYY:ZZZZ::1             link#1                        UHS         lo0
...


After more than 86400 seconds:

# ifconfig -L lan0 inet6
lan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE>
        inet6 fe80::AAAA:BBBB:CCCC:DDDD%lan0 prefixlen 64 scopeid 0x1
        inet6 WWWW:XXXX:YYYY:ZZZZ::1 prefixlen 64 pltime 57257 vltime 57257
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

# ndp -p
WWWW:XXXX:YYYY:ZZZZ::/64 if=lan0
flags=L vltime=0, pltime=0, expired, ref=1
  No advertising router
...

# netstat -rn -f inet6
WWWW:XXXX:YYYY:ZZZZ::1             link#1                        UHS         lo0
...


Regards,
Guy

--089e0115ec327d2d550504b33de8
Content-Type: application/octet-stream; name="update_prefix_ltimes.patch"
Content-Disposition: attachment; filename="update_prefix_ltimes.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_i0wuwjfx0

SW5kZXg6IHN5cy9uZXRpbmV0Ni9pbjYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0aW5ldDYvaW42
LmMJKHJldmlzaW9uIDI3MjU2NikKKysrIHN5cy9uZXRpbmV0Ni9pbjYuYwkod29ya2luZyBjb3B5
KQpAQCAtNjc4LDYgKzY3OCw4IEBAIGluNl9jb250cm9sKHN0cnVjdCBzb2NrZXQgKnNvLCB1X2xv
bmcgY21kLCBjYWRkcl90CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KKwkJZWxzZQorCQkJbmQ2
X3ByZWZpeF91cGRhdGVfbHRpbWVzKHByLCAmcHIwKTsKIAogCQkvKiByZWxhdGUgdGhlIGFkZHJl
c3MgdG8gdGhlIHByZWZpeCAqLwogCQlpZiAoaWEtPmlhNl9uZHByID09IE5VTEwpIHsKSW5kZXg6
IHN5cy9uZXRpbmV0Ni9uZDYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0aW5ldDYvbmQ2LmgJKHJl
dmlzaW9uIDI3MjU2NikKKysrIHN5cy9uZXRpbmV0Ni9uZDYuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQ1LDYgKzQ0NSw3IEBAIGludCBuZDZfcHJlbGlzdF9hZGQoc3RydWN0IG5kX3ByZWZpeGN0bCAq
LCBzdHJ1Y3QKIHZvaWQgcGZ4bGlzdF9vbmxpbmtfY2hlY2sodm9pZCk7CiBzdHJ1Y3QgbmRfZGVm
cm91dGVyICpkZWZyb3V0ZXJfbG9va3VwKHN0cnVjdCBpbjZfYWRkciAqLCBzdHJ1Y3QgaWZuZXQg
Kik7CiBzdHJ1Y3QgbmRfcHJlZml4ICpuZDZfcHJlZml4X2xvb2t1cChzdHJ1Y3QgbmRfcHJlZml4
Y3RsICopOworaW50IG5kNl9wcmVmaXhfdXBkYXRlX2x0aW1lcyhzdHJ1Y3QgbmRfcHJlZml4ICos
IHN0cnVjdCBuZF9wcmVmaXhjdGwgKik7CiB2b2lkIHJ0Nl9mbHVzaChzdHJ1Y3QgaW42X2FkZHIg
Kiwgc3RydWN0IGlmbmV0ICopOwogaW50IG5kNl9zZXRkZWZhdWx0aWZhY2UoaW50KTsKIGludCBp
bjZfdG1waWZhZGQoY29uc3Qgc3RydWN0IGluNl9pZmFkZHIgKiwgaW50LCBpbnQpOwpJbmRleDog
c3lzL25ldGluZXQ2L25kNl9ydHIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0aW5ldDYvbmQ2X3J0
ci5jCShyZXZpc2lvbiAyNzI1NjYpCisrKyBzeXMvbmV0aW5ldDYvbmQ2X3J0ci5jCSh3b3JraW5n
IGNvcHkpCkBAIC04NTMsNiArODUzLDIxIEBAIG5kNl9wcmVmaXhfbG9va3VwKHN0cnVjdCBuZF9w
cmVmaXhjdGwgKmtleSkKIH0KIAogaW50CituZDZfcHJlZml4X3VwZGF0ZV9sdGltZXMoc3RydWN0
IG5kX3ByZWZpeCAqcHIsIHN0cnVjdCBuZF9wcmVmaXhjdGwgKnByY3RsKQoreworCWludCBlcnJv
cjsKKworCXByLT5uZHByX3ZsdGltZSA9IHByY3RsLT5uZHByX3ZsdGltZTsKKwlwci0+bmRwcl9w
bHRpbWUgPSBwcmN0bC0+bmRwcl9wbHRpbWU7CisJaWYgKChlcnJvciA9IGluNl9pbml0X3ByZWZp
eF9sdGltZXMocHIpKSAhPSAwKSB7CisJCXJldHVybiAoZXJyb3IpOworCX0KKwlwci0+bmRwcl9s
YXN0dXBkYXRlID0gdGltZV91cHRpbWU7CisKKwlyZXR1cm4gMDsKK30KKworaW50CiBuZDZfcHJl
bGlzdF9hZGQoc3RydWN0IG5kX3ByZWZpeGN0bCAqcHIsIHN0cnVjdCBuZF9kZWZyb3V0ZXIgKmRy
LAogICAgIHN0cnVjdCBuZF9wcmVmaXggKipuZXdwKQogewo=
--089e0115ec327d2d550504b33de8--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAC67Hz856UmNsWZq_QZDMsJKNuHJ5QbyJQ=VeXgREorjdhPaSA>