summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew J. Schorr <ajschorr@alumni.princeton.edu>2006-06-29 20:20:52 +0000
committerAndrew J. Schorr <ajschorr@alumni.princeton.edu>2006-06-29 20:20:52 +0000
commitd7e60dd7a9f0213aaa82d256a78ab74887946e53 (patch)
tree2e3488591d1ac48d10ddca05fa4cd68e3611f583
parent5f41e90e49b8ced6b5adac3933736067d2b24584 (diff)
[ospfd] Implement new ospf router subcommand "log-adjacency-changes [detail]"
2006-06-28 Erik Muller <erikm@internap.com> * 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]".
-rw-r--r--doc/ChangeLog5
-rw-r--r--doc/ospfd.texi7
-rw-r--r--ospfd/ChangeLog14
-rw-r--r--ospfd/ospf_nsm.c12
-rw-r--r--ospfd/ospf_vty.c79
-rw-r--r--ospfd/ospfd.h2
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 <erikm@internap.com>
+
+ * ospfd.texi: Document new ospf router subcommand
+ "log-adjacency-changes [detail]".
+
2006-06-26 Paul Jakma <paul.jakma@sun.com>
* 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 <erikm@internap.com>
+
+ * 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 <paul.jakma@sun.com>
* 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. */