mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 01:21:44 +00:00
isisd: guard against adj timer display overflow
An adjacency should be removed when the holdtimer expires, but if the system is overloaded we may end up doing it late. In the meanwhile vtysh will display an incorrect value in the show isis neighbor output, due to an overflow of the unsigned variable used to display the Holdtime, e.g.: pe1# show isis neighbor Area test: System Id Interface L state Holdtime SNPA Spirent-1 2.201 1 Down 26 2020.2020.2020 Spirent-1 2.203 1 Up 21 2020.2020.2020 Spirent-1 2.204 1 Up 18446744073709551615 2020.2020.2020 Spirent-1 2.207 1 Up 18446744073709551615 2020.2020.2020 Spirent-1 2.208 1 Up 18446744073709551615 2020.2020.2020 Spirent-1 2.209 1 Up 0 2020.2020.2020 Spirent-1 2.210 1 Up 18446744073709551615 2020.2020.2020 pe2 12.200 1 Up 30 2020.2020.2020 Guard against that by printing an "Expiring" message instead. Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
This commit is contained in:
parent
e4229afd5f
commit
3cbe31c798
@ -465,11 +465,15 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty,
|
||||
vty_out(vty, "%-3u", adj->level); /* level */
|
||||
vty_out(vty, "%-13s", adj_state2string(adj->adj_state));
|
||||
now = time(NULL);
|
||||
if (adj->last_upd)
|
||||
vty_out(vty, "%-9llu",
|
||||
(unsigned long long)adj->last_upd
|
||||
+ adj->hold_time - now);
|
||||
else
|
||||
if (adj->last_upd) {
|
||||
if (adj->last_upd + adj->hold_time
|
||||
< (unsigned long long)now)
|
||||
vty_out(vty, " Expiring");
|
||||
else
|
||||
vty_out(vty, " %-9llu",
|
||||
(unsigned long long)adj->last_upd
|
||||
+ adj->hold_time - now);
|
||||
} else
|
||||
vty_out(vty, "- ");
|
||||
vty_out(vty, "%-10s", snpa_print(adj->snpa));
|
||||
vty_out(vty, "\n");
|
||||
@ -489,11 +493,15 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty,
|
||||
vty_out(vty, ", Level: %u", adj->level); /* level */
|
||||
vty_out(vty, ", State: %s", adj_state2string(adj->adj_state));
|
||||
now = time(NULL);
|
||||
if (adj->last_upd)
|
||||
vty_out(vty, ", Expires in %s",
|
||||
time2string(adj->last_upd + adj->hold_time
|
||||
- now));
|
||||
else
|
||||
if (adj->last_upd) {
|
||||
if (adj->last_upd + adj->hold_time
|
||||
< (unsigned long long)now)
|
||||
vty_out(vty, " Expiring");
|
||||
else
|
||||
vty_out(vty, ", Expires in %s",
|
||||
time2string(adj->last_upd
|
||||
+ adj->hold_time - now));
|
||||
} else
|
||||
vty_out(vty, ", Expires in %s",
|
||||
time2string(adj->hold_time));
|
||||
vty_out(vty, "\n");
|
||||
|
Loading…
Reference in New Issue
Block a user