]> git.puffer.fish Git - mirror/frr.git/commitdiff
[ospfd] Implement new ospf router subcommand "log-adjacency-changes [detail]"
authorAndrew J. Schorr <ajschorr@alumni.princeton.edu>
Thu, 29 Jun 2006 20:20:52 +0000 (20:20 +0000)
committerAndrew J. Schorr <ajschorr@alumni.princeton.edu>
Thu, 29 Jun 2006 20:20:52 +0000 (20:20 +0000)
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]".

doc/ChangeLog
doc/ospfd.texi
ospfd/ChangeLog
ospfd/ospf_nsm.c
ospfd/ospf_vty.c
ospfd/ospfd.h

index 488ea30958ff073e42d14b9ce693321290067ca1..3b5e45bb72048bb9d7954d9ffe3ba938005f375c 100644 (file)
@@ -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.
index ff0d78b956659f1b8ad4e78f0dc57b9f72162ed3..c859782e58916644cae3806b62cd427d0c803731 100644 (file)
@@ -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}} {}
 
index 4c8fb66ff6d39a45bf4d3e1927649e810cb5dab1..f045c1d18a7c126edb3622f0f270d39b1be524f7 100644 (file)
@@ -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
index 8a93f0e67160617952417884c344ac71adfadd97..878ab56798f38f4cea3a1acb89b9735c5908627d 100644 (file)
@@ -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))
index 20dc940ad94d67408bfcce6f396f7e866ff00f11..0298af2298713808cd0310cb6160c167ff9445db 100644 (file)
@@ -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);
index f2a610944664b43a7f32176e7306c902f542027a..c15b4d39b97658846dd89c3d3dc7f8ca50c93852 100644 (file)
@@ -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. */