}
t = strappend(s, "]");
- if (!s)
+ if (!t)
return NULL;
free(s);
_cleanup_free_ LinkInfo *links = NULL;
const char *state, *word;
- usec_t time, until, ttl;
+ double ttl = -1;
uint32_t capability;
- char buf[LINE_MAX];
int i, r, c, j;
size_t ll;
char **s;
continue;
if (streq(a, "_Chassis")) {
-
- memzero(buf, LINE_MAX);
-
chassis = strdup(b);
if (!chassis)
return -ENOMEM;
} else if (streq(a, "_Port")) {
-
port = strdup(b);
if (!port)
return -ENOMEM;
} else if (streq(a, "_TTL")) {
+ long long unsigned x;
+ usec_t time;
- time = now(CLOCK_BOOTTIME);
-
- sscanf(b, "%lu", &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);
}
- if (until > time) {
- printf("%10s %24s %16s %16lu %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++;
}
}
" -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);
}