From d7e60dd7a9f0213aaa82d256a78ab74887946e53 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Thu, 29 Jun 2006 20:20:52 +0000 Subject: [ospfd] Implement new ospf router subcommand "log-adjacency-changes [detail]" 2006-06-28 Erik Muller * ospfd.h: Define 2 new struct ospf config flags: OSPF_LOG_ADJACENCY_CHANGES and OSPF_LOG_ADJACENCY_DETAIL * ospf_nsm.c (nsm_change_state): Log adjacency changes if requested. * ospf_vty.c (ospf_log_adjacency_changes): New command function to implement ospf subcommand "log-adjacency-changes [detail]". (no_ospf_log_adjacency_changes) Turn off log-adjacency-changes. (show_ip_ospf) Show whether adjacency changes are logged. (ospf_config_write) Add "log-adjacency-changes [detail]" to config. (ospf_vty_init) Add ospf_log_adjacency_changes and no_ospf_log_adjacency_changes. * ospfd.texi: Document new ospf router subcommand "log-adjacency-changes [detail]". --- doc/ChangeLog | 5 ++++ doc/ospfd.texi | 7 +++++ ospfd/ChangeLog | 14 ++++++++++ ospfd/ospf_nsm.c | 12 ++++++++- ospfd/ospf_vty.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- ospfd/ospfd.h | 2 ++ 6 files changed, 116 insertions(+), 3 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 488ea309..3b5e45bb 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2006-06-28 Erik Muller + + * ospfd.texi: Document new ospf router subcommand + "log-adjacency-changes [detail]". + 2006-06-26 Paul Jakma * ospfd.texi: Document that MD5 keyid is part of the protocol. diff --git a/doc/ospfd.texi b/doc/ospfd.texi index ff0d78b9..c859782e 100644 --- a/doc/ospfd.texi +++ b/doc/ospfd.texi @@ -90,6 +90,13 @@ but still both preferred to external paths. This command should NOT be set normally. @end deffn +@deffn {OSPF Command} {log-adjacency-changes [detail]} {} +@deffnx {OSPF Command} {no log-adjacency-changes [detail]} {} +Configures ospfd to log changes in adjacency. With the optional +detail argument, all changes in adjacency status are shown. Without detail, +only changes to full or regressions are shown. +@end deffn + @deffn {OSPF Command} {passive interface @var{interface}} {} @deffnx {OSPF Command} {no passive interface @var{interface}} {} diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index 4c8fb66f..f045c1d1 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -1,3 +1,17 @@ +2006-06-28 Erik Muller + + * ospfd.h: Define 2 new struct ospf config flags: + OSPF_LOG_ADJACENCY_CHANGES and OSPF_LOG_ADJACENCY_DETAIL + * ospf_nsm.c (nsm_change_state): Log adjacency changes if + requested. + * ospf_vty.c (ospf_log_adjacency_changes): New command function + to implement ospf subcommand "log-adjacency-changes [detail]". + (no_ospf_log_adjacency_changes) Turn off log-adjacency-changes. + (show_ip_ospf) Show whether adjacency changes are logged. + (ospf_config_write) Add "log-adjacency-changes [detail]" to config. + (ospf_vty_init) Add ospf_log_adjacency_changes and + no_ospf_log_adjacency_changes. + 2006-06-26 Paul Jakma * ospf_abr.c: (general) NSSA translate-candidate ABRs need to diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c index 8a93f0e6..878ab567 100644 --- a/ospfd/ospf_nsm.c +++ b/ospfd/ospf_nsm.c @@ -697,7 +697,17 @@ nsm_change_state (struct ospf_neighbor *nbr, int state) if (oi->type == OSPF_IFTYPE_VIRTUALLINK) vl_area = ospf_area_lookup_by_area_id (oi->ospf, oi->vl_data->vl_area_id); - + + /* Optionally notify about adjacency changes */ + if (CHECK_FLAG(oi->ospf->config, OSPF_LOG_ADJACENCY_CHANGES) && + (old_state != state) && + (CHECK_FLAG(oi->ospf->config, OSPF_LOG_ADJACENCY_DETAIL) || + (state == NSM_Full) || (state < old_state))) + zlog_notice("AdjChg: Nbr %s on %s: %s -> %s", + inet_ntoa (nbr->router_id), IF_NAME (nbr->oi), + LOOKUP (ospf_nsm_state_msg, old_state), + LOOKUP (ospf_nsm_state_msg, state)); + #ifdef HAVE_SNMP /* Terminal state or regression */ if ((state == NSM_Full) || (state == NSM_TwoWay) || (state < old_state)) diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index 20dc940a..0298af22 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -2056,6 +2056,56 @@ DEFUN (no_ospf_abr_type, return CMD_SUCCESS; } +DEFUN (ospf_log_adjacency_changes, + ospf_log_adjacency_changes_cmd, + "log-adjacency-changes", + "Log changes in adjacency state\n") +{ + struct ospf *ospf = vty->index; + + SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES); + return CMD_SUCCESS; +} + +DEFUN (ospf_log_adjacency_changes_detail, + ospf_log_adjacency_changes_detail_cmd, + "log-adjacency-changes detail", + "Log changes in adjacency state\n" + "Log all state changes\n") +{ + struct ospf *ospf = vty->index; + + SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES); + SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL); + return CMD_SUCCESS; +} + +DEFUN (no_ospf_log_adjacency_changes, + no_ospf_log_adjacency_changes_cmd, + "no log-adjacency-changes", + NO_STR + "Log changes in adjacency state\n") +{ + struct ospf *ospf = vty->index; + + UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL); + UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES); + return CMD_SUCCESS; +} + +DEFUN (no_ospf_log_adjacency_changes_detail, + no_ospf_log_adjacency_changes_detail_cmd, + "no log-adjacency-changes detail", + NO_STR + "Log changes in adjacency state\n" + "Log all state changes\n") +{ + struct ospf *ospf = vty->index; + + UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL); + return CMD_SUCCESS; +} + DEFUN (ospf_compatible_rfc1583, ospf_compatible_rfc1583_cmd, "compatible rfc1583", @@ -2676,8 +2726,18 @@ DEFUN (show_ip_ospf, ospf_lsdb_checksum (ospf->lsdb, OSPF_OPAQUE_AS_LSA), VTY_NEWLINE); #endif /* HAVE_OPAQUE_LSA */ /* Show number of areas attached. */ - vty_out (vty, " Number of areas attached to this router: %d%s%s", - listcount (ospf->areas), VTY_NEWLINE, VTY_NEWLINE); + vty_out (vty, " Number of areas attached to this router: %d%s", + listcount (ospf->areas), VTY_NEWLINE); + + if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES)) + { + if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL)) + vty_out(vty, " All adjacency changes are logged%s",VTY_NEWLINE); + else + vty_out(vty, " Adjacency changes are logged%s",VTY_NEWLINE); + } + + vty_out (vty, "%s",VTY_NEWLINE); /* Show each area status. */ for (ALL_LIST_ELEMENTS (ospf->areas, node, nnode, area)) @@ -7752,6 +7812,15 @@ ospf_config_write (struct vty *vty) vty_out (vty, " ospf abr-type %s%s", ospf_abr_type_str[ospf->abr_type], VTY_NEWLINE); + /* log-adjacency-changes flag print. */ + if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES)) + { + vty_out(vty, " log-adjacency-changes"); + if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL)) + vty_out(vty, " detail"); + vty_out(vty, "%s", VTY_NEWLINE); + } + /* RFC1583 compatibility flag print -- Compatible with CISCO 12.1. */ if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE)) vty_out (vty, " compatible rfc1583%s", VTY_NEWLINE); @@ -8123,6 +8192,12 @@ ospf_vty_init (void) install_element (OSPF_NODE, &ospf_abr_type_cmd); install_element (OSPF_NODE, &no_ospf_abr_type_cmd); + /* "ospf log-adjacency-changes" commands. */ + install_element (OSPF_NODE, &ospf_log_adjacency_changes_cmd); + install_element (OSPF_NODE, &ospf_log_adjacency_changes_detail_cmd); + install_element (OSPF_NODE, &no_ospf_log_adjacency_changes_cmd); + install_element (OSPF_NODE, &no_ospf_log_adjacency_changes_detail_cmd); + /* "ospf rfc1583-compatible" commands. */ install_element (OSPF_NODE, &ospf_rfc1583_flag_cmd); install_element (OSPF_NODE, &no_ospf_rfc1583_flag_cmd); diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h index f2a61094..c15b4d39 100644 --- a/ospfd/ospfd.h +++ b/ospfd/ospfd.h @@ -181,6 +181,8 @@ struct ospf u_char config; #define OSPF_RFC1583_COMPATIBLE (1 << 0) #define OSPF_OPAQUE_CAPABLE (1 << 2) +#define OSPF_LOG_ADJACENCY_CHANGES (1 << 3) +#define OSPF_LOG_ADJACENCY_DETAIL (1 << 4) #ifdef HAVE_OPAQUE_LSA /* Opaque-LSA administrative flags. */ -- cgit v1.2.1