diff options
Diffstat (limited to 'isisd/isisd.c')
| -rw-r--r-- | isisd/isisd.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/isisd/isisd.c b/isisd/isisd.c index 4d94f243de..2863d2f678 100644 --- a/isisd/isisd.c +++ b/isisd/isisd.c @@ -35,6 +35,7 @@ #include "prefix.h" #include "table.h" #include "qobj.h" +#include "spf_backoff.h" #include "isisd/dict.h" #include "isisd/isis_constants.h" @@ -248,6 +249,9 @@ isis_area_destroy (struct vty *vty, const char *area_tag) THREAD_TIMER_OFF(area->spf_timer[0]); THREAD_TIMER_OFF(area->spf_timer[1]); + spf_backoff_free(area->spf_delay_ietf[0]); + spf_backoff_free(area->spf_delay_ietf[1]); + /* invalidate and validate would delete all routes from zebra */ isis_route_invalidate (area); isis_route_validate (area); @@ -859,6 +863,7 @@ config_write_debug (struct vty *vty) vty_out (vty, "debug isis lsp-sched%s", VTY_NEWLINE); write++; } + write += spf_backoff_write_config(vty); return write; } @@ -1276,6 +1281,57 @@ vty_out_timestr(struct vty *vty, time_t uptime) vty_out (vty, " ago"); } +DEFUN (show_isis_spf_ietf, + show_isis_spf_ietf_cmd, + "show isis spf-delay-ietf", + SHOW_STR + "IS-IS information\n" + "IS-IS SPF delay IETF information\n") +{ + if (!isis) + { + vty_out (vty, "ISIS is not running%s", VTY_NEWLINE); + return CMD_SUCCESS; + } + + struct listnode *node; + struct isis_area *area; + + for (ALL_LIST_ELEMENTS_RO (isis->area_list, node, area)) + { + vty_out (vty, "Area %s:%s", area->area_tag ? area->area_tag : "null", + VTY_NEWLINE); + + for (int level = ISIS_LEVEL1; level <= ISIS_LEVELS; level++) + { + if ((area->is_type & level) == 0) + continue; + + vty_out (vty, " Level-%d:%s", level, VTY_NEWLINE); + vty_out (vty, " SPF delay status: "); + if (area->spf_timer[level -1]) + { + struct timeval remain = thread_timer_remain(area->spf_timer[level - 1]); + vty_out(vty, "Pending, due in %ld msec%s", + remain.tv_sec * 1000 + remain.tv_usec / 1000, + VTY_NEWLINE); + } + else + { + vty_out(vty, "Not scheduled%s", VTY_NEWLINE); + } + + if (area->spf_delay_ietf[level - 1]) { + vty_out(vty, " Using draft-ietf-rtgwg-backoff-algo-04%s", VTY_NEWLINE); + spf_backoff_show(area->spf_delay_ietf[level - 1], vty, " "); + } else { + vty_out(vty, " Using legacy backoff algo%s", VTY_NEWLINE); + } + } + } + return CMD_SUCCESS; +} + DEFUN (show_isis_summary, show_isis_summary_cmd, "show isis summary", @@ -1337,6 +1393,8 @@ DEFUN (show_isis_summary, vty_out (vty, " minimum interval : %d", area->min_spf_interval[level - 1]); + if (area->spf_delay_ietf[level - 1]) + vty_out (vty, " (not used, IETF SPF delay activated)"); vty_out (vty, VTY_NEWLINE); vty_out (vty, " IPv4 route computation:%s", VTY_NEWLINE); @@ -2010,6 +2068,20 @@ isis_config_write (struct vty *vty) write++; } } + + /* IETF SPF interval */ + if (area->spf_delay_ietf[0]) + { + vty_out (vty, " spf-delay-ietf init-delay %ld short-delay %ld long-delay %ld holddown %ld time-to-learn %ld%s", + spf_backoff_init_delay(area->spf_delay_ietf[0]), + spf_backoff_short_delay(area->spf_delay_ietf[0]), + spf_backoff_long_delay(area->spf_delay_ietf[0]), + spf_backoff_holddown(area->spf_delay_ietf[0]), + spf_backoff_timetolearn(area->spf_delay_ietf[0]), + VTY_NEWLINE); + write++; + } + /* Authentication passwords. */ if (area->area_passwd.type == ISIS_PASSWD_TYPE_HMAC_MD5) { @@ -2097,6 +2169,8 @@ isis_init () install_element (VIEW_NODE, &show_isis_summary_cmd); + install_element (VIEW_NODE, &show_isis_spf_ietf_cmd); + install_element (VIEW_NODE, &show_isis_interface_cmd); install_element (VIEW_NODE, &show_isis_interface_detail_cmd); install_element (VIEW_NODE, &show_isis_interface_arg_cmd); @@ -2182,4 +2256,6 @@ isis_init () install_element (ISIS_NODE, &log_adj_changes_cmd); install_element (ISIS_NODE, &no_log_adj_changes_cmd); + + spf_backoff_cmd_init(); } |
