X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkctl.c;h=aa83f32f5371d7ed35b5e0387a1bfd5271e33fad;hb=484adfd914504cd7e95867cea20ca7af71b888f2;hp=f85058c2726d90adf5eab463fc480e639b3a00d8;hpb=1bf7dd6e7d36e997c7283045c2760d14e02904fd;p=elogind.git diff --git a/src/network/networkctl.c b/src/network/networkctl.c index f85058c27..aa83f32f5 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -898,7 +898,7 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) { _cleanup_free_ LinkInfo *links = NULL; const char *state, *word; - usec_t time, until, ttl; + double ttl = -1; uint32_t capability; int i, r, c, j; size_t ll; @@ -964,13 +964,19 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) { return -ENOMEM; } else if (streq(a, "_TTL")) { + long long unsigned x; + usec_t time; - time = now(CLOCK_BOOTTIME); - - sscanf(b, USEC_FMT, &until); + r = safe_atollu(b, &x); + if (r < 0 || (usec_t) x != x) + return log_warning_errno(r < 0 ? r : ERANGE, + "Failed to parse TTL \"%s\": %m", b); - ttl = (until - time) / USEC_PER_SEC; + time = now(CLOCK_BOOTTIME); + if (x < time) + continue; + ttl = (double) (x - time) / USEC_PER_SEC; } else if (streq(a, "_CAP")) { sscanf(b, "%x", &capability); @@ -980,8 +986,11 @@ static int link_lldp_status(int argc, char *argv[], void *userdata) { } - if (until > time) { - printf("%10s %24s %16s %16"PRIu64" %16s\n", links[i].name, chassis, port, ttl, cap); + if (ttl >= 0) { + printf("%10s %24s %16s %16f %16s\n", + links[i].name, + strna(chassis), strna(port), + ttl, cap); j++; } } @@ -1009,7 +1018,7 @@ static void help(void) { " -a --all Show status for all links\n\n" "Commands:\n" " list List links\n" - " status LINK Show link status\n" + " status [LINK...] Show link status\n" " lldp Show lldp information\n" , program_invocation_short_name); }