diff options
| author | Andrew J. Schorr <ajschorr@alumni.princeton.edu> | 2006-06-29 20:20:52 +0000 | 
|---|---|---|
| committer | Andrew J. Schorr <ajschorr@alumni.princeton.edu> | 2006-06-29 20:20:52 +0000 | 
| commit | d7e60dd7a9f0213aaa82d256a78ab74887946e53 (patch) | |
| tree | 2e3488591d1ac48d10ddca05fa4cd68e3611f583 /ospfd | |
| parent | 5f41e90e49b8ced6b5adac3933736067d2b24584 (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]".
Diffstat (limited to 'ospfd')
| -rw-r--r-- | ospfd/ChangeLog | 14 | ||||
| -rw-r--r-- | ospfd/ospf_nsm.c | 12 | ||||
| -rw-r--r-- | ospfd/ospf_vty.c | 79 | ||||
| -rw-r--r-- | ospfd/ospfd.h | 2 | 
4 files changed, 104 insertions, 3 deletions
| 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. */ | 
