diff options
author | Tom Gundersen <teg@jklm.no> | 2014-08-14 14:01:11 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-08-14 14:07:45 +0200 |
commit | c6d3b3034acf1faec43b1281d3c7b94c23eb69d1 (patch) | |
tree | 0717af56d82b21d67d8c863691283d93b93025c8 | |
parent | 9528592ff8d7ff361da430285deba8196e8984d5 (diff) |
networkd: link - print address lifetime for tracked addresses
This should help in debugging issues with DHCP lease renewal.
-rw-r--r-- | src/network/networkd-link.c | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 908d834cd4..d929a80129 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1336,6 +1336,8 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, _cleanup_address_free_ Address *address = NULL; Address *ad; char buf[INET6_ADDRSTRLEN]; + char valid_buf[FORMAT_TIMESPAN_MAX]; + const char *valid_str = NULL; bool address_dropped = false; int r, ifindex; @@ -1419,6 +1421,17 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, return 0; } + r = sd_rtnl_message_read_cache_info(message, IFA_CACHEINFO, + &address->cinfo); + if (r >= 0) { + if (address->cinfo.ifa_valid == CACHE_INFO_INFINITY_LIFE_TIME) + valid_str = "ever"; + else + valid_str = format_timespan(valid_buf, FORMAT_TIMESPAN_MAX, + address->cinfo.ifa_valid * USEC_PER_SEC, + USEC_PER_SEC); + } + LIST_FOREACH(addresses, ad, link->addresses) { if (address_equal(ad, address)) { LIST_REMOVE(addresses, link->addresses, ad); @@ -1434,11 +1447,13 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, switch (type) { case RTM_NEWADDR: if (!address_dropped) - log_debug_link(link, "added address: %s/%u", buf, - address->prefixlen); + log_debug_link(link, "added address: %s/%u (valid for %s)", + buf, address->prefixlen, + strna(valid_str)); else - log_debug_link(link, "updated address: %s/%u", buf, - address->prefixlen); + log_debug_link(link, "updated address: %s/%u (valid for %s)", + buf, address->prefixlen, + strna(valid_str)); LIST_PREPEND(addresses, link->addresses, address); address = NULL; @@ -1448,14 +1463,16 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, break; case RTM_DELADDR: if (address_dropped) { - log_debug_link(link, "removed address: %s/%u", buf, - address->prefixlen); + log_debug_link(link, "removed address: %s/%u (valid for %s)", + buf, address->prefixlen, + strna(valid_str)); link_save(link); } else log_warning_link(link, - "removing non-existent address: %s/%u", - buf, address->prefixlen); + "removing non-existent address: %s/%u (valid for %s)", + buf, address->prefixlen, + strna(valid_str)); break; default: |