2007-03-14 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_zebra.c: (ospf_zebra_add, ospf_zebra_delete) Fix bug
	  where inet_ntoa was used twice in the same debug message,
	  which doesn't work because there's a single shared buffer
	  for the returned string.  The fix is to use inet_ntop.

2007-02-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospfd.c: (ospf_terminate) Exit immediately if ospf is not
	  actually running (e.g. the config file was empty).  Fixes
	  bug where SIGTERM would not kill ospfd.

2007-02-26 Paul Jakma <paul.jakma@sun.com>

	* ospf_spf.c: Fix regression introduced with bug #330 fix: The
	  cost update added to ospf_spf_add_parent only handled PtP
	  case, differing from same functionality in higher-level
	  ospf_spf_next. Regression diagnosed by Anders Pedersen,
	  mailnews+router-quagga-dev@news.cohaesio.com.
	  (ospf_vertex_new) Initialise vertices to max-cost.
	  (ospf_spf_init) Root vertex always creates with 0 cost.
	  (ospf_spf_add_parent) Remove the buggy V->W cost calculating
	  code, instead take the new distance as a parameter.
	  (ospf_nexthop_calculation) Take distance as parameter, so it
	  can be passed down to add_parent.
	  (ospf_spf_next) Dont initialise candiate vertex distance,
	  vertex_new does so already. Pass distance down to
	  nexthop_calculation (see above).

2007-01-24 Paul Jakma <paul.jakma@sun.com>

	* ospf_spf.c: Bug #330: Nexthop calculation sometimes may fail,
	  and it needs to indicate this result to SPF.
	  (ospf_spf_add_parent) Flush of parent list needs to be done here,
	  for simplicity.
	  (ospf_nexthop_calculation) Caller needs to know whether
	  nexthop calculation succeeded. Every return statement must
	  correctly indicate such.
	  (ospf_spf_next) Queueing/prioritisation of vertices in SPF
	  must take into account whether nexthop_calculation succeeded,
	  or SPF may fail to find best paths.

2006-12-12 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_interface.c: (ospf_if_is_configured, ospf_if_lookup_by_prefix,
	  ospf_if_lookup_recv_if) Simplify logic using new CONNECTED_PREFIX
	  macro.
	* ospf_lsa.c: (lsa_link_ptop_set) Using the new CONNECTED_PREFIX
	  macro, both options collapse into the same code.
	* ospf_snmp.c: (ospf_snmp_if_update) Simplify logic using new
	  CONNECTED_ID macro.
	  (ospf_snmp_is_if_have_addr) Simplify logic using new CONNECTED_PREFIX
	  macro.
	* ospf_vty.c: (show_ip_ospf_interface_sub) Use new CONNECTED_PEER macro
	  instead of testing the IFF_POINTOPOINT flag.
	* ospfd.c: (ospf_network_match_iface) Use new CONNECTED_PEER macro
	  instead of testing with if_is_pointopoint.  And add commented-out
	  code to implement alternative (in my opinion) more elegant behavior
	  that has no special-case treatment for PtP addresses.
	  (ospf_network_run) Use new CONNECTED_ID macro to simplify logic.

2006-12-04 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospfd.c: (ospf_network_run) Remove an offending 'break' statement.
	  Previously, after creating a single ospf_interface on a given
	  network interface, the code would skip to the next interface
	  without considering other connected addresses on the interface.
	  After removing the 'break', we now consider all connected addresses.

2006-11-30 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_zebra.c: (ospf_router_id_update_zebra,
	  ospf_interface_address_add, ospf_interface_address_delete)
	  If (IS_DEBUG_OSPF (zebra, ZEBRA_INTERFACE)) is enabled, then
	  add a debug message about what Zebra is telling us.
	  (ospf_zebra_add_discard) Add a debug message matching the one
	  already in ospf_zebra_delete_discard.

2006-11-28 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_vty.c: (ospf_passive_interface_default) Take additional
	  'newval' arg so we can update ospf->passive_interface_default inside
	  this function.  More importantly, we now call ospf_if_set_multicast
	  on all ospf_interfaces.
	  (ospf_passive_interface, no_ospf_passive_interface) Fix bug:
	  for 'default' case, argv[0] is undefined, so we must test for
	  (argc == 0) before using argv[0].  And since
	  ospf_passive_interface_default now calls ospf_if_set_multicast as
	  needed, we can just return after calling
	  ospf_passive_interface_default.

2006-10-24 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_zebra.c: (ospf_redistribute_default_set) Fix bug where
	  a new value for ospf->default_originate was being ignored
	  if a previous 'default-information originate' command
	  had already been processed.

2006-10-22 Yar Tikhiy <yar@comp.chem.msu.su>

	* (general) Add support for passive-interface default (with
	  minor edits by Paul Jakma).
	* ospf_interface.h: Add OSPF_IF_PASSIVE_STATUS macro, looking
	  at configured value, or the global 'default' value, as
	  required.
	* ospf_interface.c: (ospf_if_new_hook) Leave passive
	  unconfigured per default, allowing global 'default' to
	  take effect for unconfigured interfaces.
	* ospf_packet.c: (various) use OSPF_IF_PASSIVE_STATUS
	* ospf_vty.c: (ospf_passive_interface_default) new function,
	  unset passive from all interfaces if default is enabled, as
	  the per-iface settings become redundant.
	  (ospf_passive_interface_update) new func, update passive
	  setting taking global default into account.
	  ({no,}ospf_passive_interface_addr_cmd) Add support for
	  'default' variant of command.
	  (show_ip_ospf_interface_sub) Update to take global
	  default into account when printing passive status.
	  (ospf_config_write) ditto.
	* ospfd.c: (ospf_new) set global passive-interface default.
	* ospfd.h: (struct ospf) Add field for global
          passive-interface.
	  
2006-09-25 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_packet_dup, ospf_make_md5_digest) 
	  Fix zlog_warn messages to eliminate compiler warnings.
	  (ospf_hello) Improve warning messages to show why we
	  are complaining.

2006-08-28 Andy Gay <andy@andynet.net>

	* ospf_packet.c: (ospf_make_db_desc) Assert added with More-bit
	  fixes does not hold up with addition of Ogier DB-Exchange
	  optimisation, which can empty the db-summary list in between
	  sent DD packets. Remove assert, update More-bit always when
	  in Exchange.

2006-08-27 J.J. Krabbendam <jkrabbendam@aimsys.nl>

	* ospfd.c: (ospf_finish_final) default redistribute should be
	  unset too, fixes bug where reconfiguring ospfd completely
	  can no longer enable default redistribution.

2006-08-25 Paul Jakma <paul.jakma@sun.com>

	* (general) Bug #134. Be more robust to backward time changes,
	  use the newly added libzebra time functions.
	  In most cases: recent_time -> recent_relative_time()
	  gettimeofday -> quagga_gettime (QUAGGA_CLK_MONOTONIC, ..)
	  time -> quagga_time.
	  (ospf_make_md5_digest) time() call deliberately not changed.
	  (ospf_external_lsa_refresh) remove useless gettimeofday, LSA
	  tv_orig time was already set in ospf_lsa_new, called via
	  ospf_external_lsa_new.

2006-08-04 Paul Jakma <paul.jakma@sun.com>

	* ospf_lsdb.c: (ospf_lsdb_delete_entry) new function, consolidate
	  exact same functionality replicated in other functions.
	  (ospf_lsdb_add) Strip out code by using ospf_lsdb_delete_entry.
	  (ospf_lsdb_delete) ditto.
	  (ospf_lsdb_delete_all) ditto.

2006-08-03 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_make_db_desc) Unset the DD More bit
	  after constructing the packet, if appropriate. 
	  (ospf_db_desc_proc) Speed up Exchange, slave should raise
	  ExchangeDone earlier, as RFC mandates, by forming its reply
	  before deciding whether both sides are done, avoids a
	  needless round of empty DD packet exchanges at the end of
	  Exchange, hence speeding up ExchangeDone.
	  Implement draft-ogier-ospf-dbex-opt DB-exchange optimisation.
	  (ospf_db_desc) use UNSET_FLAG macro.

2006-07-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospfd.c: (ospf_router_id_update) Fix and document the algorithm for
	  selecting the router ID: if there is not a statically configured ID,
	  then stick to the most recent value to avoid disruptive changes.
	  This should fix bug #288.

2006-07-26 Paul Jakma <paul.jakma@sun.com>

	* ospf_lsa.{c,h}: (ospf_lsa_unlock) Change to take a double pointer
	  to the LSA to be 'unlocked', so that, if the LSA is freed, the
	  callers pointer to the LSA can be NULLed out, allowing any further
	  use of that pointer to provoke a crash sooner rather than later.
	* ospf_*.c: (general) Adjust callers of ospf_lsa_unlock to match
	  previous. Try annotate 'locking' somewhat to show which 'locks'
	  are protecting what LSA reference, if not obvious.
	* ospf_opaque.c: (ospf_opaque_lsa_install) Trivial: remove useless
	  goto, replace with return.
	* ospf_packet.c: (ospf_make_ls_ack) Trivial: merge two list loops,
	  the dual-loop predated the delete-safe list-loop macro.

2006-07-25 Paul Jakma <paul.jakma@sun.com>

	* ospf_neigbor.h: (struct ospf_neighbor) Add some additional
	  neighbour state statistics fields, timestamps for progressive
	  and regressive state changes, and pointer to event string
	  for the latter state change.
	* ospf_nsm.c: (nsm_notice_state_change) Update new state changs
	  history as required.
	* ospf_vty.c: (show_ip_ospf_neighbor_detail_sub) Print out above
	  new per-neighbour state change stats.

2006-07-10 Paul Jakma <paul.jakma@sun.com>

	* ospf_nsm.c: (nsm_change_state) call nsm_clear_adj for all
	  adjacency losses, hence removing need for nsm_reset_nbr.
	  (nsm_reset_nbr) kill it, clear_adj in previous does fine.
	  (nsm_kill_nbr,nsm_start) remove nsm_reset_nbr call.
	  (ospf_nsm_event) Allow NSM function to be NULL, this along with
	  removal of nsm_reset_nbr, allows a bunch of now useless functiosn
	  to be removed.
	  Remove some useless variables.
	  (nsm_ignore) now useless, remove.
	  (nsm_bad_ls_req) ditto
	  (nsm_seq_number_mismatch)   "
	  (nsm_oneway_received)       "
	  (nsm_inactivity_timer)      "
	  (nsm_ll_down)               "
	  (NSM) replace removed action functions with NULL.
	  (nsm_notice_state_changes) Move state change logging code to new
	  func to declutter nsm_change_state and ospf_nsm_event.
	  Log event with AdjChange, it's useful to know.
	  (nsm_change_state) move adjchange and snmp logging to previous.
	  (ospf_nsm_event) call nsm_notice_state_changes from here.
	  Move the debug message to entry of function, so it gets out
	  even if something goes wrong.
	  Record state change timestamp and event in nbr struct.
	* ospf_neighbor.h: (struct ospf_neighbor) Add fields to record
	  timestamp of last NSM change and event.
	* ospf_vty.c: (show_ip_ospf_neighbor_detail_sub) Print 
	  last state change timestamp and event, if available.

2006-07-10 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_hello) Improve NetworkMask mismatch warning
	  message to include interface name and conflicting prefix lengths.

2006-07-07 Paul Jakma <paul.jakma@sun.com>

	* ospf_nsm.h: Add a NSM_Deleted neighbour state, to act as dummy
	  state indicating the neighbour is to be deleted.
	* ospf_nsm.c: (general) Use the NSM_Deleted state to delete
	  neighbours, thus allowing code to be slightly more obvious
	  in its flow.
	  (nsm_timer_set) Add NSM_Deleted. Add another timer the code
	  missed.
	  (nsm_kill_nbr) No need for special case call to nsm_change_state
	  anymore.
	  Make the assert and error-handling for same case more readable
	  (Andrew Schorr)
	  Remove the call to ospf_nbr_delete, nsm_change_state can do
	  this generally now via NSM_Deleted.
	  (struct ... NSM) Add the dummy NSM_Deleted state, the 3 events
	  that can lead to nsm_kill_nbr all now transition the NBR to
	  NSM_Deleted and the general change_state function can be left
	  to do the work.
	  (ospf_nsm_event) Special casing of events and early-return can
	  be removed now.
	  On transition into Deleted, delete the nbr.
	* ospf_dump.c: (ospf_nsm_state_msg) Add Deleted.

2006-07-06 Paul Jakma <paul.jakma@sun.com>

	* ospf_nsm.c: (ospf_nsm_event) LLDown event also results in nbr
	  being deleted, requires early-return too. Likely explains
	  some crash reports after interface events.

2006-07-04 Paul Jakma <paul.jakma@sun.com>

	* ospf_nsm.c: (general) Various small cleanups from Andrew's
	  review of last set of patches.
	  (nsm_timer_set) Loading, Full and default can share
	  same code too.
	  (nsm_should_adj) Can just be one big OR.
	  (nsm_twoway_received) Collapse into return statement.

2006-07-02 Paul Jakma <paul.jakma@sun.com>

	* ospf_nsm.c: (nsm_should_adj) New function, just consolidate the
	  10.4 adjacency check from nsm_twoway_received/nsm_adj_ok.
	  (nsm_twoway_received/nsm_adj_ok) Use former.
	  (nsm_clear_adj) clear adjacency related state for a
	  neighbour, needed for some state changes from > ExStart down
	  to ExStart or less, which need not go through nsm_reset_nbr.
	  (nsm_reset_nbr) move code to former. Should be static.
	  (ospf_nsm_event) Don't allow action functions to change
	  next_state if the NSM tables do not indicate next_state is
	  conditional, log warning if one tries - existing code
	  appears fine though.
	  Remove long dead code.
	  Use nsm_clear_adj for state changes that take down
	  adjacencies to TwoWay/ExStart.
	  (nsm_timer_set) ls_req timer should be OFF in early states.
	  Compact several identical sections.
	  Set inactivity timer to OFF for Down, for documentary
	  purposes.
	  (nsm_kill_nbr) Oops, action function shouldn't try return
	  1 for error.
	* ospf_lsa.c: (ospf_translated_nssa_refresh) CID #13.

2006-06-30 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_vty.c: (show_ip_ospf_neighbor_id) Should show all instances
	  of that neighbor (since it may appear on multiple interfaces)
	  instead of bailing out after showing the first match.

2006-06-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_nsm.c: (nsm_twoway_received) When deciding whether to
	  change from state Init to ExStart, the test for whether the
	  neighboring router is DR or BDR should be against the
	  local router's notion of DR/BDR, not the neighbor's view.

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
	  be ASBRs, or other routers may rightfully refuse to install
	  translated type-5s LSAs. reported by dendroot@gmail.com.
	  (ospf_abr_nssa_check_status) Detect change in translator
	  state when ABR, and inc/dec redistribute count as when we
	  leave/enter the disabled state - so that translate-enabled
	  ABR properly sets ASBR bit on non-NSSA areas.
	  Run the resulting function through indent to clean it up.
	* ospf_lsa.c: (router_lsa_flags) For purposes of ASBR bit,
	  NSSA area is same as stub area.
	  
2006-06-24 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_snmp.c: (ospfTrapNbrStateChange, ospfTrapIfStateChange) Improve
	  info log message to indicate why the trap is being sent.

2006-06-24 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_dump.c: (config_write_debug) Fix typo to show debug ospf nsm
	  status properly (not ism status).

2006-06-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_vty.c: ({no_,}ospf_passive_interface) Replace if_lookup_by_name
	  with a call to if_get_by_name -- if the interface does not exist
	  already, it should be created.  And remove the obsolete warning
	  message.

2006-06-15 Paul Jakma <paul.jakma@sun.com>

	* ospf_interface.h: (struct ospf_if_info) Add reference counts
	  for multicast group memberships. Add various macros to help
	  manipulate/check membership state.
	* ospf_interface.c: (ospf_if_set_multicast) Maintain the
	  ospf_if_info reference counts, and only actually drop
	  memberships if it hits 0, to avoid losing membership when
	  OSPF is disabled on an interface with multiple active OSPF
	  interfaces.
	* ospf_packet.c: (ospf_{hello,read}) Use the new macros to
	  check/set
	  multicast membership.
	* ospf_vty.c: (show_ip_ospf_interface_sub) ditto.
	  
2006-05-31 Paul Jakma <paul.jakma@sun.com>

	* ospf_lsdb.c: (ospf_lsdb_delete) robustify against NULL arguments,
	  print warning.
	* ospf_lsa.c: (ospf_discard_from_db) ditto.
	  (ospf_maxage_lsa_remover) Check lsa->lsdb for validity, possible
	  mitigation (but not solution) for bug #269.

2006-05-30 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_read) Debug message about packets
	  received on unenabled interfaces should be conditional on
	  debug being set.

2006-05-23 Paul Jakma <paul.jakma@sun.com>

	* ospf_vty.c: (general) Replace in-place route redistribution
	  command and help strings with the new auto-generated defines
	  from lib/route_types.h

2006-05-13 Paul Jakma <paul.jakma@sun.com>

	* ospf_lsa.c: (ospf_translated_nssa_refresh) fix the sanity
	  check to match the assert, small error in CID #13 fix.

2006-05-12 Paul Jakma <paul.jakma@sun.com>

	* ospf_lsa.c: (ospf_lsa_action) Get rid of the ospf_lookup
	  call, which is not checked for NULL return, by stripping out
	  functionality which is never used, hence fixing Coverity CID
	  #29.
	  (struct lsa_action) remove unused member.
	  (ospf_translated_nssa_refresh) Add non-assert sanity check,
	  in case DEBUG isn't defined.
	  Debug message when no type7 exists should print the ID from
	  the type5, not the type7, fixes CID #13.
 	* ospf_interface.c: (ospf_if_exists) Fix missing NULL return
	  check on ospf_lookup, CID #27.
	* ospf_asbr.c: (ospf_redistribute_withdraw) remove ospf_lookup
	  call by taking the struct ospf * as argument, which the
	  caller has, fixing CID #28.
	* ospf_asbr.h: (ospf_redistribute_withdraw) update declaration
	* ospf_zebra.c: (ospf_redistribute_unset) update call to
	  ospf_redistribute_withdraw to match.
	* ospf_ia.c: (ospf_update_router_route) ospf->backbone could be
	  NULL when passed to ospf_find_asbr_route_through_area,
	  check for NULL first, CID #14.
	* ospf_ism.c: (ism_change_state) NULL check on oi->area is
	  useless, it's always valid. Only possibility where it
 	  couldn't be is if there is a race between abr_task and
	  cleaning up oi's, in which case a NULL check here isn't going
	  to do anything. Fixes CID #15.

2006-05-11 Paul Jakma <paul.jakma@sun.com>

	* ospf_vty.c: (general) Audit ospf_lookup calls in commands,
	  ensure check for NULL result, make vty messages consistent. 
	  (show_ip_ospf_interface) Missing NULL check on ospf_lookup
	  result, fixes Coverity CID #70.
	  (no_ospf_area_filter_list) Check NULL result from
	  ospf_area_lookup_by_area_id, fixes Coverity CID #69
	* ospf_route.c: (ospf_route_delete_same_ext) Fix deref before
	  NULL check by moving into check-protected block, fix CID #49.
	* ospf_abr.c: (ospf_area_range_cost_set) Shouldn't create a new
	  range, should just lookup to see if one exists, the new range
	  is just leaked. Fixes CID #46.
	* ospf_lsa.c: (ospf_default_originate_timer) Let the thread
	  take (struct ospf *) as thread argument, rather than (struct
	  ospf *)->default_originate, thus avoiding having to call
	  ospf_lookup.
	* ospf_zebra.c: (ospf_redistribute_default_set) change setup
	  of ospf_default_originate_timer thread to match.
	* ospfd.c: (ospf_router_id_update) ditto.

2006-04-24 Paul Jakma <paul.jakma@sun.com>

	* (general) More Virtual-link fixes, again with much help in
	  testing / debug from Juergen Kammer. Primarily in SPF.
	* ospf_spf.h: Add guard. ospf_interface.h will include this
	  header.
	* ospf_interface.h: Modify ospf_vl_lookup definition to take
	  struct ospf as argument, so as to allow for NULL area
	  argument.
	  (struct ospf_vl_data) Remove out_oi, instead add a struct
	  vertex_nexthop, to use as initial nexthop for backbone paths
	  through a vlink.
	* ospf_interface.c: (ospf_vl_lookup) Modified to allow
	  NULL area to be passed to indicate "any" (first) area.
	  Add extra debug.
	  (ospf_vl_set_params) vl_oi -> nexthop. Add extra debug.
	  (ospf_vl_up_check) Fix debug, inet_ntoa returns a static
	  buffer..
	* ospf_route.c: (ospf_intra_add_router) Vlinks dont go through
	  backbone, don't bother checking.
	* ospf_spf.c: (static struct list vertex_list) Record vertices
	  that will need to be freed.
	  (cmp) Order network before router vertices, as required,
	  wasn't implemented.
	  (vertex_nexthop_free) Mild additional robustness check.
	  (vertex_parent_free) Take void argument, as this function
	  is passed as list deconstructor for vertex parent list.
	  (ospf_vertex_new) More debug. Set deconstructor for parent
	  list. Track allocated vertices on the vertex_list.
	  (ospf_vertex_free) Get rid of the tricky recursive cleanup of
	  vertices. Now frees only the given vertex. 
	  (ospf_vertex_add_parent) Fix assert.
	  (ospf_nexthop_calculation) Fix calculation of nexthop for
	  VLink vertices, lookup the vl_data and use its previously
	  recorded nexthop information.
	  (ospf_spf_calculate) Vertices are freed simply by deleting
	  vertex_list nodes and letting ospf_vertex_free as deconstructor
	  work per-node.
	  (ospf_spf_calculate_timer) Trivial optimisation, leave
	  backbone SPF calculation till last to reduce SPF churn on
	  VLink updates.
	* ospf_vty.c: (ospf_find_vl_data) update call to ospf_vl_lookup
	  (no_ospf_area_vlink_cmd) ditto.
	  (show_ip_ospf_interface_sub) For Vlinks, the peer address is
	  more interesting than the output interface.

2006-04-03 Paul Jakma <paul.jakma@sun.com>

	* (general) Fix issues with handling of Vlinks and entries
	  in the nbrs route-table which were highlighted by the
	  nsm/nbr_self fixes from bug #234. Many thanks to Juergen
	  Kammer for his help and efforts in testing out debug patches to
	  pinpoint the issue.
	* ospf_interface.c: (ospf_vl_new) Add nbr_self for Vlink.
	* ospf_neighbor.c: (ospf_nbr_key) new static function, helper
	  to create key in nbrs table for a given nbr.
	  (ospf_nbr_delete) Use ospf_nbr_key. Add an assert() to
	  document an expected state.
	  (ospf_nbr_add_self) Ditto.
	  (ospf_nbr_lookup_by_addr) Add an assert.
	* ospf_nsm.c: (nsm_kill_nbr) Can never kill the nbr_self
	  psuedo-neighbour.

2006-03-27 Paul Jakma <paul.jakma@sun.com>

	* ospf_lsa.c: (ospf_lsa_checksum) Add an explicit cast to avoid
	  the ambiguities of ANSI and C99 C with respect to type
	  conversion. Detailed problem report and test case with
	  example data supplied by Dmitry Ivanov <dimss@telecentrs.lv>.

2006-03-25 Paul Jakma <paul.jakma@sun.com>

	* ospf_interface.c: (ospf_if_lookup_recv_if) Ignore loopbacks,
	  we can never ever receive packets on those. Should fix
	  case where CARP is run with address in same subnet as real
	  interface. Problem report and diagnosis thanks to:
	  Landon Fuller <landonf@opendarwin.org>.
	  However, ospf_read() still can't deal deterministically with
	  multiple interfaces in same subnet.

2006-03-23 Steve Lawson <steve.lawson@aheadcomusa.com>

	* ospf_lsa.c: (ospf_lsa_install) Fix incorrect byte-order 
	  conversion of OSPF_MAX_SEQUENCE_NUMBER

2006-01-19 Paul Jakma <paul.jakma@sun.com>

        * (general) various miscellaneous compiler warning fixes.
           Remove redundant break statements from switch clauses
           which return.
           return from main, not exit, cause it annoys SOS.
           Remove stray semi-colons which cause empty-statement
           warnings.

2006-01-18 Juergen Kammer <j.kammer@eurodata.de>

	* ospf_lsa.c: (ospf_router_lsa_new) dont take reference to the
	  stream data until it is constructed, data reference is
	  volatile due to the potential resize in link_info_set

2006-01-18 Paul Jakma <paul.jakma@sun.com>

	* ospf_lsa.c: (link_info_set) Resize the stream if required and
	  possible. Return number of links added.
	  (lsa_link_*_set) use return value from previous.
	* ospf_lsa.h: Add OSPF_ROUTER_LSA_LINK_SIZE define.
	  
2006-01-17 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_verify_header) print out the types
	  involved if there's a mismatch.
	* ospf_zebra.c: (ospf_zebra_add) Adjust to new zserv format.

2006-01-10 Len Sorensen <lennartsorensen@ruggedcom.com>

	* (general) Bug #234, see also [quagga-dev 3902].
	  Fix problem with nbr_self not being properly reinitialised
	  when an interface comes up, after having been down.
	  Some re-arrangement done by Paul Jakma, any bugs introduced
	  on top of Len's suggested changes are his.
	* ospf_neighbor.c: (ospf_nbr_add_self) centralise
	  initialisation of nbr_self parameters here.
	* ospf_interface.c: (ospf_if_new) deleting initialisation of
	  parameters of nbr_self, just rely on call to
	  ospf_nbr_add_self.
	  (ospf_if_cleanup) ditto.
	* ospfd.c: (ospf_network_run) ditto.

2006-01-10 Juris Kalnins <juris@mt.lv>

	* ospf_zebra.c: (ospf_interface_address_delete) fix rare leak of 
	  struct connected in an error case.
	* ospf_packet.c: (ospf_make_md5_digest) fix odd, if not
	  undefined effect, assignment of an increment expression.

2006-01-10 Paul Jakma <paul.jakma@sun.com>

	* ospfd.c: (ospf_network_run) checking to see if router-id
	  is set should be on ospf->router_id, not router_id_static.
	  This was causing ospfd to not start if router-id had not
	  been configured statically.
	  (ospf_if_update) ditto.
	* ospf_vty.c: (config_write_ospf_distribute) trim down
	  redundant strings.

2005-11-26 Paul Jakma <paul.jakma@sun.com>

	* ospf_api.c: (struct opaque_lsa) change from gcc zero-length
	  array to C99 incomplete type array.
	* (general) s/graceful/deferred/ in all files, the former term 
	   is confusing wrt OSPF Graceful-Restart.
	* ospfd.c: (ospf_deferred_shutdown_check) dont return
	  a function which returns void. SOS complains about this.
	  (ospf_finish)

2005-11-20 Paul Jakma <paul.jakma@sun.com>

        * ospfd.h: remove the OSPF_ROUTER_ID_UPDATE_DELAY define
          (struct ospf) remove the router_id timer thread.
          remove export of ospf_router_id_update_timer.   
        * ospfd.c: (ospf_router_id_update) call ospf_if_update to
          poke interfaces into action after ID has been configured.
          (ospf_router_id_update_timer) removed.
          (ospf_finish_final) t_router_id_update timer is gone.
          (ospf_network_run) router-id update timer gone.
          call ospf_router_id_update directly if ID not configured.
          In the per-iface loop, don't ospf_if_up interfaces if
          ID is still not configured. The update function will call
          ospf_if_update anyway.
          (ospf_if_update) ID update timer is gone. Just return if no
          ID is set.
        * ospf_vty.c: (ospf_router_id) call ospf_router_id_update, no
          timer needed.
        * ospf_zebra.c: (ospf_router_id_update_zebra) call
          ospf_router_id_update directly, not via timer.  
        * ospf_abr.c: (ospf_abr_announce_network_to_area) check
          returned LSA of ospf_summary_lsa_refresh and print warning if
          it failed.
          (ospf_abr_announce_network_to_area) similar
          (ospf_abr_announce_rtr_to_area) similar 
        * ospf_lsa.c: (ospf_router_lsa_new) check LSA returned is valid.
          (ospf_router_lsa_originate) similar
          (ospf_router_lsa_refresh, ospf_network_lsa_new) similar  
          (ospf_summary_lsa_new) Check ID is valid.
          (ospf_summary_lsa_originate) ditto, and check returned LSA from
           previous function is !NULL.
          (ospf_summary_lsa_refresh) check ospf_summary_lsa_new return
           is !NULL.
          (ospf_summary_asbr_lsa_new) ID valid check.
          (ospf_summary_asbr_lsa_originate) similar.

2005-11-16 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_dump.h: Define OSPF_TIME_DUMP_SIZE as appropriate buffer size
	  for use with ospf_timer_dump and ospf_timeval_dump.
	* ospf_vty.c: Change all buffer sizes used with ospf_timer_dump and
	  ospf_timeval_dump to have size OSPF_TIME_DUMP_SIZE.
	  (show_ip_ospf_interface_sub) Fix possible buffer overflow in
	  call to ospf_timer_dump.

2005-11-16 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_ism.h: (OSPF_ISM_TIMER_OFF) Improve macro syntax by enclosing
	  in 'do {...} while(0)'.

2005-11-14 Paul Jakma <paul.jakma@sun.com>

	* ospfd.c: (ospf_new) stub-shutdown should just default to
	  unconfigured, too strange otherwise.
	  (ospf_finish_final) t_opaque_lsa_self TIMER_OFF should be
	  preprocessor conditional on HAVE_OPAQUE_LSA.
	* ospfd.h: (struct ospf) remove the SHUTDOWN_DEFAULT define.
	  no longer used, plus it wasn't in range that the command
	  accepted.
	* ospf_zebra.h: Depends on vty.h, include it.

2005-11-11 Paul Jakma <paul.jakma@sun.com>

	* ospf_spf.c: (ospf_canonical_nexthops_free) Free only
	  the nexthops pointing to the root vertex. We may visit a
	  vertex twice or the vertex may have some inherited nexthops,
	  if we free other nexthops we could crash.
 
2005-11-04 Paul Jakma <paul.jakma@sun.com>

	* ospf_{dump,spf,vty}.c: Oops, use the internal tv_sub
	  function rather than unportable timersub.

2005-11-03 Paul Jakma <paul.jakma@sun.com>

	* ospf_apiserver.c: (apiserver_sync_callback) stray semi-colon
	* ospf_packet.c: include checksum.h, remove the in_cksum extern
	* prototypes.
	* ospf_te.h: Add braces, quell warning.
	* ospf_packet.c: Change level of some warnings to
	  informational.

2005-10-29 Paul Jakma <paul.jakma@sun.com>

	* (general) RFC3137 stub-router support
	* ospfd.h: Add OSPF_OUTPUT_COST_INFINITE define.
	  (struct ospf_master) Add a OSPF_MASTER_SHUTDOWN flag for
	  options, to allow shutdown to distinguish between complete
	  shutdown and shutdown of a subset of ospf instances.
	  (struct ospf)
	  Add stub_router_{startup,shutdown_}time, configuration of startup
	  and shutdown time for stub-router.
	  Add t_graceful_shutdown struct thread, timer for graceful
	  shutdown, if needed.
	  (struct ospf_area) Add stub_router_state - run time state of
	  stub-router for an area. Add flags for ADMIN, IS and WAS
	  states.
	  Add t_stub_router, timer thread to resend router-lsa for an
	  area.
	* ospf_lsa.c: (ospf_link_cost) new simple function to spit out
	  either the given lnks cost or infinite cost if stub-router is
	  in effect.
	  (lsa_link_{ptop,broadcast,virtuallink,ptomp}_set) use
	  previous function for transit-links.
	  (ospf_stub_router_timer) timer thread for end of startup stub
	  router. Change state as required for the area and setup
	  re-origination of router-lsa.
	  (ospf_stub_router_check) Check/do whether stub-router should be
	  enabled, and whether it requires timer to be setup.
	  (ospf_router_lsa_new) call previous function at top.
	  (ospf_router_lsa_originate) no external callers, made static.
	* ospf_lsa.h: (ospf_router_lsa_originate) removed.
	* ospf_main.c: (sigint) make static.
	  remove call to exit, as ospf_terminate now deals with
	  exiting.
	* ospf_route.c: (ospf_terminate) removed, now in ospfd.c.
	* ospf_vty.c: (show_ip_ospf_area) print out state of
	  stub-router, if active.
	  (show_ip_ospf) print out configuration of stub-router
	  support, and details of graceful-shutdown if the timer is
	  active.
	  ((no)?ospf_max_metric_router_lsa_{admin,startup,shutdown}) new
	  commands to (de-)?configure stub-router support.
	  (config_write_stub_router) write out config of stub-router.
	  (ospf_config_write) call previous.
	  (ospf_vty_init) install the new stub-router commands.
	* ospfd.c: various functions made static.
	  (ospf_new) Set defaults for stub-router. Graceful shutdown
	  is made to default on, just to be adventerous.
	  (ospf_graceful_shutdown_finish) new function, final part of
	  shutdown.
	  (ospf_graceful_shutdown_timer) timer thread wrapper for
	  graceful-shutdown.
	  (ospf_graceful_shutdown_check) check whether to setup timer
	  for shutdown or proceed directly to final shutdown.
	  (ospf_terminate) moved here from ospf_route.c, call
	  ospf_finish for each instance.
	  (ospf_finish) renamed to ospf_finish_final and made static.
	  (ospf_finish) new function, exported wrapper around
	  ospf_graceful_shutdown_check.
	  (ospf_finish_final) complete shutdown of an instance.
	  Add missing TIMER_OFF's of two timer threads.
	  (ospf_area_free) opaque self lsa timer should be turned off.

2005-10-23 Paul Jakma <paul.jakma@sun.com>

	* ospf_apiserver.c: (ospf_apiserver_term) This function should
	  not have side-effects (eg segv) if no apiserver instances are
	  active, ie be robust.
	* ospf_vty.c: (show_ip_ospf) fix display of SPF timer if it
	  has not yet been run.

2005-10-21 Paul Jakma <paul.jakma@sun.com>

	* ospf_dump.c: (ospf_timeval_dump) fix ms adjustment, thanks to
	  Andrew Schorr.
	* ospf_vty.c: (ospf_config_write) fix write out of spf timers
	  configuration.

2005-10-21 Paul Jakma <paul.jakma@sun.com>

	* (general) SPF millisecond resolution timer with adaptive,
	  linear back-off holdtime. Prettification of ospf_timer_dump.
	* ospf_dump.c: (ospf_timeval_dump) new function. The guts of
	  ospf_timer_dump, but made to be more dynamic in printing out
	  the relative timeval, sliding the precision printed out
	  according to the value.
	  (ospf_timer_dump) guts moved to ospf_timeval_dump.
	* ospf_dump.h: export ospf_timeval_dump.
	* ospf_flood.c: (ospf_flood) remove gettimeofday, use
	  the libzebra exported recent_time instead, as it's not
	  terribly critical to have time exactly right - the dropped
	  LSA will be retransmited to us if we don't ACK it.
	* ospf_packet.c: (ospf_ls_upd_timer) Ditto, but here we're
	  not transmitting, just putting LSA back on update transmit list.
	* ospfd.h: delay and holdtimes should be unsigned.
	  Add spf_max_holdtime and spf_hold_multiplier.
	  Update default defines for delay and hold time to be in msec.
	  (struct ospf) change the SPF timestamp to a struct timeval.
	  Remove ospf_timers_spf_(un)?set.
	* ospfd.c: (ospf_timers_spf_{set,unset}) removed.
	  (ospf_new) initialise spf_max_holdtime and spf_hold_multiplier
	* ospf_spf.c: (ospf_spf_calculate) SPF timestamp is a timeval
	  now, update with gettimeofday.
	  (ospf_spf_calculate_schedule) Change SPF timers to millisecond
	  resolution.
	  Make the holdtime be adaptive, with a linear increase in
	  holdtime ever consecutive SPF run which occurs within holdtime
	  of previous SPF, bounded by spf_max_holdtime.
	* ospf_vty.c: Update spf timers commands.
	  (ospf_timers_spf_set) trivial helper. 
	  (ospf_timers_throttle_spf_cmd) new command to set SPF delay,
	  initial hold and max hold times with millisecond resolution.
	  (ospf_timers_spf_cmd) Deprecated. Accept the old values,
	  convert to msec, truncate to new limits.
	  (no_ospf_timers_throttle_spf_cmd) set timers to defaults.
	  (no_ospf_timers_spf_cmd) deprecated form, same as previous.
	  (show_ip_ospf_cmd) Display SPF parameters and times.
	  (show_ip_ospf_neighbour_header) Centralise the 'sh ip os ne'
	  header.
	  (show_ip_ospf_neighbor_sub) Fix the field widths. Get rid of
	  the multiple spaces which were making the lines even longer.
	  (show_ip_ospf_neighbor_cmd) Use show_ip_ospf_neighbour_header
	  (show_ip_ospf_neighbor_all_cmd) ditto and fix the field
	  widths for NBMA neighbours.
	  (show_ip_ospf_neighbor_int) Use header function.
	  (show_ip_ospf_nbr_nbma_detail_sub) use sizeof for timebuf,
	  local array - safer.
	  (show_ip_ospf_neighbor_detail_sub) ditto
	  (ospf_vty_init) install the new SPF throttle timer commands.
	  
2005-10-21 Paul Jakma <paul.jakma@sun.com>

	* (general) OSPF fast, sub-second hello and 1s dead-interval
	  support.
	* ospf_dump.c: (ospf_timer_dump) Print out milliseconds too.
	  Callers typically specify a length of 9, so most see
	  millisecs unless they specify the additional length.
	* ospf_interface.h: (struct ospf_interface) new interface param, 
	  fast_hello.
	* ospf_interface.c: (ospf_if_table_lookup) add brackets,
	  gcc warning fix.
	  (ospf_new_if_params) Initialise fast_hello param.
	  (ospf_free_if_params) Check whether fast_hello is configured.
	  (ospf_if_new_hook) set fast_hello to default.
	* ospf_ism.h: Wrap OSPF_ISM_TIMER_ON inside do {} while (0) to
	  prevent funny side-effects from its if statement when this
	  macro is used conditionally by other macros.
	  (OSPF_ISM_TIMER_MSEC_ON) new macro, set in milliseconds.
	  (OSPF_HELLO_TIMER_ON) new macro to set hello timer according
	  to whether fast_hello is set.
	* ospf_ism.c: Update all setting of the hello timer to use
	  either OSPF_ISM_TIMER_MSEC_ON or OSPF_HELLO_TIMER_ON. The
	  former is used when hello is to be sent immediately.
	* ospf_nsm.c: ditto
	* ospf_packet.c: (ospf_hello) hello-interval is not checked
	  for mismatch if fast_hello is set.
	  (ospf_read) Annoying nit, fix "no ospf_interface" to be debug
	  rather than a warning, as it can be perfectly normal to
	  receive packets when logical subnets are used.
	  (ospf_make_hello) Set hello-interval to 0 if fast-hellos are
	  configured.
	* ospf_vty.c: (ospf_auto_cost_reference_bandwidth) annoying
	  nit, don't vty_out if this command is given, it gets tired
	  quick.
	  (show_ip_ospf_interface_sub) Print the hello-interval 
	  according to whether fast-hello is set or not.
	  Print the extra 5 millisec characters from (ospf_timer_dump)
	  if fast-hello is configured.
	  (ospf_vty_dead_interval_set) new function, common to all
	  forms of dead-interval command, to set dead-interval and
	  fast-hello correctly. If a dead-interval is given, unset
	  fast-hello, else if a hello-multiplier is set, set
          dead-interval to 1 and fast-hello to given multiplier.
	  (ip_ospf_dead_interval_addr_cmd) use
	  ospf_vty_dead_interval_set().
	  (ip_ospf_dead_interval_minimal_addr_cmd) ditto.
	  (no_ip_ospf_dead_interval) Unset fast-hello.
	  (no_ip_ospf_hello_interval) Bug-fix, unset of hello-interval
	  should set it to OSPF_HELLO_INTERVAL_DEFAULT, not
	  OSPF_ROUTER_DEAD_INTERVAL_DEFAULT.
	  (config_write_interface) Write out fast-hello.
	  (ospf_config_write) Write a comment about 
	  "auto-cost reference-bandwidth" having to be equal on all
	  routers. Hopefully just as noticeable as old practice of
	  writing to vty, but less annoying.
	  (ospf_vty_if_init) install the two new dead-interval
	  commands.
	* ospfd.h: Add defines for OSPF_ROUTER_DEAD_INTERVAL_MINIMAL
	  and OSPF_FAST_HELLO_DEFAULT.

2005-10-18 Paul Jakma <paul.jakma@sun.com>

	* (general) SPF memory management cleanup and fix for rare
	  double-free bug.
	* ospf_spf.h: (struct vertex_parent) New struct to hold parent
	  specific data, eg the backlink and the parent vertex pointer,
	  and point to the appropriate general struct vertex_nexthop.
	  (struct vertex_nexthop) remove parent vertex pointer, so
	  this struct can be shared across vertices.
	  (struct vertex) rename list child to list children. Remove
	  list of nexthops, replace with list of vertex_parents.
	* ospf_spf.c: (update_stat) trivial, remove cast from void *.
	  (vertex_nexthop_new) remove init of parent - field is gone
          from struct vertex_nexthop.
          (ospf_canonical_nexthops_free) Remove the canonical
          vertex_nexthop memory objects. These are the vertex_nexthops
          attached to the first level of router vertices from the root.
          (vertex_parent_new) new function, create a vertex_parent.
          (vertex_parent_free) ditto, but free it.
          (ospf_vertex_new) Update to match changes to struct vertex.
          (ospf_vertex_free) Recursively free a struct vertex and its
          children. The parent list is used as a reference count.
          vertex_nexthops must be free seperately, if required.
          (ospf_vertex_dump) update to match struct vertex changes.
          Print out backlink of parents too.
          (ospf_vertex_add_parent) ditto.
          (ospf_lsa_has_link) update comment.
          (ospf_nexthop_add_unique) removed, not needed anymore.
          (ospf_nexthop_merge) ditto.
          (ospf_spf_consider_nexthop) renamed to ospf_spf_add_parent.
          Simplified to just create vertex_parent and add it.
          (ospf_spf_flush_parents) new function, flush out the parent
	  list.
	  (ospf_nexthop_calculation) Take the relevant route_lsa_link
	  as an argument, which simplifies things and removes the need
	  for the hack in ospf_nexthop_add_unique - ospf_spf_next
	  already knew exactly which link the cost calculated was for.
	  Update to match struct vertex changes too.
	  (ospf_spf_next) Don't create a vertex for W unnecessarily, if
          it's there's a vertex already created for W, use it, and
          hence there's no need to free it either.
          Update some manipulation/comparisons of distance to match.
          Flush the parent list if a lower cost path is found.
          (ospf_spf_route_free) unused, removed.
          (ospf_spf_dump) match the struct vertex changes, and dump the
          ifname if possible.
          (ospf_spf_calculate) At end of SPF, free the canonical nexthops
          and call ospf_vertex_free on the root vertex to free the
	  entire tree.
	* ospf_interface.c: (ospf_vl_set_params) match struct vertex
          changes.
        * ospf_route.c: (ospf_intra_route_add) ditto
          (ospf_route_copy_nexthops_from_vertex) ditto
          
2005-10-11 Paul Jakma <paul.jakma@sun.com>

	* ospf_api.c: sign warnings.
	* ospf_apiserver.c: sign warning and convert all the struct
	  in_addr initialisations so as not to make assumptions about
	  how this struct is organised, initialise the s_addr member
	  explicitely.
	* ospf_packet.c: Add const qualifier to auth_key.

2005-10-06 Alain Ritoux <alain.ritoux@6wind.com>

	* ospf_snmp.c: Avoid mixing interface and ospf_interface objects
	  which now allows snmpwalk to work with ospfIfTable and 
	  also with ospfIfMetricTable

2005-10-01 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_dump.c: Remove local hard-coded table ospf_redistributed_proto.
	  (ospf_redist_string) New function implemented using new library
	  function zebra_route_string().  Note that there are a few differences
	  in the output that will result: the new function returns strings
	  that are lower-case, whereas the old table was mixed case.  Also,
	  the old table mapped ZEBRA_ROUTE_OSPF6 to "OSPFv3", whereas the
	  new function returns "ospf6".
	* ospfd.h: Remove extern struct message ospf_redistributed_proto[],
	  and add extern const char *ospf_redist_string(u_int route_type)
	  instead.
	* ospf_asbr.c: (ospf_external_info_add) In two messages, use
	  ospf_redist_string instead of LOOKUP(ospf_redistributed_proto).
	* ospf_vty.c: Remove local hard-coded table distribute_str.
	  (config_write_ospf_redistribute,config_write_ospf_distribute): Use
	  new library function zebra_route_string() instead of distribute_str[].
	* ospf_zebra.c: (ospf_redistribute_set,ospf_redistribute_unset,
	  ospf_redistribute_default_set,ospf_redistribute_check)
	  In debug messages, use ospf_redist_string() instead of
	  LOOKUP(ospf_redistributed_proto).

2005-09-30 Vincent Jardin <vincent.jardin@6wind.com>

	* ospf_dump.c, ospf_ia.c, ospf_spf.c, ospf_ase.c:
	  remove unused DEBUG

2005-09-29 Alain Ritoux <alain.ritoux@6wind.com>

	* ospf_ism.c: generate SNMP traps on Interface state change
	* ospf_nsm.c: generate SNMP traps on Neighbour state change
	* ospf_snmp.[ch]: support for SNMP traps for interface and neighbours.

2005-09-29 Alain Ritoux <alain.ritoux@6wind.com>

	* ospf_vty.c: forece default route LSA to be re_issued whenever
	  cost is changed ( [no] ip ospf area XXX default-cost YYY)
	  Support ignore-mtu option
	* ospfd.h: define OSPF_MTU_IGNORE_DEFAULT
	* ospf_packet.c: support ignore-mtu option
	* ospf_interface.h: field added for skipping MTU check 
	* ospf_interface.c: fix memory leak in ospf_crypt_key_delete()
	  Set mtu_ignore field to default value
	* ospf_abr.[ch]: export ospf_abr_announce_network_to_area()
	* ospf_ism.h: add MACRO to convert internal ISM status into SNMP
	  correct values
	* ospf_snmp.c: add sanity check on LSA type in lsdb_lookup_next()
	  convert OSPFIFSTATE internal status into SNMP values

2005-09-28 Alain Ritoux <alain.ritoux@6wind.com>

	* ospf_packet.c: use new md5 API

2005-09-19 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_lsa.h: (ospf_external_lsa_flush) Comment out the 5th argument
	  (nexthop) since it is not used in the function (except inside
	  some commented-out code).
	* ospf_lsa.c: (ospf_external_lsa_flush,ospf_external_lsa_refresh)
	  Comment out the 5th argument to ospf_external_lsa_flush.
	* ospf_asbr.c: (ospf_redistribute_withdraw) Comment out 5th arg
	  to ospf_external_lsa_flush.
	* ospf_vty.c: (no_ospf_default_information_originate) Eliminate 5th
	  uninitialized nexthop arg to ospf_external_lsa_flush.
	* ospf_zebra.c: (ospf_zebra_read_ipv4) Comment out 5th arg
	  to ospf_external_lsa_flush.
	* ospfd.c: (ospf_network_set) Comment out 5th arg
	  to ospf_external_lsa_flush.

2005-09-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_opaque.c:
	  (ospf_opaque_lsa_refresh_schedule,ospf_opaque_lsa_flush_schedule)
	  No need to call ospf_lookup(), just use lsa0->area->ospf instead.

2005-08-21 Hasso Tepper <hasso at quagga.net>

	* ospf_vty.c: Make "show ip ospf neighbor xxx" commands work.
	  Interface should be specified by name now.

2005-08-17 Hasso Tepper <hasso at quagga.net>

	* ospf_vty.c: Check carefully if interface exists before trying to
	  print info about it.

2005-08-05 Hasso Tepper <hasso at quagga.net>

	* ospf_zebra.c: Don't assert/stop before type == ZEBRA_ROUTE_MAX if
	  dealing with routemaps. There is ospf->route_map[ZEBRA_ROUTE_MAX]
	  for default-information.

2005-07-26 Paul Jakma <paul.jakma@sun.com>

	* ospf_abr.c: (ospf_abr_announce_network_to_area) SET_FLAG
	  should be on lsa not old, which may be freed for one thing,
	  obviously.

2005-07-12 Paul Jakma <paul.jakma@sun.com>

	* ospfd.h: add OSPF_ABR_DEFAULT for convenience, make 
	  OSPF_ABR_CISCO be the default ABR type.
	* ospfd.c: (ospf_new) initialise abr_type to OSPF_ABR_DEFAULT
	* ospf_vty.c: (no_ospf_abr_type_cmd) add standard as a negatable
	  abr_type. default abr_type should be OSPF_ABR_DEFAULT.
	  (ospf_config_write) test whether default abr_type against
	  OSPF_ABR_DEFAULT, rather than any specific ABR_TYPE.

2005-06-20 Hasso Tepper <hasso at quagga.net>

	* ospf_nsm.c: Make database exchange for NSSA database work. 

2005-06-13 Paul Jakma <paul.jakma@sun.com>

	* ospf_spf.c: Try get more information on a SEGV under 
	  ospf_spf_vertex_add_parent.
	  (ospf_vertex_free) NULL out the child and nexthop lists
	  (ospf_vertex_add_parent) nexthop and child can not be NULL
	  vertex_nexthop's parent->child list can not be NULL
	  (ospf_spf_next) w and cw are per-loop iteration variables, move
	  declarations into loop body.
	  
2005-06-07 Hasso Tepper <hasso at quagga.net>

	* ospf_apiserver.c: Fix obvious error in notifying clients about ISM
	  changes - oi->ifp->status doesn't give to us info about ISM,
	  oi->state does.

2005-06-01  Akihiro Mizutani  <mizutani@net-chef.net>

	* ospf_ism.c (ospf_elect_bdr/ospf_elect_dr): Fix DR election bug.

2005-05-26 Paul Jakma <paul.jakma@sun.com>

	* ospf_abr.c: (ospf_abr_update_aggregate) Fix comment, cost bug itself
	  had been fixed long ago by Sowmini.

2005-05-19 Paul Jakma <paul.jakma@sun.com>

	* ospf_interface.c: (ospf_if_table_lookup) Fix a serious bug
	  a less serious one. 
	  1: this function is supposed to lookup
	  entries in the oifs ospf_interface route_table and return either
	  an existing oi or NULL to indicate not found, its caller depends
	  on this, yet this function uses route_node_get which /always/
	  returns a route_node - one is created if none exists. Use
	  route_node_lookup instead. This should fix root cause of the
	  reports of the (ospf_add_to_if) assert being hit.
	  2: oi's are inserted into this table with prefixlength set to
	  /32 (indeed, it should be a hash table, not a route_table),
	  however prefixlength to lookup was not changed, if no valid entry
	  can be inserted other than /32, then nothng but /32 should be
	  looked up. This possibly only worked by fluke..
	  Fix confirmed by 2 reporters (one list, one IRC), definitely a
	  backport candidate once it has been incubated in HEAD for a while.
	  Thanks to Patrick Friedel and Ivan Warren for testing.
	  
2005-05-11 Paul Jakma <paul.jakma@sun.com>

	* (general) Fix memory leaks in opaque AS-scope LSAs, reported and
	  with much debugging done by by scott collins <scollins@agile.tv>.
	* ospf_lsa.c: (ospf_discard_from_db) dont call
	  ospf_ase_unregister_external_lsa for opaque-lsa's, opaques are
	  never registered with ase in the first place.
	* ospf_packet.c: (general) Disabuse opaque related code of its
          tendency to try gather up things into temporary lists.
          (ospf_ls_upd) remove the temporary lists opaque uses, call
          opaque functions inline, just like all other types.
          (ospf_ls_ack) ditto.
          (ospf_recv_packet) fixup sign warning.
        * ospf_opaque.c: (general) fix the unneeded use of lists, and
          untwist some of the logic.
          (ospf_opaque_self_originated_lsa_received) take a single LSA
          as argument, not a list of them. Remove the list loop. Logic 
          otherwise unchanged.
          (ospf_opaque_ls_ack_received) Mostly ditto. But untwist the logic,
          move the actions up into the switch block, remove the goto's and
          sanitise the logic near the end a bit.
        * ospf_opaque.h: Adjust definitions of aforementioned functions
          in ospf_opaque.c to match.
         
2005-05-07 Yar Tikhiy <yar@comp.chem.msu.su>

	* ospf_network.c: Log ifindex on multicast membership leave/join
	  events.

2005-05-06 Paul Jakma <paul.jakma@sun.com>

        * (general) extern and static qualifiers added. 
          unspecified arguments in definitions fixed, typically they should
          be 'void'.
          function casts added for callbacks.
          Guards added to headers which lacked them.
          Proper headers included rather than relying on incomplete
          definitions.
          gcc noreturn function attribute where appropriate.
        * ospf_opaque.c: remove the private definition of ospf_lsa's 
          ospf_lsa_refresh_delay.
        * ospf_lsa.h: export ospf_lsa_refresh_delay
        * ospf_packet.c: (ospf_make_md5_digest) make *auth_key const, 
          correct thing to do - removes need for the casts later.
        * ospf_vty.c: Use vty.h's VTY_GET_INTEGER rather than ospf_vty's
          home-brewed versions, shuts up several warnings.
        * ospf_vty.h: remove VTY_GET_UINT32. VTY_GET_IPV4_ADDRESS and
          VTY_GET_IPV4_PREFIX moved to lib/vty.h.
        * ospf_zebra.c: (ospf_distribute_list_update_timer) hacky
          overloading of the THREAD_ARG pointer should at least use
          uintptr_t.

2005-04-15 Zhipeng Gong <zpgong@cdc.3upsystems.com>

	* ospf_abr.c: (ospf_abr_announce_network_to_area) dont forget
	  to approve LSAs for the case where metric has changed, lsa gets
	  flushed otherwise. (backport candidate).

2005-04-11 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_zebra.c (ospf_zebra_add): Call zclient_send_message instead
	  of writen.

2005-04-02 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_interface.h: (ospf_if_lookup_by_name) Remove declaration of a
	  function that does not exist.

2005-04-02 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_zebra.c: (zebra_interface_if_lookup) Must use
	  if_lookup_by_name_len.

2005-04-02 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_interface.c: (ospf_vl_new) Use strnlen to fix call to if_create.

2005-04-02 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_vty.c: (show_ip_ospf_interface_sub) Show ifindex and interface
	  flags to help with debugging.
	* ospf_zebra.c: (ospf_interface_delete) After deleting, set ifp->ifindex
	  to IFINDEX_INTERNAL.
	  (zebra_interface_if_lookup) Make function static.  Tighten up code.

2005-03-31 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_dump.c: (show_debugging_ospf) Show if ospf event debugging
	  is turned on.

2005-03-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_zebra.c: (ospf_interface_state_up) If the MTU of an operative
	  interface changes, print a debug message and call ospf_if_reset()
	  to simulate down/up on the interface.
	* ospf_interface.h: Declare new function ospf_if_reset().
	* ospf_interface.c: (ospf_if_reset) New function to call ospf_if_down
	  and ospf_if_up for all ospf interfaces attached to an interface.

2005-03-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_write_frags) Enhance error message to
	  show MTU.  Also make function static.
	  (ospf_write) Enhance error message to show interface name and MTU.
	  Also make function static.

2005-03-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_vty.c: (show_ip_ospf_interface_sub) Display interface MTU and
	  bandwidth; this is useful for debugging problems.  Also, the function
	  should be static.

2005-03-27 Hasso Tepper <hasso at quagga.net>

	* ospf_snmp.c: Don't crash in snmp query if ospf instance doesn't
	  exist at all.

2005-03-25 Hasso Tepper <hasso at quagga.net>

	* ospfd.h: Include log.h, fixes compile with gcc-4.0.

2005-03-13 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_lsa.c: (ospf_lsa_refresh_walker) If the system clock jumps
	  backward, then current time may be less than
	  ospf->lsa_refresher_started.  This was causing invalid values
	  for ospf->lsa_refresh_queue.index resulting in infinite loops.
	  Problem fixed by casting the expression to unsigned before taking
	  the modulus.

2005-02-23 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospfd.h: Add new field struct stream *ibuf to struct ospf.
	* ospfd.c: (ospf_new) Check return code from ospf_sock_init.
	  Allocate ibuf using stream_new(OSPF_MAX_PACKET_SIZE+1).
	  (ospf_finish) Call stream_free(ospf->ibuf.
	* ospf_packet.c: (ospf_read) Call stream_reset(ospf->ibuf) and then
	  pass it to ospf_recv_packet for use in receiving the packet
	  (instead of allocating a new stream for each packet received).
	  Eliminate all calls to stream_free(ibuf).
	  (ospf_recv_packet) The struct stream *ibuf is now passed in as
	  an argument.  No need to use recvfrom to peek at the packet
	  header (to see how big it is), just use ospf->ibuf which is
	  always large enough (this eliminates a system call to recvfrom).
	  Therefore, no need to allocate a stream just for this packet,
	  and no need to free it when done.

2005-02-23 Vincenzo Eramo <eramo at infocom.ing.uniroma1.it>

	* ospf_lsa.h: New flag to the LSA structure for the SPF calculation.
	* ospf_lsdb.h: Export ospf_lsdb_clean_stat() function.
	* ospf_spf.h: Add link to the LSA stat structure into vertex.
	* ospf_spf.c: New functions cmp() and update_stat() to manage
	  candidates. Remove ospf_spf_has_vertex(), ospf_vertex_lookup(),
	  ospf_install_candidate() and ospf_spf_register() functions not needed
	  any more. Update ospf_vertex_new(), ospf_spf_next() and
	  ospf_spf_calculate() functions to use pqueue instead of linked list.

2005-02-21 Hasso Tepper <hasso at quagga.net>

	* ospf_ase.c: Don't show messages related to the ase calculations if
	  we are not debugging.

2005-02-19 Hasso Tepper <hasso at quagga.net>

	* ospf_api.h: char isn't always signed, but it has to be it here.

2005-02-19 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_stream_copy) remove
	  (ospf_packet_dup) use stream_copy instead of ospf_stream_copy

2005-02-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_recv_packet) If there is somehow a runt
	  packet in the queue, it must be discarded.  Improve warning messages.
	  Fix scope to static.
	  (ospf_read) Fix bug: should reset the read thread in all cases
	  to make sure we continue to get incoming messages.

2005-02-15 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_recv_packet) Fix silly error wrt allocating
	  ibuf. Thanks Andrew.

2005-02-14 Paul Jakma <paul.jakma@sun.com>

	* ospf_packet.c: (ospf_recv_packet) use stream_recvmsg.

2005-02-11 Hasso Tepper <hasso at quagga.net>

	* ospf_lsdb.c: Fix sum of checksums calculation.

2005-02-09 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_write) If sendmsg fails, give more info in the
	  error message.
	  
2005-02-08 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_interface.h: Reduce structure padding by putting new u_char
	  field multicast_memberships in a better spot (grouped with
	  other u_char fields type and state).

2005-02-08 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_interface.h: Improve passive_interface comment.  Add new
	  multicast_memberships bitmask to struct ospf_interface to track
	  active multicast subscriptions.  Declare new function
	  ospf_if_set_multicast.
	* ospf_interface.c: (ospf_if_set_multicast) New function to configure
	  multicast memberships properly based on the current
	  multicast_memberships status and the current values of the
	  ospf_interface state, type, and passive_interface status.
	  (ospf_if_up) Remove call to ospf_if_add_allspfrouters (this is
	  now handled by ism_change_state's call to ospf_if_set_multicast).
	  (ospf_if_down) Remove call to ospf_if_drop_allspfrouters (now
	  handled by ism_change_state).
	* ospf_ism.c: (ospf_dr_election) Remove logic to join or leave
	  the DRouters multicast group (now handled by ism_change_state's call
	  to ospf_if_set_multicast).
	  (ism_change_state) Add call to ospf_if_set_multicast to change
	  multicast memberships as necessary to reflect the new interface state.
	* ospf_packet.c: (ospf_hello) When a Hello packet is received on a
	  passive interface: 1. Increase the severity of the error message
	  from LOG_INFO to LOG_WARNING; 2. Add more information to the error
	  message (packet destination address and interface address);
	  and 3. If the packet was sent to ospf-all-routers, then try
	  to fix the multicast group memberships.
	  (ospf_read) When a packet is received on an interface whose state
	  is ISM_Down, enhance the warning message to show the packet
	  destination address, and try to update/fix the multicast group
	  memberships if the packet was sent to a multicast address.
	  When a packet is received for ospf-designated-routers, but the
	  current interface state is not DR or BDR, then increase the
	  severity level of the error message from LOG_INFO to LOG_WARNING,
	  and try to fix the multicast group memberships.
	* ospf_vty.c: (ospf_passive_interface) Call ospf_if_set_multicast for
	  any ospf interface that may have changed from active to passive.
	  (no_ospf_passive_interface) Call ospf_if_set_multicast for
	  any ospf interface that may have changed from passive to active.
	  (show_ip_ospf_interface_sub) Show multicast group memberships.

2005-02-08 Paul Jakma <paul@dishone.st>

	* ospf_packet.c: (various) Remove unneeded stream_set_putp abuse.

2005-02-02 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_read) Fix bug: must check for state ISM_Down,
	  not for event ISM_InterfaceDown.  And improve the message by
	  adding the interface flags.

2005-01-30 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_network.c: (ospf_sock_init) Save errno before calling
	  ospfd_privs.change.

2005-01-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_packet_add) If oi->obuf is NULL, print
	an error message and return.
	(ospf_read) If the interface state is ISM_InterfaceDown, issue
	a warning message and ignore the packet.

2005-01-10  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* ospf_packet.h: Remove commented out definition of
	OSPF_MAX_PACKET; neither it or the uncommented one are used any more.

	* ospf_packet.c (ospf_make_ls_upd): Leave room for authentication
	when deciding if an update will fit.
	(ospf_packet_authspace): Factor out calculation of size required
	for authentication.
	(ospf_make_db_desc): Use ospf_max_packet, not OSPF_MAX_PACKET.
	Don't confuse readers that there is a macro.

2004-12-30 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_network.c: Improve all setsockopt error messages to give detailed
	  information on the arguments.

2004-12-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_db_desc) Reduce severity of "Negotiation done"
	  messages from LOG_WARNING to LOG_INFO, since this seems to be
	  normal.

2004-12-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_read) Always look up the interface if
	  ospf_recv_packet returns NULL ifp, since some platforms such
	  as Solaris 8 appear to support ifindex retrieval but don't.

2004-12-22 Hasso Tepper <hasso at quagga.net>

	* ospf_dump.c: Show debug configuration in vtysh.
	* ospf_vty.c: Fix "show ip ospf" output. Router can't be elected in
	  any case if it's configured as "translate-never".
	* ospf_lsdb.[ch]: New function to calculate sum of checksums.
	* ospf_vty.c: Bugfix to show really number of AS external LSAs, not
	  number of all LSAs with AS scope, this includes opaque as LSAs as
	  well, show this number separately. Show numbers and sums of
	  checksums for each type of LSAs.
	* ospf_lsa.c: Calculate checksum before putting LSA into database.

2004-12-15 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_interface.h: Declare new function ospf_default_iftype.
	* ospf_interface.c: (ospf_default_iftype) New function to centralize
	  this logic in one place.
	* ospf_zebra.c: (ospf_interface_add) Use new function
	  ospf_default_iftype.
	* ospf_vty.c: (no_ip_ospf_network,config_write_interface) Fix logic
	  by using new function ospf_default_iftype.

2004-12-11 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_db_desc) Should be static, not global.
	  (ospf_hello,ospf_db_desc,ospf_ls_upd,ospf_ls_ack) Improve warning
	  messages to include identifying information (e.g. router id).
	* ospf_nsm.c: (nsm_change_state) Improve info message to include
	  router id and state names.

2004-12-09  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* ospf_apiserver.c (ospf_apiserver_term): Obtain struct
	ospf_apiserver * from listnode.  Remove unused variables.  Follows
	suggestion from Jay Fenlason.

2004-12-08 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* *.c: Change level of debug messages to LOG_DEBUG.

2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_main.c: (main) The 2nd argument to openzlog has been removed.

2004-12-03 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_db_desc) Reduce priority on a debug message
	  from LOG_NOTICE to LOG_DEBUG.

2004-12-03 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_main.c: (sigint) Use zlog_notice for termination message.
	  (main) Issue a startup announcement using zlog_notice.

2004-11-30 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_packet.c: (ospf_db_desc_proc) Fix spelling of packet in warning
	  message and in comment.
	  (ospf_db_desc) Warning message that a packet is being discarded
	  should give the router id of the packet source.  Fix spelling
	  of packet in two warning messages.
	  (ospf_ls_req) Warning message that a link state request is being
	  discarded should give the router id of the neighbor that sent it.

2004-11-26 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_main.c: Remove #include "debug.h" (was not being used, and
	  lib/debug.h has now been deleted).

2004-11-25 Hasso Tepper <hasso at quagga.net>

	* ospf_main.c: Make group to run as configurable.

2004-11-15  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* ospf_packet.c (ospf_recv_packet): Assume CMSG_SPACE is present
	and works (lib/zebra.h provides if OS doesn't).

2004-11-15 Paul Jakma <paul@dishone.st>

	* ospf_{apiserver,te}.c: ospf_lsa_free's should be ospf_lsa_unlock.

2004-11-12 Paul Jakma <paul@dishone.st>

	* ospf_ia.c: (process_summary_lsa) Only an ABR has any reason to
          ignore stub area summary default. Even so it seems a strange
          check, add a comment to that effect.

2004-11-04 Paul Jakma <paul@dishone.st>

	* ospfd.c: (ospf_network_match_iface) revert to previous network
          statement match behaviour.

2004-11-02 Paul Jakma <paul@dishone.st>

	* ospf_packet.c: (ospf_write_frags) remove iov arg, msg already points
	  to it. Add convenience pointer to msg->msg_iov[1], and use this,
	  fixing the unfortunate borkenness introduced in moving of this code 
	  to a function.
	  (ospf_write) remove iovp and fix up call to previous.
	  (ospf_ls_upd_packet_new) cast size to long int - unfortunately 
          glibc's size_t format modifier is not portable.

2004-10-31 Paul Jakma <paul@dishone.st>

	* ospf_packet.c: (ospf_write_frags) Add debug output
	  (ospf_write) set type early, so we can pass it to
	  ospf_write_frags.
	  (ospf_ls_upd_packet_new) print size in debug output when too large
	  packet is encountered.
	* ospf_zebra.c: (ospf_distribute_list_update_timer) Ugly misuse of
	  THREAD_ARG to store an integer, but it should at least use same
          same type to retrieve the value. Assert value is sane.

2004-10-22 Paul Jakma <paul@dishone.st>

	* ospf_network.c: (ospf_sock_init) call neutral setsock_ifindex()
          function.
        * ospf_packet.c: (ospf_read) manually look up ifindex
          if system could not have returned one, eg openbsd, thanks to Rivo
	  Nurges for highlighting problem and fix.
          Change setsockopt_pktinfo to setsockopt_ifindex.

2004-10-19 Andrew J. Schorr <aschorr@telemetry-investments.com>

	* ospf_snmp.c: (ospf_snmp_if_update) Fix logic to handle PtP links
	  with dedicated subnets properly.
	* ospf_lsa.c: (lsa_link_ptop_set) ditto.
	* ospfd.c: (ospf_network_match_iface) ditto.
	  (ospf_network_run) ditto.
	* ospf_interface.c: (ospf_if_is_configured) ditto.
	  (ospf_if_lookup_by_prefix) ditto.
	  (ospf_if_lookup_recv_if) ditto.
	* ospf_vty.c: (show_ip_ospf_interface_sub) Display the peer or
	  broadcast address if present.

2004-10-13 Hasso Tepper <hasso at quagga.net>

	* ospf_main.c: Unbreak compilation with ospfapi disabled.
	* ospf_snmp.c: Remove defaults used to initialize smux connection to
	  snmpd. Connection is initialized only if smux peer is configured.

2004-10-12 Hasso Tepper <hasso at quagga.net>

	* ospf_main.c, ospf_opaque.c: Unbreak ospfclient compilation - move
	  static variable from ospf_main.c into ospf_opaque.c.

2004-10-11 Hasso Tepper <hasso at quagga.net>

	* ospf_main.c, ospf_opaque.c: Disable ospfapi init by default. New
	  command line switch to enable it.

2004-10-11 Paul Jakma <paul@dishone.st>

	* ospf_dump.c: (ospf_ip_header_dump) Assume header is in host order
	  remove ntohs that should have dissappeared. Take struct ip
	  as argument, caller has to know there's an IP header at start of
	  stream anyway.
	* ospf_dump.h: update declaration of ospf_ip_header_dump.
	* ospf_packet.c: (ospf_write) correct call to 
	  sockopt_iphdrincl_swab_htosys which was munging the header.
	  (ospf_recv_packet) ip_len is needed for old OpenBSD fixup.
	  (ospf_read) sockopt_iphdrincl_swab_systoh ip header as soon as
	  we have it.
	* (global) Const char update and signed/unsigned fixes.
	* (various headers) size defines should be unsigned.
	* ospf_interface.h: remove duplicated defines, include the
	  authoritative header - though, these defines should probably
          be moved to a dedicated header, or ospfd.h.
	* ospf_lsa.h: (struct lsa) ls_seqnum should be unsigned.
	* ospf_packet.c: (ospf_write) cast result of shift to unsigned.
	  
2004-10-08 Hasso Tepper <hasso at quagga.net>
	
	* *.[c|h]: Fix compiler warnings: make some strings const, signed ->
	  unsigned, remove unused variables etc.

2004-10-07  Greg Troxel  <gdt@claude.ir.bbn.com>

	* ospf_apiserver.c (ospf_apiserver_unregister_opaque_type): Don't
	use of variable names 'node' and 'nextnode' to avoid possible
	conflict with list macros.  Move variable declaration inside for
	loop after a statement to top of function.

2004-10-07 Paul Jakma <paul@dishone.st>

	* ospf_snmp.c: Missed list typedef update
	* ospf_dump.c: Include sockopt.h for header swab functions.

2004-10-05 Paul Jakma <paul@dishone.st>

	* ospf_packet.c: replace ospf_swap_iph_to... with
          sockopt_iphdrincl_swab_...

2004-10-03 James R. Leu <jleu at mindspring.com>

	* ospf_zebra.c: Read router id related messages from zebra daemon.
	  Schedule router-id update thread if it's changed.
	* ospfd.c: Remove own router-id selection function. Use router id from
	  zebra daemon if it isn't manually overriden in configuration.

2004-09-27 Paul Jakma <paul@dishone.st>

	* ospf_dump.c: (ospf_ip_header_dump) Use HAVE_IP_HDRINCL_BSD_ORDER
	  Apply to offset too. Print ip_cksum, lets not worry about
	  possible 2.0.37 compile problems.
	* ospf_packet.c: (ospf_swap_iph_to{n,h}) Use
	  HAVE_IP_HDRINCL_BSD_ORDER.
	  (ospf_recv_packet) ditto.
	  (ospf_write) Fixup iov argument to ospf_write_frags.
          (struct msghdr).msg_name is caddr_t on most platforms.
	  (ospf_recv_packet) ditto. And msg_flags is not always there
          memset struct then set fields we care about rather than 
          initialise all fields individually.

2004-09-26 Hasso Tepper <hasso at quagga.net>

	* ospf_abr.c, ospf_dump.c, ospf_lsa.c, ospf_packet.c, ospf_vty.c,
	  ospf_zebra.c: Fix compiler warnings.

2004-09-24 Paul Jakma <paul@dishone.st>

        * ospf_apiserver.{c,h}: lists typedef removal cleanup.
          update some list loops to LIST_LOOP. some miscellaneous indent
          fixups.
          (ospf_apiserver_unregister_opaque_type) fix listnode_delete of
          referenced node in loop.
 	  (ospf_apiserver_term) loops calling ospf_apiserver_free, which
          deletes referenced nodes from apiserver_list, fixed.
        * ospf_interface.h: lists typedef removal cleanup.
        * ospf_opaque.{c,h}: lists typedef removal cleanup. update some list 
          loops to LIST_LOOP. miscellaneous style and indent fixups.
        * ospf_te.{c,h}: ditto
	* ospf_packet.c: lists typedef removal cleanup.
          (ospf_write) ifdef fragmentation support. move actual
	  fragmentation out to a new, similarly ifdefed, function.
	  (ospf_write_frags) fragmented write support, moved from previous.

2004-09-23 Hasso Tepper <hasso at quagga.net>

	* *.[c|h]: list -> struct list *, listnode -> struct listnode *.

2004-09-12 Paul Jakma <paul@dishone.st>

	* ospf_packet.c: Fix bugzilla #107
 	  (ospf_packet_max) get rid of the magic 88 constant
	  (ospf_swab_iph_ton) new function. set ip header to network order,
	  taking BSDisms into account.  
	  (ospf_swab_iph_toh) the inverse. 
	  (ospf_write) Add support for IP fragmentation, will only work on
	  linux though, other kernels make it impossible. get rid of the
	  magic 4 constant.  
	  (ospf_make_ls_upd) Bound check to end of stream, not to 
	  interface mtu.  
	  (ospf_ls_upd_packet_new) New function, allocate upd packet
	  taking oversized LSAs into account.
	  (ospf_ls_upd_queue_send) use ospf_ls_upd_packet_new to allocate,
	  rather than statically allocating mtu sized packet buffer, which
	  actually was wrong - it didnt take ip header into account, which
	  should not be included in packet buffer.
	  (ospf_ls_upd_send_queue_event) minor tweaks and remove
	  TODO comment.
	  
2004-08-31  David Wiggins  <dwiggins@bbn.com>

	* ospf_spf.c (ospf_spf_calculate): Many more comments and debug
	  print statements.  New function ospf_vertex_dump used in debugging.

2004-08-31  David Wiggins  <dwiggins@bbn.com>

	* ospf_spf.h (struct vertex): Comments for flags and structure members.

2004-08-31  David Wiggins  <dwiggins@bbn.com>

	* ospf_route.c: When finding an alternate route, log cost as well.

2004-08-31  David Wiggins  <dwiggins@bbn.com>

	* ospf_interface.c (ospf_lookup_if_params): Initialize af in
	  struct prefix allocated on stack.

2004-08-31  David Wiggins  <dwiggins@bbn.com>

	* ospf_packet.c (ospf_ls_ack_send_delayed): In p2mp mode, send
	  acks to AllSPFRouters, rather than All-DR.

2004-08-27  Hasso Tepper  <hasso at quagga.net>

	* ospf_vty.c: Don't print ospf network type under interface only
	  if interface is in broadcast mode and interface type really is
	  broadcast. Fixes Bugzilla #108.

2004-08-27  David Wiggins  <dwiggins@bbn.com>

	* ospf_spf.c (ospf_nexthop_calculation): Initialize address family
	  in on-stack struct prefix_ipv4.  Fixes point-to-multipoint SPF
	  calculation.

2004-08-26  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* ospf_packet.c (ospf_recv_packet): adjust size declaration of
	  buffer used to get interface index so that it compiles on other
	  than Linux and includes the required alignment space.  Probably
	  this was only working on sparc/sparc64 because most of
	  sockaddr_dl was not being written.

2004-08-19 Paul Jakma <paul@dishone.st>

	* ospf_packet.c: update to match sockopt renames.
	
2004-08-04 Paul Jakma <paul@dishone.st>

	* ospf_spf.c: (ospf_spf_consider_nexthop) Add comment about issue.
	  Compare only against list head - all nexthops must be same cost
	  anyway, fixes a reference-listnode-after-delete bug noted by
	  Kir Kostuchenko.
	  (ospf_nexthop_calculation) Use ospf_spf_consider_nexthop for all
	  candidates attached to root.
	  
2004-07-27 Paul Jakma <paul@dishone.st>

        * ospf_packet.c: (ospf_ls_upd_send_queue_event) fix thinko from
          last fix for ospfd wedging due to oversize LSAs: dont list loop on
          ospf_ls_upd_queue_send() - guaranteed segfault.
          
2004-07-27 Paul Jakma <paul@dishone.st>

	* ospf_opaque.c: (ospf_opaque_lsa_flush_schedule) do not NULL out
	  the LSA as then free_opaque_info_per_id() can never unlock (and
	  free) the LSA. Reported by Gunnar Stigen.
	  
2004-07-23 Paul Jakma <paul@dishone.st>

	* ospf_network.c: Replace PKTINFO/RECVIF with call to
	  setsockopt_pktinfo
	* ospf_packet.c: Use getsockopt_pktinfo_ifindex and
	  SOPT_SIZE_CMSG_PKTINFO_IPV4.

2004-07-14 Paul Jakma <paul@dishone.st>

	* ospf_packet.c: (ospf_ls_upd_send_queue_event) Partial fix for 
	  problem reported by Peter Frost amongst others, where function
	  will spin indefinitely if update list contains LSAs greater than
	  MTU-headers or other condition leading to update list never being
          cleared. Problem of what to do with these LSAs remains.
          (ospf_make_ls_upd) add comment about large LSA problem,
	  indentation cleanup.

2004-07-01  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* Makefile.am (lib_LTLIBRARIES): make libospf shared

2004-06-30  Greg Troxel  <gdt@poblano.ir.bbn.com>

	* Makefile.am: Add shlib support.

2004-06-10 Hasso Tepper <hasso@estpak.ee>

	* *: Removed ifdefs HAVE_NSSA.

2004-06-06 Paul Jakma <paul@dishone.st>

	* ospf_dump.c,ospf_lsa.c: Fix typos of merge of previous.
	  ospf_flood.c: (ospf_process_self_originated_lsa) fix zlog format

2004-05-31 Sagun Shakya <sagun.shakya@sun.com>

	* ospf_dump.c: (ospf_lsa_header_dump) LOOKUP can return null if
	  index is out of range.
	  ospf_flood.c: endianness fix
	  ospf_lsa.c: Missing ntohl's on (struct lsa *)->data->ls_seqnum
	  in various places.
	  
2004-05-10 Hasso Tepper <hasso@estpak.ee>

	* ospf_zebra.c, ospfd.c: Move ospf_prefix_list_update() function
	  to ospf_zebra.c from ospfd.c and add redistribution updates if
	  route-map is used in redistribution.
	* ospf_main.c: Remove now useless call to ospf_init().

2004-05-08 Paul Jakma <paul@dishone.st>

	* ospf_zebra.c: Sync with lib/zclient changes
	
2004-05-05 Paul Jakma <paul@dishone.st>

	* ospf_network.c: (ospf_sock_init) Check whether IP_HDRINCL is
	  defined. Warn at compile and runtime. Use 
	  IPTOS_PREC_INTERNETCONTROL otherwise.
	* ospf_packet.c:  (ospf_associate_packet_vl) cleanup, move 
	  some of the checks up to ospf_read, return either a 
	  virtual link oi, or NULL. 
	  (ospf_read) Cleanup, make it responsible for checks. Remove
	  the nbr lookup - moved to ospf_neighbor. Adjust all nbr
	  lookups to use new wrappers exported by ospf_neighbor.
	* ospf_neighbor.h: Add ospf_neigbour_get and ospf_nbr_lookup.
	* ospf_neighbor.c: (ospf_neigbour_get) Index ospf_interface 
	  neighbour table by router-id for virtual-link ospf_interfaces, 
	  not by peer_addr (which breaks for asymmetric vlinks)
	  (ospf_nbr_lookup) add a wrapper for nbr lookups to deal with
	  above.
	* ospf_interface.c: (ospf_vl_set_params) Catch changes of interface
	  address for either end of a virtual-link, and hence potential cost
	  changes.
	  
2004-04-22 Hasso Tepper <hasso@estpak.ee>

	* ospf_zebra.c: Don't ignore reject/bh routes, it's the only way
	  to "summarize" routes in ASBR at the moment.

2004-04-20 Hasso Tepper <hasso@estpak.ee>

	* ospfd.c: Unset NP flag if area is going to be normal or stub.
	  Fixes UNH OSPF_NSSA.1.2a comment.
	* ospf_abr.c: Originate default into stub/nssa area even if
	  summaries are disabled.
	* ospf_zebra.c: Don't attempt to redistribute 127.0.0.0/8.

2004-04-19 Hasso Tepper <hasso@estpak.ee>

	* ospf_vty.c: Don't warn that export- and import-list can't be
	  configured to backbone area if they are applied and are working
	  fine.

2004-02-19 Sowmini Varadhan <sowmini.varadhan@sun.com>

	* ospf_packet.c: Don't drop packets in Solaris x86.
	  [quagga-dev 1005].

2004-03-18 Amir Guindehi <amir@datacore.ch>

	* ospf_opaque.c: Attempt to correct the incorrect behavior of
	Quagga's ospfd in the special situation that a node's opaque
	capability has changed as "ON -> OFF -> ON". [quagga-dev 843].

2004-02-19 Sowmini Varadhan <sowmini.varadhan@sun.com>

	* ospf_abr.c: (ospf_abr_update_aggregate) UNH 3.12b,c, address range
	  should be configured with the highest cost path within the range,
	  not lowest.
	  
2004-02-17 Paul Jakma <paul@dishone.st>

	* ospf_zebra.c: (ospf_interface_delete) Do not delete the interface
	  params, nor the interface structure, if an interface delete 
	  message is received from zebra.
	* ospf_interface.c: (ospf_if_delete_hook) Delete the interface
	  params and interface, ie that which was previously removed in
	  (ospf_interface_delete) above.

2004-02-11 Hasso Tepper <hasso@estpak.ee>
	* ospf_interface.c, ospf_zebra.c: Don't attempt to read path->oi->ifp
	  if oi doesn't exist any more.

2004-02-11 Vadim Suraev <vadim.suraev@terayon.com>
	* ospf_packet.c (ospf_ls_upd): Router should flush received network
	  LSA if it was originated with older router-id ([zebra 14710] #6).

2003-12-08 Mattias Amnefelt <mattiasa@kth.se>

	* ospf_packet.c: (ospf_recv_packet) OpenBSD now leaves iph.ip_len 
	  network byte order.

2003-12-05  Greg Troxel  <gdt@poblano.ir.bbn.com>

	* ospfd.c (ospf_network_match_iface): Rewrite code for clarity
	while trying not to change semantics.  Add ifdefed-out code to
	avoid matching ppp interfaces whose destination address does not
	also match the prefix under consideration, to help out people with
	problems due to as-yet-unfixed bugs with p2p interfaces coming and
	going.

2003-07-25 kamatchi soundaram <kamatchi@tdd.sj.nec.com>

        * ospf_packet.c (ospf_ls_upd_send_queue_event): get next route
          node in body of the loop to avoid chance that route node
          is unlocked and deleted before the next iteration tries to 
          get next route node.

2003-05-24 Kenji Yabuuchi

	* ospf_interface.c(ospf_if_lookup_recv_if): Use the most specific
	  match for interface lookup.

2003-05-18 Hasso Tepper <hasso@estpak.ee>

	* ospf_vty.c: Show NSSA LSA route info in "show ip ospf database"
	output

2003-05-16 Hasso Tepper <hasso@estpak.ee>

	* ospf_lsa.c: Fix handling of NSSA

2003-04-23 Hasso Tepper <hasso@estpak.ee>

	* ospf_vty.c: fix "router xxx" node commands in vtysh

2003-04-19 Hasso Tepper <hasso@estpak.ee>

	* {ospf_abr,ospfd}.c: area id's DECIMAL -> ADDRESS
	* ospf_routemap.c: sync daemon's route-map commands to have same
	  syntax.
	
2003-04-19 Sergey Vyshnevetskiy <serg@vostok.net>

	* ospf_packet.c: Add missing param to zlog
	* ospf_flood.c: remove unused vars

2003-04-17 Denis Ovsienko <zebra@pilot.org.ua>

	* ospf_interface.c: fix incorrect memset

2003-04-10 Amir Guindehi <amir@datacore.ch>

	* ospf_lsa.[ch]: opaque LSA fix, use ospf_lookup.

2003-04-03 David Watson <dwatson@eecs.umich.edu>

	* ospf_lsa.c: byte order fix

2002-03-17  Amir Guindehi <amir@datacore.ch>

        * ospf_apiserver.[ch]: Merge Ralph Keller's OSPFAPI support.
        * ospf_api.[ch]: Merge Ralph Keller's OSPFAPI support.
	* ospfclient: OSPFAPI demonstration client.

2003-01-23  Masahiko Endo <endo@suri.co.jp>

	* ospf_ism.c: NSM event schedule bug fix.

2002-10-30  Greg Troxel <gdt@ir.bbn.com>

	* ospf_packet.c (ospf_make_md5_digest): MD5 length fix. 

2002-10-23  endo@suri.co.jp (Masahiko Endo)

	* ospf_opaque.c: Update Opaque LSA patch.

2002-10-23  Ralph Keller <keller@tik.ee.ethz.ch>

	* ospf_vty.c (show_ip_ospf_database): Fix CLI parse.

2002-10-23  Juris Kalnins <juris@mt.lv>

	* ospf_interface.c (ospf_if_stream_unset): When write queue
	becomes empty stop write timer.

2002-10-10  Greg Troxel <gdt@ir.bbn.com>

	* ospf_packet.c (ospf_check_md5_digest): Change >= to > to make it
	conform to RFC.

2002-07-07  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* zebra-0.93 released.

2002-06-19  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* ospf_spf.c (ospf_nexthop_calculation): Add NULL set to oi and
	check of l2.  Reported by: Daniel Drown <dan-zebra@drown.org>
	(ospf_lsa_has_link): LSA Length calculation fix.  Reported by:
	Paul Jakma <paulj@alphyra.ie>.

	* ospfd.c (ospf_if_update): Fix nextnode reference bug.  Reported
	by: juris@mt.lv.

2002-01-21  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* ospfd.c: Merge [zebra 11445] Masahiko ENDO's Opaque-LSA support.

2001-08-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_interface.c (ospf_add_to_if): Use /32 address to register
	OSPF interface information.
	(ospf_delete_from_if): Likewise.

	* ospf_zebra.c (ospf_interface_address_delete): Likewise.

2001-08-23  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* ospf_zebra.c (ospf_redistribute_unset): When redistribute type
	is OSPF, do not unset redistribute flag.

2001-08-19  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* zebra-0.92a released.

2001-08-15  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* zebra-0.92 released.

2001-08-12  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* ospfd.c (ospf_config_write): auto-cost reference-bandwidth
	configuration display.

2001-07-24  David Watson <dwatson@eecs.umich.edu>

	* ospf_spf.c (ospf_spf_next): Modify ospf_vertex_add_parent to
	check for an existing link before connecting the parent and child.
	ospf_nexthop_calculation is also modified to check for duplicate
	entries when copying from the parent.  Finally, ospf_spf_next
	removes duplicates when it merges two equal cost candidates.

2001-07-23  itojun@iijlab.net

	* ospfd.c (show_ip_ospf_neighbor): Check ospf_top before use it
	[zebra 8549].

2001-07-23  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* ospf_packet.c (ospf_write): Remove defined(__OpenBSD__) to make
	it work on OpenBSD.

2001-06-26  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_zebra.c (config_write_ospf_default_metric): Display
	default-metric configuration.

2001-06-18  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* ospf_ia.h (OSPF_EXAMINE_SUMMARIES_ALL): Remove old macros.

2001-05-28  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* ospf_snmp.c (ospfIfEntry): Fix interface lookup bug to avoid
	crush.
	(ospfIfMetricEntry): Likewise.

2001-03-18  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_packet.c (ospf_read): Fix typo.  Reported by: "Jen B
	Lin'Kova" <jen@stack.net>.

2001-03-15  Gleb Natapov <gleb@nbase.co.il>

	* ospf_interface.c (ip_ospf_network): Set interface parameter.
	(interface_config_write): Add check for OSPF_IFTYPE_LOOPBACK.

	* ospf_zebra.c (ospf_interface_add): Set interface parameter.

2001-02-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_packet.c (ospf_recv_packet): Solaris also need to add
	(iph.ip_hl << 2) to iph.ip_len.

2001-02-09  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospfd.h (OSPF_LS_REFRESH_TIME): Fix OSPF_LS_REFRESH_TIME value.
	Suggested by: David Watson <dwatson@eecs.umich.edu>.

	* ospf_zebra.c (zebra_init): Remove zebra node.

	* ospfd.c (ospf_area_range_set): Function name is changed from
	ospf_ara_range_cmd.
	(ospf_area_range_unset): New function which separated from DEFUN.
	New commands are added:
	"no area A.B.C.D range A.B.C.D/M advertise"
	"no area <0-4294967295> range A.B.C.D/M advertise"
	"no area A.B.C.D range A.B.C.D/M not-advertise"
	"no area <0-4294967295> range A.B.C.D/M not-advertise"
	
	* ospf_lsa.c (ospf_lsa_more_recent): Fix previous change.

2001-02-08  Matthew Grant <grantma@anathoth.gen.nz>

	* ospf_network.c (ospf_if_add_allspfrouters): Use
	setsockopt_multicast_ipv4.
	(ospf_if_drop_allspfrouters): Likewise.

	* ospf_lsa.c (ospf_router_lsa_install): Add rt_recalc flag.
	(ospf_network_lsa_install): Likewise.
	(ospf_summary_lsa_install): Likewise.
	(ospf_summary_asbr_lsa_install): Likewise.
	(ospf_external_lsa_install): Likewise.
	(ospf_lsa_install): Call ospf_lsa_different to check this LSA is
	new one or not.

2001-02-08  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_zebra.c (ospf_interface_delete): Do not free interface
	structure when ospfd receive interface delete message to support
	pseudo interface.

2001-02-01  Dick Glasspool <dick@ipinfusion.com>

	* ospfd.c (area_range_notadvertise): Change area range "suppress"
	command to "not-advertise".

	* ospfd.h (OSPF_LS_REFRESH_TIME): Change OSPF_LS_REFRESH_TIME from
	1800 to 60.

	* ospf_abr.c (ospf_abr_update_aggregate): When update_aggregate is
	updating the area-range, the lowest cost is now saved.

	* ospf_lsa.c (ospf_lsa_more_recent): Routing to compare sequence
	numbers rather than creating overflow during calculation.

2001-02-01  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* zebra-0.91 is released.

2001-01-31  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_packet.c (ospf_db_desc_proc): Do not continue process when
	NSM_SeqNumberMismatch is scheduled.
	(ospf_ls_req): Free ls_upd when return from this function.
	(ospf_ls_upd_timer): When update list is empty do not call
	ospf_ls_upd_send().  Suggested by: endo@suri.co.jp (Masahiko
	Endo).

2001-01-26  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_lsa.c (ospf_maxage_flood): Flood LSA when it reaches
	MaxAge.  RFC2328 Section 14.
	(ospf_maxage_lsa_remover): Call above function during removing
	MaxAge LSA.

2001-01-26  Dick Glasspool <dick@ipinfusion.com>

	* ospf_flood.c (ospf_flood_through_as): Function is updated for
	NSSA Translations now done at ospf_abr.c with no change in P-bit.

	* ospf_lsa.c (ospf_get_nssa_ip): Get 1st IP connection for Forward
	Addr.
	(ospf_install_flood_nssa):  Leave Type-7 LSA at Lock Count = 2. 

	* ospf_ase.c (ospf_ase_calculate_route): Add debug codes.

	* ospf_abr.c (ospf_abr_translate_nssa): Recalculate LSA checksum.

	* ospf_packet.h (OSPF_SEND_PACKET_LOOP): Added for test packet.

	* ospf_dump.c (ospf_lsa_type_msg): Add OSPF_GROUP_MEMBER_LSA and
	OSPF_AS_NSSA_LSA.

	* ospfd.c (data_injection): Function to inject LSA.  This is
	debugging command.

2001-01-11  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_route.c (ospf_route_match_same): Remove function.
	(ospf_route_match_same_new): Renamed to ospf_route_match_same.

	* ospf_zebra.c (ospf_interface_address_delete): Add check for
	oi->address.  Suggested by Matthew Grant
	<grantma@anathoth.gen.nz>.
	(ospf_zebra_add): Remove function.
	(ospf_zebra_add_multipath): Rename to ospf_zebra_add.

	* ospf_interface.c: Remove HAVE_IF_PSEUDO part.

	* ospf_zebra.c: Likewise.

2001-01-10  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_ase.c: Remove OLD_RIB part.

	* ospf_route.c: Likewise.

	* zebra-0.90 is released.

	* ospf_packet.c (ospf_recv_packet): Use ip_len adjestment code to
	NetBSD.

2001-01-09  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_route.c (ospf_route_delete): Use
	ospf_zebra_delete_multipath.

2001-01-09  Matthew Grant <grantma@anathoth.gen.nz>

	* ospf_interface.c (ospf_if_cleanup): Function name is renamed
	from ospf_if_free().  Rewrite whole procudure to support primary
	address deletion.

	* ospf_zebra.c (ospf_interface_address_delete): Add primary
	address deletion process.

2001-01-09  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_packet.c (ospf_recv_packet): OpenBSD has same ip_len
	treatment like FreeBSD.

2001-01-09  endo@suri.co.jp (Masahiko Endo)

	* ospf_packet.c (ospf_recv_packet): FreeBSD kernel network code
	strips IP header size from receiving IP Packet.  So we adjust
	ip_len to whole IP packet size by adding IP header size.

2001-01-08  endo@suri.co.jp (Masahiko Endo)

	* ospf_network.c (ospf_serv_sock): When socket() is failed return
	immediately.
	(ospf_serv_sock): Close socket when it is not used.

	* ospf_packet.c (ospf_write): Set sin_len when HAVE_SIN_LEN is
	defined.
	(ospf_write): When bind is fined, close sock.

2001-01-07  Gleb Natapov <gleb@nbase.co.il>

	* ospf_zebra.c (ospf_interface_state_up): Fixes coredump that
	appears when you try to configure bandwidth on the ppp interface
	that is not yet configured in ospfd.

2001-01-07  Michael Rozhavsky <mrozhavsky@opticalaccess.com>

	* ospf_route.c (show_ip_ospf_route_external): "show ip ospf route"
	will print nexthops for AS-external routes.

	* ospf_ase.c (ospf_ase_route_match_same): New function to compare
	ASE route under multipath environment.
	(ospf_ase_compare_tables): Likewise.

2001-01-01  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospfd.h (OSPF_VTYSH_PATH): Change "/tmp/ospfd" to "/tmp/.ospfd".

2000-12-28  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_route.c (ospf_route_install): Install multipath information
	to zebra daemon.

	* ospf_zebra.c (ospf_zebra_add_multipath): Function for passing
	multipath information to zebra daemon.

2000-12-25  Dick Glasspool <dick@ipinfusion.com>

	* ospf_packet.c (ospf_write): Call ospf_packet_delete when sendto
	fail.
	(DISCARD_LSA): Add argument N for logging point of DISCARD_LSA is
	called.

	* ospf_lsa.c (ospf_external_lsa_refresh): NSSA install_flood will
	leave Type-7 LSA at Lock Count = 2.

	* ospf_flood.c (ospf_flood_through): Flood_though_as updated for
	NSSA no P-bit off during Area flooding, but P-bit is turned off
	for mulitple NSSA AS flooding.

	* ospf_ase.c (ospf_ase_calculate_timer): Added calculations for
	Type-7 LSDB.

	* ospf_abr.c (ospf_abr_translate_nssa): Removed one unlock call.
	(ospf_abr_announce_nssa_defaults): Corrected Debug from EVENT to
	NSSA.

2000-12-25  Michael Rozhavsky <mrozhavsky@opticalaccess.com>

	* ospf_zebra.c (ospf_zebra_read_ipv4): Checking the age of the
	found LSA and if the LSA is MAXAGE we should call refresh instead
	of originate.

2000-12-18  Dick Glasspool <dick@ipinfusion.com>
	   	   
	* ospf_abr.c: Removed redundant "...flood" in
	announce_network_to_area().  Repaired nssa Unlock by using
	discard.

	* ospf_packet.c: Removed old NSSA translate during mk_ls_update.
	
	* ospfd.c: Free up all data bases including NSSA.

	* ospf_lsa.c: Now allow removal of XLATE LSA's Check in
	discard_callback. Added routine to get ip addr from within the
	ifp.

	* ospf_flood.c: Now set Forward Address for outgoing Type-7.

	* ospf_lsa.h: Added prototype for the below. struct in_addr
	ospf_get_ip_from_ifp (struct interface *ifp).

2000-12-14  Gleb Natapov <gleb@nbase.co.il>

	* ospf_packet.c (ospf_recv_packet): New OSPF pakcet read method.
	Now maximum packet length may be 65535 bytes (maximum IP packet
	length).

	* ospf_interface.c (ospf_if_stream_set): Don't make input buffer.

	* ospfd.c (config_write_network_area): Remove unnecessary area
	lookup code.

2000-12-13  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_packet.c (ospf_read): Accept packet bigger than MTU value.

2000-12-13  Gleb Natapov <gleb@nbase.co.il>

	* ospfd.c (config_write_network_area): Fix bug in
	config_write_network_area function.

2000-12-12  Gleb Natapov <gleb@nbase.co.il>

	* ospf_abr.c (ospf_abr_announce_network_to_area): Make Summary
	LSA's origination and refreshment as same as other type of LSA.

	* ospf_lsa.c (ospf_summary_lsa_refresh): Return struct ospf_lsa *.

	* ospf_lsa.c (ospf_summary_asbr_lsa_refresh): Likewise.

2000-12-08  Dick Glasspool <dick@ipinfusion.com>

	The bulk of NSSA changes are contained herein; This version will
	require manual setting of "always" for NSSA Translator, and will
	not perform aggregation yet.

	* ospf_dump.c: "debug ospf nssa" is added.

	* ospf_dump.h: Likewise.

	* ospf_packet.c (ospf_hello): Display router ID on Bad NSSA Hello.

	* ospfd.c: Discard_LSA to stay away from LOCAL_XLT Process NSSA
	'never, candidate, always'.  Change "suppress" to "not-advertise".

	* ospfd.h: Add TranslatorRole to struct ospf_area.  Add anyNSSA to
	struct ospf.

	* ospf_ase.c (ospf_ase_calculate_route): External to stay away
	from LOCAL_XLT

	* ospf_nsm.c (ospf_db_summary_add): External to stay away from
	LOCAL_XLT

	* ospf_abr.c: Major logic added for abr_nssa_task().  If ABR, and
	NSSA translator, then do it.  Approve the global list, and flush
	any unapproved.
	
	* ospf_lsa.h: New LSA flag OSPF_LSA_LOCAL_XLT to indicate that the
	Type-5 resulted from a Local Type-7 translation; not used for
	flooding, but used for flushing.

	* ospf_flood.c: New NSSA flooding.

2000-12-08  Michael Rozhavsky <mrozhavsky@opticalaccess.com>

	* ospfd.c (ospf_find_vl_data): New function for looking up virtual
	link data.
	(ospf_vl_set_security): Virtual link configuration with
	authentication.
	(ospf_vl_set_timers): Set timers for virtual link.

	* New commands are added.
	"area A.B.C.D virtual-link A.B.C.D"
	"area A.B.C.D virtual-link A.B.C.D hello-interval <1-65535> retransmit-interval <3-65535> transmit-delay <1-65535> dead-interval <1-65535>"
	"area A.B.C.D virtual-link A.B.C.D hello-interval <1-65535> retransmit-interval <3-65535> transmit-delay <1-65535> dead-interval <1-65535> authentication-key AUTH_KEY"
	"area A.B.C.D virtual-link A.B.C.D authentication-key AUTH_KEY"
	"area A.B.C.D virtual-link A.B.C.D hello-interval <1-65535> retransmit-interval <3-65535> transmit-delay <1-65535> dead-interval <1-65535> message-digest-key <1-255> md5 KEY"
	"area A.B.C.D virtual-link A.B.C.D message-digest-key <1-255> md5 KEY"

	* ospf_packet.c (ospf_check_md5_digest): Add neighbor's
	cryptographic sequence number treatment.
	(ospf_check_auth): OSPF input buffer is added to argument.
	(ospf_read): Save neighbor's cryptographic sequence number.

	* ospf_nsm.c (nsm_change_status): Clear cryptographic sequence
	number when neighbor status is changed to NSM down.

	* ospf_neighbor.c (ospf_nbr_new): Set zero to crypt_seqnum.

	* ospf_neighbor.h (struct ospf_neighbor): Add cryptographic
	sequence number to neighbor structure.

2000-11-29  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_snmp.c (ospfIfLookup): OSPF MIB updates.
	(ospfExtLsdbEntry): Add OspfExtLsdbTable treatment.

2000-11-28  Michael Rozhavsky <mrozhavsky@opticalaccess.com>

	* ospfd.c (ospf_interface_down): Clear a ls_upd_queue queue of the
	interface.
	(ospf_ls_upd_queue_empty): New function to empty ls update queue
	of the OSPF interface.
	(no_router_ospf): 'no router ospf' unregister redistribution
	requests from zebra.

2000-11-28  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_ism.c (ism_change_status): Increment status change number.

	* ospf_interface.h (struct ospf_interface): Add new member for
	status change statistics.

	* Makefile.am: Update dependencies.

	* ospf_zebra.c (ospf_interface_add): OSPF SNMP interface update.
	(ospf_interface_delete): OSPF SNMP interface delete.

	* ospf_snmp.h: New file is added.

2000-11-23  Dick Glasspool <dick@ipinfusion.com>

	* ospfd.h: Add new ospf_area structure member for
	NSSATranslatorRole and NSSATranslator state.

	* ospfd.c: Provided for eventual commands to specify NSSA
	elections for "translator- ALWAYS/NEVER/CANDIDATE". Provided for
	decimal integer version of area-suppress.

	* ospf_flood.c: Flood Type-7's only into NSSA (not AS).

	* ospf_lsa.c: Undo some previous changes for NSSA.  If NSSA
	translator, advertise Nt bit.

	* ospf_route.c: 1st version of "sh ip os border-routers".

2000-11-23  Michael Rozhavsky <mrozhavsky@opticalaccess.com>

	* ospfd.c (area_vlink): Virtual link can not configured in stub
	area.

2000-11-23  Gleb Natapov <gleb@nbase.co.il>

	* ospf_packet.c (ospf_db_desc): In states Loading and Full the
	slave must resend its last Database Description packet in response
	to duplicate Database Description packets received from the
	master.  For this reason the slave must wait RouterDeadInterval
	seconds before freeing the last Database Description packet.
	Reception of a Database Description packet from the master after
	this interval will generate a SeqNumberMismatch neighbor
	event. RFC2328 Section 10.8
	(ospf_make_db_desc): DD Master flag treatment.

	* ospf_nsm.c (nsm_twoway_received): Move DD related procedure to
	nsm_change_status().
	(nsm_bad_ls_req): Likewise.
	(nsm_adj_ok): Likewise.
	(nsm_seq_number_mismatch): Likewise.
	(nsm_oneway_received): Likewise.

	* ospf_neighbor.h (struct ospf_neighbor): New structure member
	last_send_ts for timestemp when last Database Description packet
	was sent.

	* ospf_nsm.c (ospf_db_desc_timer): Make it sure nbr->last_send is
	there.  Call ospf_db_desc_resend() in any case.

2000-11-16  Michael Rozhavsky <mrozhavsky@opticalaccess.com>

	* ospf_lsa.c (lsa_link_broadcast_set): When there is no DR on
	network (suppose you have only one router with interface priority
	0). It's router LSA does not contain the link information about
	this network.

	* ospf_nsm.c (nsm_timer_set): When you change a priority of
	interface from/to 0 ISM_NeighborChange event should be scheduled
	in order to elect new DR/BDR on the network.

	* ospf_interface.c (ip_ospf_priority): Likewise.

	* ospf_flood.c (ospf_ls_retransmit_add): When we add some LSA into
	retransmit list we need to check whether the present old LSA in
	retransmit list is not more recent than the new
	one.

2000-11-09  Dick Glasspool <dick@ipinfusion.com>

	* ospf_packet.c: Allows for NSSA Type-7 LSA's throughout the NSSA
	area.  Any that exit the NSSA area are translated to type-5 LSA's.
	The instantiated image is restored after translation.
	(ospf_ls_upd_send_list): Renamed to ospf_ls_upd_queu_send().
	(ospf_ls_upd_send): Old function which enclosed by #ifdef 0 is
	removed.
	(ospf_ls_ack_send): Likewise.

	* ospf_flood.c: NSSA-LSA's without P-bit will be restricted to
	local area.  Otherwise they are allowed out the area to be
	translated by ospf_packet.c.

	* ospf_lsa.c: Undo some previous changes for NSSA.

	* ospf_lsdb.h: New access for type 7.

2000-11-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_route.c (ospf_path_exist): New function to check nexthop
	and interface are in current OSPF path or not.
	(ospf_route_copy_nexthops_from_vertex): Add nexthop to OSPF path
	when it is not there.  Reported by Michael Rozhavsky
	<mrozhavsky@opticalaccess.com>

2000-11-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_dump.c (config_write_debug): Add seventh string "detail" is
	added for flag is OSPF_DEBUG_SEND | OSPF_DEBUG_RECV |
	OSPF_DEBUG_DETAIL.

2000-11-06   Michael Rozhavsky <mrozhavsky@opticalaccess.com>

	* ospf_lsa.c (router_lsa_flags): ASBR can't exit in stub area.

2000-11-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_lsa.c (ospf_router_lsa_originate): Reduce unconditional
	logging.

2000-11-06  Dick Glasspool <dick@ipinfusion.com>

	* ospfd.h: Add ait_ntoa function prototype.

	* ospfd.c (ait_ntoa): New function for displaying area ID and
	Stub/NSSA status.
	(show_ip_ospf_interface_sub): Use ait_ntoa.
	(show_ip_ospf_nbr_static_detail_sub): Likewise.
	(show_ip_ospf_neighbor_detail_sub): Likewise.

	* ospf_route.c (ospf_intra_route_add): Set external routing type
	to ospf route.
	(ospf_intra_add_router): Likewise.
	(ospf_intra_add_transit): Likewise.
	(ospf_intra_add_stub): Likewise.
	(ospf_add_discard_route): Likewise.
	(show_ip_ospf_route_network): Use ait_ntoa.
	(show_ip_ospf_route_network): Likewise.
	(show_ip_ospf_route_router): Likewise.

	* ospf_lsa.c (show_lsa_detail): Use ait_ntoa.
	(show_lsa_detail_adv_router): Likewise.
	(show_ip_ospf_database_summary): Likewise.

	* ospf_route.h (struct route_standard): Add new member
	external_routing.

	* ospf_ia.c (process_summary_lsa): Set external routing tyep to ospf
	route.
	(ospf_update_network_route): Likewise.
	(ospf_update_router_route): Likewise.

2000-11-04  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_flood.c (ospf_process_self_originated_lsa): Enclose
	OSPF_AS_NSSA_LSA treatment with #ifdef HAVE_NSSA.

2000-11-03  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* Unconditional logging is enclosed with if (IS_DEBUG_OSPF_EVENT).
	Please specify "debug ospf event" for enable logging.

	* ospf_ism.c: Do not extern debug flag varible.  It is done by
	ospf_debug.h
	* ospf_asbr.c: Likewise.
	* ospf_lsa.c: Likewise.
	* ospf_nsm.c: Likewise.
	* ospf_zebra.c: Likewise.

	* ospf_dump.c (debug_ospf_event): New command "debug ospf event"
	is added.

	* ospfd.c (router_ospf): Change logging from vty_out() to
	zlog_info().
	(ospf_area_stub_cmd): Likewise.

	* ospf_dump.h: Extern term_debug flags.
	(OSPF_DEBUG_EVENT): Add new flag.
	(IS_DEBUG_OSPF_EVENT): Add new macro.

2000-11-03  Dick Glasspool <dick@ipinfusion.com>

	* ospf_flood.c (ospf_process_self_originated_lsa):
	OSPF_AS_NSSA_LSA is treated as same as OSPF_AS_EXTERNAL_LSA.
	(ospf_flood): Type-5's have no change.  Type-7's can be received,
	and will Flood the AS as Type-5's They will also flood the local
	NSSA Area as Type-7's.  The LSDB will be updated as Type-5's, and
	during re-fresh will be converted back to Type-7's (if within an
	NSSA).
	(ospf_flood_through): Incoming Type-7's were allowed here if our
	neighbor was an NSSA.  So Flood our area with the Type-7 and also
	if we are an ABR, flood thru AS as Type-5.

	* ospf_lsa.c (ospf_external_lsa_refresh): Flood NSSA both NSSA
	area and other area.

	* ospf_packet.c (ospf_db_desc_proc): When AS External LSA is
	exists in DD packet, make it sure that this area is not stub.
	(ospf_ls_upd_list_lsa): When LSA type is NSSA then set lsa's area
	to NULL.
	(ospf_ls_upd): If the LSA is AS External LSA and the area is stub
	then discard the lsa.  If the LSA is NSSA LSA and the area is not
	NSSA then discard the lsa.

2000-11-03  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospfd.c (ospf_interface_run): Fix bug of Hello packet's option
	is not properly set when interface comes up.

2000-11-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospfd.h (OSPF_OPTION_O): Add new hello header option.

2000-11-01  Dick Glasspool <dick@ipinfusion.com>

	* ospf_lsa.h: Define OSPF_MAX_LSA to 8 when HAVE_NSSA is enabled.
	(OSPF_GROUP_MEMBER_LSA): Define OSPF_GROUP_MEMBER_LSA.

	* ospf_lsa.c (show_database_desc): Add "Group Membership LSA"
	string.

2000-10-31  Dick Glasspool <dick@ipinfusion.com>

	* ospf_lsa.h (OSPF_AS_NSSA_LSA): Define OSPF_AS_NSSA_LSA.
	
	* ospf_lsa.c (show_ip_ospf_database): NSSA database display
	function is added.  ALIASES which have "show ip ospf database
	nssa-external" is added.
	(show_ip_ospf_border_routers): New command "show ip ospf
	border-routers" is added.

2000-10-30  Dick Glasspool <dick@ipinfusion.com>

	* ospfd.c (router_ospf): NSSA Enabled message is added for
	testing.
	(ospf_area_type_set): Are type set for NSSA area.
	(ospf_area_stub_cmd): Special translation of no_summary into NSSA
	and summary information. If NSSA is enabled pass the information
	to ospf_area_type_set().
	(area_nssa): New commands are added:
	"area A.B.C.D nssa"
	"area <0-4294967295> nssa"
	"area A.B.C.D nssa no-summary"
	"area <0-4294967295> nssa no-summary"
	(ospf_no_area_stub_cmd): Special translation of no_summary into
	NSSA and summary information.  If external_routing is
	OSPF_AREA_NSSA unset area with ospf_area_type_set (area,
	OSPF_AREA_DEFAULT).
	(show_ip_ospf_area): Display NSSA status.
	(config_write_ospf_area): Show NSSA configuration.

	* ospf_packet.c (ospf_hello): For NSSA support, ensure that NP is
	on and E is off.

2000-10-26  Gleb Natapov <gleb@nbase.co.il>

	* ospf_lsa.c (ospf_network_lsa_body_set): The network-LSA lists
	those routers that are fully adjacent to the Designated Router;
	each fully adjacent router is identified by its OSPF Router ID.
	The Designated Router includes itself in this list. RFC2328,
	Section 12.4.2.

2000-10-23  Jochen Friedrich <jochen@scram.de>

	* ospf_snmp.c: ospf_oid and ospfd_oid are used in smux_open after
	it is registered.  So those variables must be static.

2000-10-18  K N Sridhar <sridhar@euler.ece.iisc.ernet.in>

	* ospfd.c: Add area_default_cost_decimal_cmd and
	no_area_default_cost_decimal_cmd alias.

2000-10-05  Gleb Natapov <gleb@nbase.co.il>

	* ospfd.c (ospf_network_new): Fix setting area format.
	(no_router_ospf): Check area existance when calling
	ospf_interface_down().

	* ospf_flood.c (ospf_external_info_check): Fix bug of refreshing
	default route.

2000-10-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* zebra-0.89 is released.

2000-09-29  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_snmp.c (ospfHostEntry): OSPF Host MIB is implemented.

	* ospfd.c (ospf_nbr_static_cmp): OSPF neighbor is sorted by it's
	address.

2000-09-28  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_interface.c (ospf_if_free):  Fix deleting self neighbor twice.

2000-09-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_packet.c (ospf_read): Solaris on x86 has ip_len with host
	byte order.

2000-09-25  Toshiaki Takada  <takada@zebra.org>

	* ospfd.c (ospf_compatible_rfc1583), (no_ospf_compatible_rfc1583):
	Add CISCO compatible command.

2000-09-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_abr.c (ospf_area_range_lookup): New function is added for
	area range lookup in OSPF-MIB.
	(ospf_area_range_lookup_next): Likewise.

2000-09-22  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospfd.c (no_router_ospf): Delete virtual link before deleting
	area structure.

	* ospf_lsa.c (ospf_external_lsa_refresh_type): Check
	EXTERNAL_INFO(type).

	* ospfd.c (no_router_ospf): Call ospf_vl_delete() instead of
	ospf_vl_data_free().

	* ospf_interface.c (ospf_vl_shutdown): Execute ISM_InterfaceDown
	when ospf_vl_shutdown is called.
	(ospf_vl_delete): Call ospf_vl_shutdown() to delete virtual link
	interface's thread.

2000-09-21  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_lsa.c: New implementation of OSPF refresh.

2000-09-20  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_snmp.c (ospfLsdbLookup): Add LSDB MIB implementation.

2000-09-18  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_snmp.c (ospfStubAreaEntry): Add OSPF stub area MIB.

2000-09-18  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_route.h (route_standard):  Change member from `struct area'
	to area_id.

	* ospf_abr.c (ospf_abr_announce_network), (ospf_abr_should_announce),
	(ospf_abr_process_network_rt), (ospf_abr_announce_rtr), 
	(ospf_abr_process_router_rt):
	* ospf_ase.c (ospf_find_asbr_route),
	(ospf_find_asbr_router_through_area),
	* ospf_ia.c (ospf_find_abr_route), (ospf_ia_router_route),
	(process_summary_lsa), (ospf_update_network_route),
	(ospf_update_router_route):
	* ospf_route.c (ospf_intra_route_add), (ospf_intra_add_router),
	(ospf_intra_add_transit), (ospf_intra_add_stub),
	(ospf_route_table_dump), (show_ip_ospf_route_network),
	(show_ip_ospf_route_router), (ospf_asbr_route_cmp),
	(ospf_prune_unreachable_routers):
	* ospf_spf.c (ospf_rtrs_print):
	* ospfd.c (ospf_rtrs_free):  Fix the struct change above.

2000-09-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_network.c (ospf_serv_sock_init): Enclose SO_BINDTODEVICE
	with ifdef.

2000-09-13  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_ism.c (ospf_elect_dr), (ospf_elect_bdr):  Fix DR election.

	* ospf_network.c (ospf_serv_sock_init):  Add socket option
	SO_BINDTODEVICE on read socket.

	* ospf_packet.c (ospf_hello):  Ignore Hello packet if E-bit does
	not match.

	* ospfd.c (ospf_area_check_free), (ospf_area_get),
	(ospf_area_add_if):  New function added.
	
2000-09-13  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_route.c (ospf_intra_add_router): Update ABR and ASBR router
	count.

	* ospf_spf.c (ospf_spf_init): Rest ABR and ASBR router count
	starting SPF calculation.

	* ospfd.h (struct ospf_area): Add ABR and ASBR router count.

2000-09-12  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospfd.c (ospf_area_id_cmp): New area structure is sorted by area
	ID.

	* ospf_lsa.c (ospf_router_lsa_originate): For OSPF MIB update
	lsa_originate_count.
	(ospf_network_lsa_originate): Likewise.
	(ospf_summary_lsa_originate): Likewise.
	(ospf_summary_asbr_lsa_originate): Likewise.
	(ospf_external_lsa_originate): Likewise.

2000-09-11  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_snmp.c (ospf_variables): ospfRouterID's type RouterID
	syntax is IpAddress.
	(ospf_admin_stat): New function for OSPF administrative status
	check.

2000-09-10  Jochen Friedrich <jochen@scram.de>

	* ospf_snmp.c: Implement OSPF MIB skeleton.

2000-09-08  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_snmp.c: New file is added.

2000-09-07  David Lipovkov <davidl@nbase.co.il>

	* ospf_zebra.c (ospf_interface_delete): Add pseudo interface
	treatment.

	* ospf_interface.c (interface_config_write): Likewise.

2000-08-17  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* zebra-0.88 is released.

2000-08-17  Michael Rozhavsky  <mike@nbase.co.il>

	* ospfd.c (ospf_area_free):  Remove virtual link configuration only
	when Area is removed.

2000-08-17  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospfd.c (network_area): Revert check for EXTERNAL_INFO
	(ZEBRA_ROUTE_CONNECT).
	(no_network_area): Likewise.

2000-08-16  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospfd.h (struct ospf): Add distance_table and
	distance_{all,intra,inter,external}.

	* ospf_zebra.c: Add OSPF distance related functions.

2000-08-15  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_asbr.c (ospf_external_info_find_lsa):  New function added.

	* ospf_lsa.c (ospf_default_external_info),
	(ospf_default_originate_timer), (ospf_external_lsa_refresh_default):
	New function added.

	* ospf_zebra.c
	(ospf_default_information_originate_metric_type_routemap),
	(ospf_default_information_originate_always_metric_type_routemap):
	Change name and add route-map function.
	(ospf_default_information_originate_metric_routemap),
	(ospf_default_information_originate_routemap),
	(ospf_default_information_originate_type_metric_routemap):
	New DEFUN added.

2000-08-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_zebra.c (zebra_interface_if_set_value): Change ifindex
	restore size from two octet to four.

2000-08-14  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_ase.c (ospf_ase_incremental_update):  Implement incremental
	AS-external-LSA in 16.6 of RFC2328.

2000-08-14  Matthew Grant  <grantma@anathoth.gen.nz>

	* ospf_interface.c (ospf_if_get_output_cost):  Change cost
	calculation algorithm.

	* ospf_packet (ospf_ls_upd):  Fix problem of LSA retransmitting.

2000-08-11  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_lsa.c (ospf_maxage_lsa_remover):  Fix maxage remover for
	AS-external-LSAs.

2000-08-10  Toshiaki Takada  <takada@zebra.org>

	* ospfd.c (auto_cost_reference_bandwidth):  New DEFUN added.
	`auto-cost reference-bandwidth' OSPF router command added.

2000-08-08  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_routemap.c (ospf_route_map_update):  New function added.
	Add route-map event hook.

2000-08-08  Toshiaki Takada  <takada@zebra.org>

	* ospf_zebra.c (ospf_distribute_check_connected):  If redistribute
	prefix is connected route on OSPF enabled interface, suppress to
	announce it.

2000-08-08  Matthew Grant  <grantma@anathoth.gen.nz>

	* ospf_interface.c (ospf_if_get_output_cost):
	New function added.  Handle bandwidth parameter for cost
	calculation.

2000-08-08  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_interface.c (interface_config_write):  Show interface
	configuration regardless interface is down.

	* ospf_ase.c (ospf_ase_caocluate_route):  Whole rewritten external
	route calculate function.

2000-08-08  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_routemap.c:  New file added.

	* ospf_asbr.c (ospf_reset_route_map_set_values),
	(ospf_route_map_set_compare):  New function added.

	* ospf_lsa.c (ospf_external_lsa_body_set):  Set routemap metric
	with AS-external-LSA.

2000-08-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_ase.c (ospf_ase_calculate_route_add): Pass new->cost to
	ospf_zebra_add as metric.
	(ospf_ase_calculate_route_add): Likewise.

	* ospf_route.c (ospf_route_install): Pass or->cost to
	ospf_zebra_add as metric.

	* ospf_zebra.c (ospf_zebra_add): Add metric arguemnt.
	(ospf_zebra_delete): Likewise.

2000-08-03  Matthew Grant  <grantma@anathoth.gen.nz>

	* ospf_flood.c (ospf_flood_delayed_lsa_ack):  New function added.
	Dispatch delayed-ACK with flooding AS-external-LSA across virtual
	link.

2000-07-31  Matthew Grant  <grantma@anathoth.gen.nz>

	* ospfd.c (show_ip_ospf_area):  Fix lack of VTY_NEWLINE when
	`show ip ospf'.

	* ospf_interface.c (ospf_if_free):  Fix bug of crash with
	Point-to-Point interface.

2000-07-27  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_flood.c (ospf_process_self_originated_lsa):
	Make sure to clear LSA->param (redistributed external information)
	before refreshment.

2000-07-27  Gleb Natapov  <gleb@nbase.co.il>

	* ospfd.c (refresh_group_limit), (refresh_per_slice),
	(refresh_age_diff):  New defun added.  Refresher related parameter
	can be configurable.

2000-07-27  Akihiro Mizutani  <mizutani@dml.com>

	* ospf_interface.c (interface_config_write):  Print `description'
	config directive to work.

2000-07-24  Akihiro Mizutani  <mizutani@dml.com>

	* ospf_interface.c (ospf_if_init): Use install_default for
	INTERFACE_NODE.

2000-07-24  Gleb Natapov  <gleb@nbase.co.il>
	
	* ospf_packet.c (ospf_ls_upd_send_list), (ospf_ls_upd_send_event),
	(ospf_ls_ack_send_list), (ospf_ls_ack_send_event): New function added.
	This make sending always as many LS update/Ack combined in one ospf
	packet.

2000-07-24  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_packet.c (ospf_ls_upd_list_lsa):  Set NULL to lsa->area if 
	LSA is AS-external-LSA.

	* ospf_nsm.c (nsm_reset_nbr):  Do not cancel Inactivity timer.

2000-07-21  Toshiaki Takada  <takada@zebra.org>

	* ospf_zebra.c (ospf_default_originate_timer):  Set timer for
	`default-information originate'.  Fix some default originate
	related functions.

2000-07-12  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (stream_put_ospf_metric):  New function added.

2000-07-12  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (show_ip_ospf_database_router),
	(show_ip_ospf_database_network), (show_ip_ospf_database_summary),
	(show_ip_ospf_database_summary_asbr), (show_ip_ospf_database_externel),
	(show_router_lsa), (show_any_lsa), (show_router_lsa_self),
	(show_any_lsa_self):  Functions removed.

	(show_lsa_prefix_set), (show_lsa_detail_proc), (show_lsa_detail),
	(show_lsa_detail_adv_router_proc), (show_lsa_detail_adv_router):
	New functions added.  Replace above functions.

	(show_ip_ospf_database_all), (show_ip_ospf_database_self_originated):
	Functions removed.
	(show_ip_ospf_database_summary):  New functions added.  Replace
	above functions.

	(show_ip_ospf_database_cmd):  DEFUN rearranged.
	(show_ip_ospf_database_type_id_cmd),
	(show_ip_ospf_database_type_id_adv_router_cmd),
	(show_ip_ospf_database_type_is_self_cmd):  New ALIASes added.
	(show_ip_ospf_database_type_adv_rotuer_cmd):  New DEFUN added.
	(show_ip_ospf_database_type_self_cmd):  New ALIAS added.

2000-07-11  Toshiaki Takada  <takada@zebra.org>

	* ospf_asbr.c (ospf_external_info_new),
	(ospf_external_info_free):  New functions added.

	* ospf_lsa.h (ospf_lsa):  Add new member `void *param' to set
	origination parameter for external-LSA.
	Remove member `redistribute'.

	* ospf_zebra.c (ospf_redistirbute_set):  When `redistribute'
	command executed, metric and metric-type values are overridden.
	If one of those is changed refresh AS-external-LSAs for appropriate
	type.

2000-07-11  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_lsa.c (ospf_summary_lsa_refresh),
	(ospf_summary_asbr_lsa_refresh):  Make sure to refresh summary-LSAs.

	* ospf_abr.c (set_metric):  New function added.

2000-07-07  Toshiaki Takada  <takada@zebra.org>

	* ospf_zebra.c (ospf_default_information_originate_metric_type),
	(ospf_default_information_originate_type_metric):  New defun added.
	Metic and Metric type can be set to default route.
	(ospf_default_information_originate_always_metric_type):
	(ospf_default_information_originate_always_type_metric):
	New defun added.  Metric and Metric type can be set to default
	always route.
	
	* ospf_zebra.c (ospf_default_metric), (no_ospf_default_metric):
	New defun added.

2000-07-06  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_flood.c (ospf_flood_through_area):  Fix bug of considering
	on the same interface the LSA was received from.

2000-07-06  Michael Rozhavsky  <mike@nbase.co.il>

	* ospfd.c (ospf_config_write):  Fix bug of printing `area stub'
	command with `write mem'.

	* ospfd.c (no_router_ospf):  Remove installed routes from zebra.

	* ospf_zebra.c (ospf_interface_delete):  Fix function to handle
	zebra interface delete event.

2000-07-06  Toshiaki Takada  <takada@zebra.org>

	* ospf_zebra.c (ospf_default_information_originate),
	(ospf_default_information_originate_always):  New DEFUN added.

2000-07-05  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_route.c (ospf_terminate):  Make sure to remove external route
	when SIGINT received.

2000-07-03  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_flood.c, ospf_ism.c, ospf_lsa,c, ospfd.c:  Make sure to free
	many structure with `no router ospf'.

2000-06-30  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_neighbor.c (ospf_nbr_new),
	ospf_nsm.c (nsm_timer_set):  Start LS update timer only
	when neighbor enters Exchange state.

2000-06-29  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_nsm.c (nsm_timer_set), (nsm_exchange_done),
	ospf_packet.c (ospf_db_desc_proc):
	Do not cancel DD retransmit timer when Master.

2000-06-29  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_abr.c (ospf_abr_announce_network_to_area),
	(ospf_abr_announce_rtr_to_area)
	ospf_ase.c (ospf_ase_rtrs_register_lsa),
	ospf_flood.c (ospf_process_self_originated_lsa),
	(ospf_flood_through_area), (ospf_ls_request_delete),
	ospf_interface.c (ospf_if_free),
	ospf_ism.c (ism_change_status),
	ospf_lsa.c (ospf_router_lsa_update_timer),
	(ospf_router_lsa_install), (ospf_network_lsa_install),
	(ospf_lsa_maxage_delete), (ospf_lsa_action),
	(ospf_schedule_lsa_flood_area),
	ospf_nsm.c (nsm_change_status),
	ospf_packet.c (ospf_make_ls_req_func), (ospf_make_ls_ack):
	Use ospf_lsa_{lock,unlock} for all looking-up of LSA.

	* ospf_flood.c (ospf_ls_request_free):  Function deleted.

	* ospf_lsa.c (ospf_discard_from_db):  New function added.

2000-06-26  Toshiaki Takada  <takada@zebra.org>

	* ospfd.h (ospf): struct member `external_lsa' name changed to
	`lsdb'.

2000-06-26  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (ospf_lsa_install), (ospf_router_lsa_install),
	(ospf_network_lsa_install), (ospf_summary_lsa_install),
	(ospf_summary_asbr_lsa_install), (ospf_external_lsa_install):
	Functions re-arranged.

	* ospf_lsa.c (IS_LSA_MAXAGE), (IS_LSA_SELF):  Macro added.
	
2000-06-20  Michael Rozhavsky <mike@nbase.co.il>

	* ospf_packet.c (ospf_ls_req), (ospf_ls_upd), (ospf_ls_ack):  Add
	verification of LS type.

2000-06-20  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_ase.c (ospf_ase_calculate_timer):  Add more sanity check
	whether rn->info is NULL.

2000-06-20  Toshiaki Takada  <takada@zebra.org>

	* ospfd.c (show_ip_ospf_interface_sub):  Show Router-ID of both
	DR and Backup correctly with `show ip ospf interface' command.

2000-06-20  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (ospf_lsa_lock), (ospf_lsa_unlock),
	(ospf_lsa_discard):  These functions are used for avoiding
	unexpected reference to freed LSAs.

2000-06-13  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_packet.c (ospf_ls_upd): Initialize lsa by NULL to avoid
	warning.

2000-06-12  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_ase.h (ospf_ase_rtrs_register_lsa): Add prototype.

2000-06-12  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (ospf_external_lsa_install):  Make sure to register
	LSA to rtrs_external when replacing AS-external-LSAs in LSDB.
	Fix core dump.

2000-06-10  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsdb.c (id_to_prefix), (ospf_lsdb_hash_key),
	(ospf_lsdb_hash_cmp), (ospf_lsdb_new), (ospf_lsdb_iterator),
	(lsdb_free), (ospf_lsdb_free), (ospf_lsdb_add),	(ospf_lsdb_delete),
	(find_lsa), (ospf_lsdb_lookup),	(find_by_id),
	(ospf_lsdb_lookup_by_id), (ospf_lsdb_lookup_by_header):  Functinos
	removed for migration to new_lsdb.

	* ospf_lsa.c (ospf_summary_lsa_install),
	(ospf_summary_asbr_lsa_install), (ospf_maxage_lsa_remover),
	(ospf_lsa_maxage_walker), (ospf_lsa_lookup),
	(ospf_lsa_lookup_by_id):  Use new_lsdb instead of ospf_lsdb.
	(count_lsa), (ospf_lsa_count_table), (ospf_lsa_count),
	(ospf_get_free_id_for_prefix):	Funcitions removed.
	
2000-06-09  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_ism.c (ism_interface_down):  Prevent some unneeded DR changes.

	* ospf_packet.c (ospf_db_desc_proc):  Fix memory leak.
	(ospf_hello):  Always copy router-ID when hello is received.

2000-06-08  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_lsa.h (struct ospf_lsa): Add member of pointer to struct
	ospf_area.

2000-06-08  Michael Rozhavsky <mike@nbase.co.il>

	* ospf_ase.c (ospf_asbr_route_same):  New function added.
	This function makes sure external route calculation more 
	precisely.

2000-06-07  Michael Rozhavsky <mike@nbase.co.il>

	* ospf_ism.c (ism_change_status):  Use ospf_lsa_flush_area for
	network-LSA deletion instead of using ospf_lsdb_delete.
	Also cancel network-LSA origination timer.

2000-06-07  Levi Harper  <lharper@kennedytech.com>

	* ospf_interface.c (ospf_if_down): Close read fd when an interface
	goes down.

2000-06-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_asbr.c (ospf_external_info_lookup): Add explicit brace for
	avoid ambiguous else.

	* ospf_flood.c (ospf_external_info_check): Likewise.

2000-06-05  Toshiaki Takada  <takada@zebra.org>

	* ospf_nsm.c (nsm_adj_ok):  Fix bug of DR election.

2000-06-04  Toshiaki Takada  <takada@zebra.org>

	* ospf_zebra.c (ospf_default_information_originate),
	(no_ospf_default_information_originate):  New DEFUN added.

2000-06-03  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.h, ospf_asbr.h (external_info):  Struct moved from
	ospf_lsa.h to ospf_asbr.h.

	* ospf_lsa.c, ospf_asbr.c (ospf_external_info_add),
	(ospf_external_info_delete):  Function moved from ospf_lsa.c
	to ospf_asbr.c.

2000-06-03  Toshiaki Takada  <takada@zebra.org>

	* ospf_flood.c (ospf_external_info_check):  New function added.
	(ospf_process_self_orignated_lsa):  Make sure to flush
	self-originated AS-external-LSA, when router reboot and no longer
	originate those AS-external-LSA.

2000-06-02  Toshiaki Takada  <takada@zebra.org>

	* ospf_network.c (ospf_serv_sock):  Remove SO_DONTROUTE
	socket option.

	* ospf_packet.c (ospf_write):  Set MSG_DONTROUTE flag for
	unicast destination packets.

2000-06-02  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsdb.c (new_lsdb_delete):  Delete entry from LSDB only when
	specified LSA matches.

2000-06-02  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_network.c (ospf_serv_sock):  Set SO_DONTROUTE
	socket option.

2000-06-01  Akihiro Mizutani  <mizutani@dml.com>

	* ospf_dump.c:  Replace string `Debugging functions\n' with DEBUG_STR.
	Replace string `OSPF information\n' with OSPF_STR.

2000-06-01  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsdb.[ch]:  Use new_lsdb struct for network-LSA instead of
	ospf_lsdb.

2000-06-01  Toshiaki Takada  <takada@zebra.org>

	* ospf_dump.c (config_debug_ospf_packet), (config_debug_ospf_event),
	(config_debug_ospf_ism), (config_debug_ospf_nsm),
	(config_debug_ospf_lsa), (config_debug_ospf_zebra),
	(term_debug_ospf_packet), (term_debug_ospf_event),
	(term_debug_ospf_ism), (term_debug_ospf_nsm),
	(term_debug_ospf_lsa), (term_debug_ospf_zebra):  Repalce debug_ospf_*
	variable to use for debug option flags.
	
	(debug_ospf_packet), (debug_ospf_ism), (debug_ospf_nsm),
	(debug_ospf_lsa), (debug_ospf_zebra):  Set {config,term}_debug_*
	flags when vty->node is CONFIG_NODE, otherwise set only term_debug_*
	flags.

	* ospf_dump.h (CONF_DEBUG_PACKET_ON), (CONF_DEBUG_PACKET_OFF),
	(TERM_DEBUG_PACKET_ON), (TERM_DEBUG_PACKET_OFF),
	(CONF_DEBUG_ON), (CONF_DEBUG_OFF), (IS_CONF_DEBUG_OSPF_PACKET),
	(IS_CONF_DEBUG_OSPF):  New Macro added.
	
2000-05-31  Toshiaki Takada  <takada@zebra.org>

	* ospfd.c (clear_ip_ospf_neighbor):  New DEFUN added.
	Currently this command is used for only debugging.

	* ospf_nsm.c (nsm_change_status):  Make sure thread cancellation
	for network-LSA when DR has no full neighbors.
	
	* ospf_nsm.c (ospf_db_summary_clear):  New function added.

2000-05-30  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsdb.c (new_lsdb_insert):  LSAs are always freed by
	maxage_lsa_remover when LSA is replaced.

2000-05-25  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_flood.c (ospf_ls_retransmit_delete_nbr_all):  Add argument
	`struct ospf_area' to remove LSA from Link State retransmission list
	of neighbor from only one Area.

2000-05-24  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_lsdb.c (ospf_lsdb_add):  Preserve flags field when
	overriting old LSA with new LSA.

2000-05-24  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_lsa.c (ospf_router_lsa_body_set):  Fix bug of router-LSA
	size calculation.

2000-05-22  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_route.c (ospf_intra_add_stub):
	* ospf_spf.h (struct vertex):  Use u_int32_t for distance (cost)
	value instead of u_int16_t.

2000-05-22  Axel Gerlach <agerlach@datus.datus.com>

	* ospf_ia.c (ospf_ia_network_route):  Fix bug of Inter-area route
	equal cost path calculation.

2000-05-21  Toshiaki Takada  <takada@zebra.org>

	* ospf_ase.c (ospf_ase_calculate_route_delete):  New function added.
	Make sure, when rotuer route is deleted, related external routes
	are also deleted.

2000-05-20  Toshiaki Takada  <takada@zebra.org>

	* ospfd.c (ospf_interface_down):  Make sure interface flag is disable
	and set fd to -1.

2000-05-16  Toshiaki Takada  <takada@zebra.org>

	* ospf_asbr.c (ospf_asbr_should_announce), (ospf_asbr_route_remove):
	Functions removed.

	* ospfd.h (EXTERNAL_INFO):  Macro added.
	Substitute `ospf_top->external_info[type]' with it.

2000-05-16  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (ospf_rtrs_external_remove):  New function added.

2000-05-14  Gleb Natapov <gleb@nbase.co.il>

	* ospf_flood.c (ospf_ls_retransmit_delete_nbr_all)
	* ospf_lsdb.c (new_lsdb_insert)
	* ospf_packet.c (ospf_ls_ack):  Fix database synchonization problem.

2000-05-14  Gleb Natapov <gleb@nbase.co.il>

	* ospf_lsa.h (tv_adjust), (tv_ceil), (tv_floor), (int2tv),
	(tv_add), (tv_sub), (tv_cmp):  Prototype definition added.

	* ospf_nsm.h (ospf_db_summary_delete_all):  Prototype definition added.

2000-05-13  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.[ch] (ospf_lsa):  struct timestamp type is changed from
	time_t to struct timeval.
	(tv_adjust), (tv_ceil), (tv_floor), (int2tv), (tv_add),
	(tv_sub), (tv_cmp):  timeval utillity functions added.

2000-05-12  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.[ch] (ospf_schedule_update_router_lsas):  Delete function.
	Change to use macro OSPF_LSA_UPDATE_TIMER instead of using
	this function.
	router-LSA refresh timer related stuff is re-organized.

2000-05-10  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_interface.c (ospf_vl_set_params):
	* ospf_packet.c (ospf_check_network_mask):
	* ospf_spf.[ch] (ospf_spf_next):
	Remove field address from `struct vertex', and search for peer
	address of virtual link in function `ospf_vl_set_params' instead.

2000-05-10  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_packet.c (ospf_ls_upd):  Fix some memory leak related LSA.

2000-05-08  Thomas Molkenbur  <tmo@datus.com>

	* ospf_packet.c (ospf_packet_dup):  Replace ospf_steram_copy()
	with ospf_stream_dup() to fix memory leak.

2000-05-08  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_flood.c (ospf_flood_through_area):  Fix the problem of
	LSA update without DROther.

2000-05-04  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_spf.c (ospf_vertex_free):  Fix memory leak of SPF calculation.

2000-05-03  Toshiaki Takada  <takada@zebra.org>

	* ospf_neighbor.c (ospf_db_summary_add):  Use new_lsdb struct
	instead linked-list.
	(ospf_db_summary_count), (ospf_db_summary_isempty):
	New function added.

	* ospf_lsa.c (ospf_rotuer_lsa):  Re-arrange and divide functions.

2000-05-02  Gleb Natapov  <gleb@nbase.co.il>

	* ospf_lsdb.c (new_lsdb_cleanup):  Fix memory leak.  When LSDB are
	not needed any more, then free them.

2000-05-02  Toshiaki Takada  <takada@zebra.org>

	* ospfd.c (timers_spf), (no_timers_spf):  New defun added.
	SPF calculation timers related stuff is rearranged.

	* ospf_spf.c (ospf_spf_calculate_timer_add):  Function removed.
	SPF timer is scheduled by SPF calculation delay and holdtime
	configuration variable.

	* ospf_lsa.c (ospf_external_lsa_nexthop_get):  Set AS-external-LSA's
	forwarding address when nexthop learned by other protocols is
	in the OSPF domain. 

	* ospf_zebra.c (ospf_redistribute_source_metric_type),
	(ospf_redistribute_source_type_metric):  Re-arrange DEFUNs and
	ALIASes.

2000-05-01  Toshiaki Takada  <takada@zebra.org>

	* ospf_flood.c (ospf_ls_retransmit_count),
	(ospf_ls_retransmit_isempty):  New function added.

	(ospf_ls_retransmit_add), (ospf_ls_retransmit_delete),
	(ospf_ls_retransmit_clear), (ospf_ls_retransmit_lookup),
	(ospf_ls_retransmit_delete_all), (ospf_ls_retransmit_delete_nbr_all),
	(ospf_ls_retransmit_add_nbr_all):  Replace these functions to use
	new_lsdb.

2000-04-29  Toshiaki Takada  <takada@zebra.org>

	* ospfd.c (no_network_area):  Add check Area-ID whether specified
	Area-ID with prefix matches config.

2000-04-27  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (ospf_maxage_lsa_remover): Fix problem of
	remaining withdrawn routes on zebra.

2000-04-25  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_nsm.c (nsm_kill_nbr), (nsm_ll_down), (nsm_change_status),
	(ospf_nsm_event):  Fix network-LSA re-origination problem.

2000-04-24  Toshiaki Takada  <takada@zebra.org>

	* ospf_nsm.c (ospf_db_desc_timer): Fix bug of segmentation fault
	with DD retransmission.

	* ospf_nsm.c (nsm_kill_nbr): Fix bug of re-origination when
	a neighbor disappears.

2000-04-23  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_abr.c (ospf_abr_announce_network_to_area):  Fix bug of
	summary-LSAs reorigination.  Correctly copy OSPF_LSA_APPROVED
	flag to new LSA. when summary-LSA is reoriginatd.

	* ospf_flood.c (ospf_flood_through_area):  Fix bug of flooding
	procedure.  Change the condition of interface selection.

2000-04-21  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (ospf_refresher_register_lsa): Fix bug of refresh never
	occurs.

	* ospfd.c (show_ip_ospf_neighbor_id): New defun added.
	`show ip ospf neighbor' related commands are re-arranged.

2000-04-20  Toshiaki Takada  <takada@zebra.org>

	* ospf_dump.c (debug_ospf_zebra): New defun added.
	Suppress zebra related debug information.

2000-04-19  Toshiaki Takada  <takada@zebra.org>

	* ospf_zebra.c (ospf_distribute_list_update_timer),
	(ospf_distribute_list_update), (ospf_filter_update):
	New function added.  Re-organize `distribute-list' router ospf
	command.

2000-04-13  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_packet.c (ospf_make_ls_upd): Add check for MAX_AGE.

2000-04-14  Michael Rozhavsky  <mike@nbase.co.il>

	* ospf_packet.c (ospf_make_ls_upd): Increment LS age by configured 
	interface transmit_delay.

2000-04-14  Sira Panduranga Rao  <pandu@euler.ece.iisc.ernet.in>

	* ospf_interface.c (ip_ospf_cost), (no_ip_ospf_cost):
	Add to schedule router_lsa origination when the interface cost changes.

2000-04-12  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (ospf_refresher_register_lsa),
	(ospf_refresher_unregister_lsa): Fix bug of core dumped.

	* ospfd.c (no_router_ospf): Fix bug of core dumped.

2000-03-29  Toshiaki Takada  <takada@zebra.org>

	* ospf_nsm.c (nsm_oneway_received): Fix bug of MS flag unset.

2000-03-29  Michael Rozhavsky <mike@nbase.co.il>

	* ospf_lsa.c (ospf_network_lsa):
	* ospf_nsm.c (ospf_nsm_event): Fix bug of Network-LSA originated
	in stub network.

2000-03-28  Toshiaki Takada  <takada@zebra.org>

	* ospf_nsm.c (nsm_bad_ls_req), (nsm_seq_number_mismatch),
	(nsm_oneway_received): Fix bug of NSM state flapping between
	ExStart and Exchange.

2000-03-28  Toshiaki Takada  <takada@zebra.org>

	* ospf_packet.h (strcut ospf_header): Fix the size of ospf_header,
	change u_int8_t to u_char.

2000-03-27  Toshiaki Takada  <takada@zebra.org>

	* ospf_lsa.c (ospf_lsa_checksum): Take care of BIGENDIAN architecture.

2000-03-27  Toshiaki Takada  <takada@zebra.org>

	* ospfd.c (ospf_interface_run): Make sure Address family matches.

2000-03-26  Love <lha@s3.kth.se>

	* ospf_packet.c (ospf_write): Chack result of sendto().

2000-03-26  Sira Panduranga Rao  <pandu@euler.ece.iisc.ernet.in>

	* ospf_nsm.c (nsm_oneway_received): Fix bug of 1-WayReceived in NSM.

2000-03-23  Libor Pechacek  <farco@clnet.cz>

	* ospf_lsa.c (ospf_network_lsa)
	* ospf_lsdb.c (new_lsdb_insert): Fix bug of accessing to
	unallocated memory.

2000-03-23  Toshiaki Takada  <takada@zebra.org>

	* ospfd.c (ospf_config_write): Fix bug of duplicate line for
	`area A.B.C.D authentication'.

2000-03-22  Toshiaki Takada  <takada@zebra.org>

	* ospf_debug.c (debug_ospf_lsa), (no_debug_ospf_lsa): Defun added.
	Suppress all zlog related to LSAs with this config option.

2000-03-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ospf_nsm.c (ospf_nsm_event): Add check for NSM_InactivityTimer.

2000-03-21  Toshiaki Takada  <takada@zebra.org>

	* ospf_packet.c (ospf_ls_upd_timer), (ospf_ls_req):
	Fix bug of memory leak about linklist.

	* ospf_flood.c (ospf_flood_through_area): Likewise.

2000-03-18  Sira Panduranga Rao  <pandu@euler.ece.iisc.ernet.in>

	* ospf_flood.c (ospf_ls_retransmit_lookup): Add checksum comparison
	to identify LSA uniquely.  This fix routes lost.

2000-03-18  Toshiaki Takada  <takada@zebra.org>

	* ospf_ase.c (ospf_find_asbr_route): Add sanity check with router
	routing table.

2000-03-17  Alex Zinin  <zinin@amt.ru>
	
        * ospf_spf.[ch]: Bug fix.
        The 2nd stage of Dijkstra could consider one vertex
        more than once if there is more than one link
        between the routers, thus adding extra CPU overhead
        and extra next-hops.
        Fixed.

2000-03-15  Sira Panduranga Rao  <pandu@euler.ece.iisc.ernet.in>

        * ospf_nsm.c (nsm_inactivity_timer): Changed to call nsm_kill_nbr().

2000-03-14  Toshiaki Takada  <takada@zebra.org>

        * ospf_route.c (ospf_route_copy_nexthops): Fix bug of memory leak of
        ospf_path.  Actually ignore merging ospf_route with completely same 
        paths.

2000-03-12  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (show_as_external_lsa_detail): fix bug of 
        external route tag byte order.

2000-03-11  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsdb.c (ospf_lsdb_insert): New function added.

2000-03-09  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (ospf_external_lsa_install),
        (ospf_lsa_lookup), (show_ip_ospf_database_all),
        (show_ip_ospf_database_self_originate): Use struct new_lsdb for
        LSDB of AS-external-LSAs instead of ospf_lsdb.

        * ospf_lsa.c (ospf_lsa_unique_id): New function added.
        Use for assigning Unique Link State ID instead of
        ospf_get_free_id_for_prefix().

2000-03-09  Toshiaki Takada  <takada@zebra.org>

        * ospf_ase.c (ospf_ase_calculate_timer): Fix bug of segmentation
        fault reported by George Bonser <george@siteROCK.com>.

2000-03-07  Libor Pechacek  <farco@clnet.cz>

        * ospfd.c (ospf_interface_down): Fix bug of segmentation fault.

2000-03-06  Toshiaki Takada  <takada@zebra.org>

        * ospf_route.c (ospf_route_cmp): Change meaning of return values.

2000-03-02  Alex Zinin <zinin@amt.ru>
        * ospfd.h, ospf_ia.h
        New Shortcut ABR code. Now area's flag can be configured
        with Default, Enable, and Disable values.
        More info will be in the new ver of I-D soon (see IETF web).

2000-02-25  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (ospf_lsa_header_set), (ospf_external_lsa_body_set),
        (osfp_external_lsa_originate), (ospf_external_lsa_queue),
        (ospf_external_lsa_originate_from_queue): New function added.
        (ospf_external_lsa): Function removed.

        * ospf_zebra.c (ospf_zebra_read_ipv4): Originate AS-external-LSA
        when listen a route from Zebra, instead creating external route.

        * ospf_asbr.c (ospf_asbr_route_add_flood_lsa),
        (ospf_asbr_route_add_queue_lsa),
        (ospf_asbr_route_install_lsa), (ospf_asbr_route_add):
        Functions removed.

        * ospf_ase.c (process_ase_lsa): Function will not be used.
        (ospf_ase_calculate), (ospf_ase_calculate_route_add),
        (ospf_ase_calculate_new_route), (ospf_ase_caluculate_asbr_route):
        process_ase_lsa () is separated to these functions.

        OSPF AS-external-LSA origination is whole re-organized.

2000-02-18  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c (ospf_ls_upd): Fix bug of OSPF LSA memory leak.

        * ospf_asbr.c (ospf_asbr_route_add_flood_lsa),
        (ospf_asbr_route_add_queue_lsa): Fix bug of OSPF external route
        memory leak.

2000-02-12  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_asbr.c (ospf_asbr_route_install_lsa): Re-calculate LSA
        checksum after change Advertised Router field.

2000-02-09  Toshiaki Takada  <takada@zebra.org>

        * ospf_asbr.c (ospf_external_route_lookup): Add new function.

2000-02-08  Toshiaki Takada  <takada@zebra.org>

        * ospfd.c (ospf_router_id_get), (ospf_router_id_update),
        (ospf_router_id_update_timer): Router ID decision algorithm is changed.
        Router ID is chosen from all of eligible interface addresses even if
        it is not enable to OSPF.

2000-02-08  Toshiaki Takada  <takada@zebra.org>

        * ospf_asbr.c (ospf_asbr_route_add): Function divided to
        ospf_asbr_route_add_flood_lsa, ospf_asbr_route_add_queue_lsa and
        ospf_asbr_route_install_lsa.  If Router-ID is not set, then LSA is
        waited to install to LSDB.
        `0.0.0.0 adv_router' AS-external-LSA origination bug was fixed.

2000-02-01  Sira Panduranga Rao  <pandu@euler.ece.iisc.ernet.in>

        * ospf_flood.c (ospf_ls_retransmit_lookup): Compare LS seqnum
        in the ACK before deleting.

        * ospf_packet.c (ospf_hello): Reset the flags after a shutdown
        and no shutdown of the interface.

2000-01-31  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c (ospf_ls_req): Send multiple Link State Update
        packets respond to a Link State Request packet.

        * ospfd.c (show_ip_ospf_neighbor_detail_sub): Show thread state.

        * ospf_interface.c (ospf_vl_new): Crash when backbone area
        is not configured and set virtual-link to no-backbone area,
        bug fixed.

2000-01-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_neighbor.h (struct ospf_neighbor): Add pointer to last send
        LS Request LSA.

        * ospf_packet.c (ospf_ls_upd): Comment out LS request list
        treatment.  That should be done in OSPF flooding procedure.

        * ospf_flood.c (ospf_flood_through_area): Enclose
        ospf_check_nbr_loding inside if-else close.

2000-01-31  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c (ospf_make_ls_upd): Fix bug of #LSAs counting.

2000-01-29  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c (ospf_make_md5_digest): Fix bug of md5 authentication.

2000-01-28  Toshiaki Takada  <takada@zebra.org>

        * ospfd.c (show_ip_ospf): Show Number of ASE-LSAs.

2000-01-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_packet.c (ospf_make_db_desc): Don't use rm_list for
        removing LSA from nbr->db_summary.

2000-01-27  Sira Panduranga Rao <pandu@euler.ece.iisc.ernet.in>

        * ospf_packet.c (ospf_ls_upd_send): Set AllSPFRouters to
        destination when the link is point-to-point.
        (ospf_ls_ack_send_delayed): Likewise.

2000-01-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_flood.c (ospf_ls_request_delete_all): Fix bug of next
        pointer lookup after the node is freed.

2000-01-26  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_asbr.c (ospf_asbr_route_add): Instead of scanning all AS
        external route, use ospf_top->external_self.

2000-01-27  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (ospf_forward_address_get): New function added.

        * ospf_asbr.c (ospf_asbr_check_lsas): Originate AS-external-LSA
        only when it should be replaced.

2000-01-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_flood.c (ospf_ls_retransmit_clear): Delete list node.

        * ospf_lsa.c (ospf_lsa_free): Reduce logging message using
        ospf_zlog value.

        * ospf_ism.c (ism_change_status): Fix bug of DR -> non DR status
        change.  Self originated LSA is freed but not deleted from lsdb.

2000-01-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_ism.c (ism_interface_down): Don't use router_id for
        detecting self neighbor structure.  Instead of that compare
        pointer itself.

        * ospf_neighbor.c (ospf_nbr_free): Cancel all timer when neighbor
        is deleted.
        (ospf_nbr_free): Free last send packet.

        * ospf_neighbor.h (struct ospf_neighbor): Remove host strucutre.
        Instead of that src is introduced.

        * ospf_nsm.h: Enclose macro defenition with do {} while (0).

2000-01-17  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospfd.c: Change part of passive interface implementation.  For
        passive interface just disabling sending/receiving Hello on the
        interface.

2000-01-16  Kai Bankett <kai.bankett@vew-telnet.net>

        * ospf_interface.h (OSPF_IF_PASSIVE): Add passive flag.
        * ospf_interface.c (ospf_if_lookup_by_name): Add new function.
        * ospf_lsa.c (ospf_router_lsa): Skip passive interface.
        * ospfd.c (passive_interface): New command passive-interface is
        added.
        (ospf_config_write): Print passive interface.

2000-01-15  Toshiaki Takada  <takada@zebra.org>

        * ospf_interface.h (crypt_key): New struct added to store
        multiple cryptographic autheitication keys.
        (ospf_interface): struct changed.

        * ospf_interface.c: ospf_crypt_key_new, ospf_crypt_key_add,
        ospf_crypt_key_lookup, ospf_crypt_key_delete: new functions added.

        * ospf_packet.c (ip_ospf_message_digest_key): Changed to store
        multiple cryptographic authentication keys.

2000-01-14  Toshiaki Takada  <takada@zebra.org>

        * ospf_interface.c: DEFUN (if_ospf_*) commands changed name to
        ip_ospf_* ().
        Old notation `ospf *' still remains backward compatibility.

1999-12-29  Alex Zinin  <zinin@amt.ru>
        * ospf_lsa.c: ospf_lsa_more_recent() bug fix
        * ospf_nsm.c, ospf_packet.c: remove nbr data struct when
          int goes down, also check DD flags correctly (bug fix)

1999-12-28  Alex Zinin  <zinin@amt.ru>
        * "redistribute <source> metric-type (1|2) metric <XXX>" added

1999-12-23  Alex Zinin  <zinin@amt.ru>
        * added RFC1583Compatibility flag
        * added dynamic interface up/down functionality

1999-11-19  Toshiaki Takada  <takada@zebra.org>

        * ospf_neighbor.h (struct ospf_neighbor): Add member state_change
        for NSM state change statistics.

1999-11-19  Toshiaki Takada  <takada@zebra.org>

        * ospfd.c (show_ip_ospf_neighbor_detail),
        (show_ip_ospf_neighbor_int_detail): DEFUN Added.

1999-11-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_asbr.c (ospf_asbr_check_lsas): Add check of
        lsa->refresh_list.

1999-11-11  Toshiaki Takada  <takada@zebra.org>

        * ospf_ia.[ch] (OSPF_EXAMINE_SUMMARIES_ALL): Macro added.
        This macro is expanded to ospf_examine_summaries ()
        for SUMMARY_LSA and SUMMARY_LSA_ASBR.
        (OSPF_EXAMINE_TRANSIT_SUMMARIES_ALL): Macro added.
        This macro is expanded to ospf_examine_transit_summaries ()
        for SUMMARY_LSA and SUMMARY_LSA_ASBR.

1999-11-11  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.[ch] (ospf_find_self_summary_lsa_by_prefix): Changed to
        macro OSPF_SUMMARY_LSA_SELF_FIND_BY_PREFIX.
        (ospf_find_self_summary_asbr_lsa_by_prefix): Changed to
        macro OSPF_SUMMARY_ASBR_LSA_SELF_FIND_BY_PREFIX.
        (ospf_find_self_external_lsa_by_prefix): Changed to
        macro OSPF_EXTERNAL_LSA_SELF_FIND_BY_PREFIX.

1999-11-11  Toshiaki Takada  <takada@zebra.org>

        * ospfd.c (ospf_abr_type): ospf_abr_type_cisco, ospf_abr_type_ibm,
        ospf_abr_type_shortcut and ospf_abr_type_standard DEFUNs are
        combined.
        * ospfd.c (no_ospf_abr_type): no_ospf_abr_type_cisco,
        no_ospf_abr_type_ibm and no_ospf_abr_type_shortcut DEFUNS are
        combined.

1999-11-10  Toshiaki Takada  <takada@zebra.org>

        * ospf_route.c (ospf_lookup_int_by_prefix): Move function to
        ospf_interface.c and change name to ospf_if_lookup_by_prefix ().

1999-11-01  Alex Zinin <zinin@amt.ru>
        * ospf_packet.c 
        some correction to LSU processing

        * ospf_lsa.c ospfd.h 
        randomize initial LSA refreshment interval
        and limit the size of LSA-group to 10
        to let randomization work more effectively.

1999-10-31  Alex Zinin <zinin@amt.ru>
        * ospf_interface.c 
        cancel t_network_lsa_self
        when freeing int structure

        *  ospf_abr.c ospf_asbr.c ospf_flood.c ospf_lsa.c 
           ospf_lsa.h ospf_lsdb.h ospfd.c ospfd.h

        Summary and ASE LSA refreshment functions
        added---LSA refreshment is paced to 70 LSAs
        per sec to avoid link overflow. Refreshment events
        are further randomized within a 10 sec interval
        to avoid syncing.
        
        Also the sigfault of memcmp() in ospf_lsa_is_different()
        is fixed.

1999-10-30  Alex Zinin <zinin@amt.ru>
        * ospf_nsm.c 
        Fix the bug where MAX_AGE LSAs
        are included into the DB summary.

        * ospf_interface.c 
        allocate 2*MTU input buffer instead of just MTU
        for the cases when the other router mistakenly
        sends larger packets thus causing fragmentation, etc.

        * ospf_nsm.c
        in nsm_reset_nbr() lists should be freed
        not when they are empty.

1999-10-29  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_zebra.c (ospf_acl_hook): Move OSPF_IS_ASBR and OSPF_IS_ABR
        check inside of if (ospf_top).

1999-10-29  Alex Zinin <zinin@amt.ru>
        * ospf_lsa.c ospf_lsdb.c :
        add assertion in lsa and lsa->data alloc functions,
        as well as in lsdb_add for new->data

        * ospf_lsdb.c: free hash table correctly

1999-10-28  John Capo <jc@irbs.com>

        * ospf_packet.h (OSPF_PACKET_MAX): Correct MAX packet length
        calculation

1999-10-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * OSPF-TRAP-MIB.txt: New file added. Edited version of RFC1850.

        * OSPF-MIB.txt: New file added.  Edited version of RFC1850.

1999-10-27  Alex Zinin  <zinin@amt.ru>
        * ospfd, ospf_zebra, ospf_abr
        "area import-list" command is added.
        This command allows to filter the inter-area routes
        injected into an area. Access list hook function
        extended to invalidate area exp/imp lists.

1999-10-25  Yoshinobu Inoue  <shin@nd.net.fujitsu.co.jp>

        * ospfd.c (ospf_interface_run): Enable to detect P2P network
        on an OSPF interface.

1999-10-19  Jordan Mendelson  <jordy@wserv.com>

        * ospf_lsdb.c (ospf_lsdb_add): Fix bug of crash
        in ospf_ls_retransmit_lookup ().

1999-10-19  Vladimir B. Grebenschikov <vova@express.ru>

        * ospf_route.c: Workaround about installation of OSPF routes into
        the zebra daemon.  Add checking of existance routes.  Free
        ospf_top->old_table if it exists.

1999-10-15  Jordan Mendelson <jordy@wserv.com>

        * Add support for MD5 authentication.

1999-10-12  Alex Zinin  <zinin@amt.ru>
        * ospfd.c, ospfd.h, ospf_abr.c:
          a new command "area export-list" was added, it allows
          the admin. to control which intra-area routes are
          announced to other areas by the ABR

1999-10-12  Alex Zinin  <zinin@amt.ru>
        * ospf_asbr.c (ospf_asbr_check_lsas): Fix bug of coredump
          when "no redistribute" is used after a distribute list
          denying some networks was used

1999-10-05  Toshiaki Takada  <takada@zebra.org>

        * ospf_route.c (ospf_path_dup): New function added.

1999-10-05  Toshiaki Takada  <takada@zebra.org>

        * ospf_interface.[ch]: Some of VL related funciton name changed.

1999-09-27  Alex Zinin  <zinin@amt.ru>

        * ospf_zebra.c: Distribute-list functionality added

1999-09-27  Toshiaki Takada  <takada@zebra.org>

        * ospfd.c (show_ip_ospf): Fix bug of segmentation fault when no ospf
        instance exists.

1999-09-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospfd.c (ospf_interface_down): Fix bug of misusing nextnode()
        instead of node->next.  Reported by Hiroki Ishibashi
        <ishibasi@dcd.abk.nec.co.jp>.

        * ospf_route.c (show_ip_ospf_route): Add check for ospf is enabled
        or not.

1999-09-23  Alex Zinin  <zinin@amt.ru>

        * stub area support added

1999-09-23  Alex Zinin  <zinin@amt.ru>

        * fwd_addr in ASE-LSAs is now set correctly
        * ASE routing changed to check the fwd_addr
        and skip the route if the addr points to one
        of our interfaces to avoid loops.

1999-09-22  Alex Zinin  <zinin@amt.ru>

        * ospf_interface:
        ospf_vls_in_area() added, it returns 
        the number of VLs configured through the area

        * ospf_interface.c ospf_lsa.c ospf_lsdb.c ospfd.c 
        honor correct mem alloc

1999-09-22  Alex Zinin  <zinin@amt.ru>

        * memory.[ch]:
        Some OSPF mem types added,
        plus more info in "show mem"

1999-09-21  Alex Zinin  <zinin@amt.ru>

        * ospfd.c:
        "area range substitute" added.
        It can be used on NAT-enabled (IP-masquarade)
        routers to announce private networks
        from an area as public ones into the outside
        world (not in the RFC, btw :)

1999-09-21  Alex Zinin  <zinin@amt.ru>

        * ospfd.c:
        "area range suppress" added.
        This command allows to instruct the router
        to be silent about specific ranges, i.e.,
        it is a method of route filtering on area
        borders

1999-09-21  Alex Zinin  <zinin@amt.ru>

        * ospfd.c VLs removed when "no network area" executed

1999-09-20  Alex Zinin  <zinin@amt.ru>

        * ospf_ase.c bug fix for not-zero fwd_addr 
        and directly connected routes.

1999-09-20  Yon Uriarte <yon@plannet.de>

        * ospf_packet.c (ospf_make_ls_req): Introduce delta value for
        checking the length of OSPF packet exceeds MTU or not.

        * ospf_lsa.c (ospf_lsa_different): Apply ntohs for checking
        l1->data->length.

1999-09-18  Alex Zinin  <zinin@amt.ru>

        * ospf_lsa.c bug fix for ospf_network_lsa() to
        include itself into the RID list

1999-09-10  Alex Zinin  <zinin@amt.ru>

        * Alternative ABR behaviors IBM/Cisco/Shortcut
        implemented

1999-09-10  Alex Zinin  <zinin@amt.ru>

        * router and network-LSA origination
        changed to honor MinLSInterval

1999-09-08  Alex Zinin  <zinin@amt.ru>

        * modified ABR behavior to honor VLs and transit
          areas

1999-09-07  Alex Zinin  <zinin@amt.ru>

        * completed VL functionality

1999-09-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_asbr.c: New file.
        ospf_asbr.h: New file.

        * ospf_zebra.c (ospf_redistribute_connected): Add redistribute
        related stuff.

1999-09-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospfd.h (OSPF_FLAG_VIRTUAL_LINK): Change OSPF_FLAG_VEND to
        OSPF_FLAG_VIRTUAL_LINK for comprehensiveness.

1999-09-03  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_spf.c (ospf_spf_register): Change name from
        ospf_spf_route_add() to ospf_spf_register().
        Include "ospfd/ospf_abr.h" for ospf_abr_task() prototype.

1999-09-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_lsa.c (ospf_external_lsa_install): Change to update
        lsa->data rather than install new one, when same id lsa is already
        installed.

1999-09-01  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_lsa.c (ospf_router_lsa_install): Return lsa value.
        (ospf_network_lsa_install): Likewise.
        (ospf_summary_lsa_install): Likewise.
        (ospf_summary_asbr_lsa_install): Likewise.
        (ospf_external_lsa_install): Likewise.

        * ospf_spf.c (ospf_spf_calculate): Comment out debug function
        ospf_rtrs_print().

1999-08-31  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_spf.c (ospf_rtrs_free): Add ospf_spf_calculate() for
        freeing rtrs.

1999-08-31  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (show_ip_ospf_database_summary),
        (show_ip_ospf_database_summary_asbr),
        (show_ip_ospf_database_external): New function added.
        `show ip ospf database summary',
        `show ip ospf database asbr-summary'
        `show ip ospf database external' command can be used.

        * ospf_lsa.c (ospf_lsa_count_table): New function added.
        (show_ip_ospf_database_all): show nothing if a type of LSA
        does not exist.
        
1999-08-31  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_lsa.c (ospf_maxage_lsa_remover): Preserve next pointer when
        the node is deleted.

1999-08-31  Toshiaki Takada  <takada@zebra.org>

        * ospf_flood.c (ospf_ls_retransmit_lookup): change to return
        struct ospf_lsa *.
        (ospf_ls_request_new), (ospf_ls_request_free),
        (ospf_ls_request_add), (ospf_ls_request_delete),
        (ospf_ls_request_delete_all), (ospf_ls_request_lookup):
        New function added.

        * ospf_packet.c (ospf_ls_upd_send_lsa): New function added.

        * ospf_lsa.h (LS_AGE): Slightly change macro definition.

        * ospf_lsa.c (ospf_lsa_more_recent), (ospf_lsa_diffrent):
        Use LS_AGE macro.

1999-08-30  Alex Zinin <zinin@amt.ru>
        
        * ospfd.c
        fix a bug with area range config write
        added "show ip ospf" command, it will be enhanced later on

1999-08-30  Alex Zinin <zinin@amt.ru>

        * ospf_lsa.c
        updated ospf_router_lsa() to honor flags (B-bit)

1999-08-30  Alex Zinin <zinin@amt.ru>

        * ospf_abr.c
        wrote major functions implementing ABR activity

1999-08-30  Alex Zinin <zinin@amt.ru>

        * ospf_ia.c ospf_route.c ospf_route.h 
        fixed the bug with ospf_route.origin field.
        Now it holds pointer to lsa_header

1999-08-30  Alex Zinin <zinin@amt.ru>

        * ospf_flood.c ospf_flood.h:
        transformed ospf_flood_if_select into ospf_flood_through_area()
        added new ospf_flood_if_select() and ospf_flood_through_as()

1999-08-30  Toshiaki Takada  <takada@zebra.org>

        * ospf_flood.[ch]: New file added.

        * ospf_packet.c (ospf_lsa_flooding),
        (ospf_lsa_flooding_select_if): functions move to ospf_flood.c

        * ospf_neighbor.c (ospf_put_lsa_on_retransm_list),
        (ospf_remove_lsa_from_retransm_list),
        (ospf_nbr_remove_all_lsas_from_retransm_list),
        (ospf_lsa_remove_from_ls_retransmit):
        (ospf_lsa_retransmit): functions move to
        ospf_flood.c, and change function's name:

        ospf_put_lsa_on_retransm_list ()
          -> ospf_ls_retransmit_add ()
        ospf_remove_lsa_from_retransm_list ()
          -> ospf_ls_retransmit_delete ()
        ospf_nbr_remove_all_lsas_from_retransm_list ()
          -> ospf_ls_retransmit_clear ()
        ospf_lsa_remove_from_ls_retransmit ()
          -> ospf_ls_retransmit_delete_nbr_all ()
        ospf_lsa_retransmit ()
          -> ospf_ls_retransmit_add_nbr_all ()

        * ospf_lsa.c (ospf_lsa_lookup_from_list): function move to
        ospf_flood.c, and change name to ospf_ls_retransmit_lookup ().

1999-08-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_neighbor.c (ospf_nbr_lookup_by_addr): Use
        route_node_lookup() instead of route_node_get().

        * ospf_packet.c (ospf_ls_upd): Temporary comment out (6) check.

1999-08-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_route.c (ospf_lookup_int_by_prefix): Add check of
        oi->address.

1999-08-29  Alex Zinin <zinin@amt.ru>
        * ospf_lsa.c 
        MaxAge LSA deletion functions added.

1999-08-29  Alex Zinin <zinin@amt.ru>
        * ospf_neighbor.c 
        ospf_nbr_lookup_by_addr(): added route_unlock_node()
        when function returns NULL if (rn->info == NULL)

1999-08-29  Alex Zinin <zinin@amt.ru>
        * ospfd.c
        added a hack for area range deletion
        
1999-08-29  Alex Zinin <zinin@amt.ru>
        * ospf_lsa.h 
        included lsdb field into struct ospf_lsa, to find
        LSDB easier when removing MaxAge LSAs.

1999-08-29  Alex Zinin <zinin@amt.ru>
        * ospf_lsa.c ospf_neighbor.c ospf_nsm.c 
          ospf_packet.c changed to honor new retransmit list
          management functions

1999-08-29  Alex Zinin <zinin@amt.ru>
        * ospf_neighbor.c , .h added new retransmit list functions.

1999-08-29  Alex Zinin <zinin@amt.ru>
        * Makefile.in
        added ospf_ase, ospf_abr, ospf_ia

1999-08-29  Alex Zinin <zinin@amt.ru>
        * ospf_spf.c:
        - changed ospf_next_hop_calculation() to include interface
          and nexthop addr for directly connected routers---more informative
          and solves problem with route installation into the kernel
        - changed ospf_nexthop_out_if_addr() to support routers, not only
          transit networks
        - added ospf_process_stubs();

1999-08-29  Alex Zinin <zinin@amt.ru>
        * ospf_lsa.c:
        - changed ospf_router_lsa() to provide correct links
          for p-t-p interfaces;
        - changed ospf_summary_lsa_install() to support table
          of self-originated summary-LSAs;
        - added ospf_summary_asbr_lsa_install() and ospf_external_lsa_install()
        - changed ospf_lsa_install() accordingly
        - changed show_ip_ospf_database_router_links() to support p-t-p

1999-08-29  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_packet.c (ospf_make_db_desc): Only master can clear more
        flag.

1999-08-29  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_packet.c (ospf_read): Add check of IP src address.

1999-08-28  Alex Zinin <zinin@amt.ru>
        * ospf_neighbor.h
        added ospf_nbr_lookup_by_routerid()

1999-08-28  Alex Zinin <zinin@amt.ru>
        * ospfd.h
        added ABR/ASBR flag definitions and fields;
        added iflist field to area structure;
        summary_lsa_self and summary_lsa_asbr_self are changed
        to be route tables;
        added ranges field---configured area ranges;
        A separate Routers RT added;
        area range config commands and config write added


1999-08-28  Alex Zinin <zinin@amt.ru>
        * ospf_route.c :
        ospf_route_free()--added code to free the list of paths;
        The following functions added:
                ospf_intra_add_router();
                ospf_intra_add_transit();
                ospf_intra_add_stub();
        the last function uses new ospf_int_lookup_by_prefix();
        show_ip_ospf_route_cmd()--changed to support new RT structure;
        added ospf_cmp_routes()--general route comparision function;
        added ospf_route_copy_nexthops() and ospf_route_copy_nexthops_from_vertex()
        they are used in ASE and IA routing;
        added ospf_subst_route() and ospf_add_route();

1999-08-28  Alex Zinin <zinin@amt.ru>
        * ospf_route.h :
        changed struct ospf_path to include output interface,
        changed struct ospf_route to support IA and ASE routing.
        added prototypes of the function used in IA and ASE modules.

1999-08-28  Alex Zinin <zinin@amt.ru>
        * ospf_lsa.h ospf_lsa.c :
        added ospf_my_lsa(), an interface independent version of
        ospf_lsa_is_self_originated(), it will be used in ASE and IA-routing.

1999-08-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_interface.c (interface_config_write): Add check for
        oi->nbr_self.

1999-08-25  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (ospf_lsa_dup): New function added.

        * ospf_packet.c (ospf_write), (ospf_read): Print send/recv
        interface in debug message.

1999-08-25  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c (ospf_ls_ack_send): The name is changed from
        `ospf_ls_ack_send'.
        (ospf_ls_ack_send_delayed) (ospf_ls_ack_timer): New function added.
        Delayed Link State Acknowledgment is scheduled by timer.

1999-08-25  Alex Zinin  <zinin@amt.ru>

        * ospf_lsa.c (ospf_router_lsa): Incorrectly included link to
        a stub network instead of link to a transit network into
        originated router-LSA, bug fixed.

1999-08-24  Toshiaki Takada  <takada@zebra.org>

        * ospfd.c (ospf_update_router_id): New function added.

        * ospf_network.c (ospf_write): Create new socket per transmission.
        And select outgoing interface whether dst is unicast or multicast.

        * ospf_packet.c: LSA flooding will work.        

1999-08-24  VOP <vop@unity.net>

        * ospf_route.c: Include "sockunion.h"

1999-08-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_network.c (ospf_serv_sock_init): Enclose
        IPTOS_PREC_INTERNETCONTROL setting with #ifdef for OS which does
        not have the definition.

1999-08-23  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c: Fix bug of DD processing.

1999-08-18  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (show_ip_ospf_database): Show actual `LS age'.

1999-08-17  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.h (OSPF_MAX_LSA): The value of OSPF_MAX_LSA is
        corrected.  The bug of `mes_lookup' is fixed.  
        This had been reported by Poul-Henning Kamp <phk@freebsd.org>.

        * ospf_lsa.c (ospf_router_lsa_install): The name is changed from
        `ospf_add_router_lsa'.
        (ospf_network_lsa_install): The name is changed from
        `ospf_add_network_lsa'.

        * ospf_interface.h (ospf_interface): Add member `nbr_self'.

        * ospf_interface.c (ospf_if_is_enable): New function added.

1999-08-16  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.h (struct lsa_header): The name is changed from
        `struct ospf_lsa'.
        (struct ospf_lsa): New struct added to control each LSA's aging
        and timers.     

        * ospf_lsa.c (ospf_lsa_data_free): The name is change from
        `ospf_lsa_free'.
        (ospf_lsa_data_new), (ospf_lsa_new), (ospf_lsa_free),
        (ospf_lsa_different), (ospf_lsa_install): New function added.

        * ospf_packet.c (ospf_ls_upd_list_lsa): New function added.

1999-08-12  Toshiaki Takada  <takada@zebra.org>

        * ospf_nsm.c (nsm_reset_nbr): New function added.
        KillNbr and LLDown neighbor event call this function.
        
1999-08-10  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c (ospf_ls_retransmit)
        (ospf_ls_upd_timer): New function added.
        Set retransmission timer for Link State Update.

1999-07-29  Toshiaki Takada  <takada@zebra.org>

        * ospf_ism.c (ospf_dr_election): Fix bug of DR election.

1999-07-28  Toshiaki Takada  <takada@zebra.org>

        * ospf_network.c (ospf_serv_sock_init): Set IP precedence field
        with IPTOS_PREC_INTERNET_CONTROL.

        * ospf_nsm.c (nsm_change_status): Schedule NeighborChange event
        if NSM status change.
        
        * ospf_packet.c (ospf_make_hello): Never include a neighbor in
        Hello packet, when the neighbor goes down.

1999-07-26  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * Makefile.am (noinst_HEADERS): Add ospf_route.h.

        * ospf_route.c (show_ip_ospf_route): Add `show ip ospf route'
        command.

1999-07-25  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (ospf_router_lsa): Fix bug of LS sequence number
        assignement.

1999-07-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_route.c (ospf_route_table_free): New function added.

        * ospf_spf.c (ospf_spf_next): Free vertex w when cw's and w's
        distance is same.

        * ospfd.h (struct ospf): Add old_table.

        * ospf_main.c (sighup): Call of log_rotate () removed.

        * ospf_lsa.c (ospf_lsa_is_self_originated): Fix bug of checking
        area->lsa as self LSA.  This should be area->lsa_self.

1999-07-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_zebra.c (ospf_zebra_add): ospf_zebra_add
        (),ospf_zebra_delete () added.

        * ospf_spf.c (ospf_spf_calculate): Call ospf_intra_route_add ().

1999-07-24  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c: Change LS sequence number treatment.
        (ospf_lsa_is_self_originated): New function added.
        (show_ip_ospf_database_self_originated): New DEFUN added.
        
1999-07-23  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_interface.c (ospf_if_lookup_by_addr): Add loopback check.

1999-07-22  Toshiaki Takada  <takada@zebra.org>

        * ospf_spf.c (ospf_nexthop_new), (ospf_nexthop_free),
        (ospf_nexthop_dup): function added.
        (ospf_nexthop_calculation): function changed.

        * ospf_interface.c (ospf_if_lookup_by_addr): function added.
        
1999-07-21  Toshiaki Takada  <takada@zebra.org>

        * ospf_spf.c (ospf_spf_closest_vertex): function removed.
        
1999-07-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_spf.c (ospf_spf_next): Apply ntohs for fetching metric.

1999-07-21  Toshiaki Takada  <takada@zebra.org>

        * ospf_neighbor.c (ospf_nbr_lookup_by_router_id): fundtion removed.

        * ospf_lsa.c (show_ip_ospf_database_router): describe each
        connected link.

1999-07-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_spf.c (ospf_spf_next): V is router LSA or network LSA so
        change behavior according to LSA type.
        (ospf_lsa_has_link): Link check function is added.

1999-07-20  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_spf.c (ospf_spf_calculate_schedule): Add new function for
        SPF calcultion schedule addtition.
        (ospf_spf_calculate_timer_add): Rough 30 sec interval SPF calc
        timer is added.
        (ospf_spf_next_router): Delete ospf_spf_next_network ().

        * ospf_lsa.c (show_ip_ospf_database_all): Network-LSA display
        header typo correction.  Display of router LSA's #link added.

1999-07-19  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c (ospf_check_network_mask): Added new function for
        receiving Raw IP packet on an appropriate interface.

1999-07-16  Toshiaki Takada  <takada@zebra.org>

        * ospfd.c (ospf_router_id): new DEFUN added.

1999-07-15  Toshiaki Takada  <takada@zebra.org>

        * ospf_spf.c (ospf_spf_init), (ospf_spf_free),
        (ospf_spf_has_vertex), (ospf_vertex_lookup),
        (ospf_spf_next_router), (ospf_spf_next_network),
        (ospf_spf_closest_vertex), (ospf_spf_calculate):
        function added.

1999-07-13  Toshiaki Takada  <takada@zebra.org>

        * ospf_ism.c: fix bug of DR Election.

        * ospf_nsm.c: fix bug of adjacency forming.

1999-07-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospfd.c (ospf_init): Change to use install_default.

1999-07-01  Rick Payne <rickp@rossfell.co.uk>

        * ospf_zebra.c (zebra_init): Install standard commands to
        ZEBRA_NODE.

1999-06-30  Toshiaki Takada  <takada@zebra.org>

        * ospf_dump.c: Whole debug command is improved.
        (ISM|NSM) (events|status|timers) debug option added.
        (show_debugging_ospf): new DEFUN added.

1999-06-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_lsa.c (ospf_lsa_lookup_from_list): Change !IPV4_ADDR_CMP to
        IPV4_ADDR_SAME.

1999-06-29  Toshiaki Takada  <takada@zebra.org>

        * ospf_dump.c (ospf_summary_lsa_dump): Add summary-LSA dump routine.
        (ospf_as_external_lsa_dump): Add AS-external-LSA dump routine.

        * ospf_nsm.c (nsm_twoway_received): fix condtion of adjacnet.

        * ospf_ism.c (ospf_dr_election): fix DR Election.
        
        * ospf_dump.c (ospf_nbr_state_message): fix `show ip ospf neighbor'
        command's state.

1999-06-29  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_dump.c (ospf_router_lsa_dump): Add router-LSA dump routine.

1999-06-28  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (show_ip_ospf_database_network): fix bug of
        `show ip ospf database network' command output.

        * ospf_nsm.c (nsm_inactivity_timer): Clear list of Link State
        Retransmission, Database Summary and Link State Request.

        * ospf_packet.c (ospf_ls_req_timer): New function added.
        Set Link State Request retransmission timer.

1999-06-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_main.c (main): Change default output from ZLOG_SYSLOG to
        ZLOG_STDOUT.

        * ospfd.c (ospf_init): Register show_ip_ospf_interface_cmd and
        show_ip_ospf_neighbor_cmd to VIEW_NODE.

        * ospf_lsa.c (ospf_lsa_init): Register show_ip_ospf_database_cmd
        and show_ip_ospf_database_type_cmd to VIEW_NODE.

1999-06-25  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c: fix bug of DD making.
        fix bug of LS-Update reading.
        
1999-06-23  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c: All type of packets are changed to use
        fifo queue structure.
        (ospf_fill_header) function added.

1999-06-22  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c (ospf_packet_new): New function added to handle
        sending ospf packet by fifo queue structure.
        (ospf_packet_free), (ospf_fifo_new), (ospf_fifo_push),
        (ospf_fifo_pop), (ospf_fifo_head), (ospf_fifo_flush),
        (ospf_fifo_free): Likewise.

1999-06-21  Toshiaki Takada  <takada@zebra.org>

        * ospf_nsm.c (ospf_db_desc_timer): function added.
        (nsm_timer_set) function added.
        * ospf_dump.c (ospf_option_dump): function added.
        * ospf_packet.c (ospf_ls_req) (ospf_make_ls_req): function added.

1999-06-20  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c (ospf_lsa_more_recent): function added.
        * ospf_neighbor.h (struct ospf_neighbor): Change member ms_flag
        to dd_flags.
        
1999-06-19  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c: DEFUN (show_ip_ospf_database) Added.
        * ospf_interface.c (if_ospf_cost), (if_ospf_dead_interval),
        (if_ospf_hello_interval), (if_ospf_priority),
        (if_ospf_retransmit_interval), (if_ospf_transmit_delay)
        argument changed from NUMBER to <range>.
        DEFUN (if_ospf_network_broadcast),
        DEFUN (if_ospf_network_non_broadcast),
        DEFUN (if_ospf_network_point_to_multipoint),
        DEFUN (if_ospf_network_point_to_point) functions are combined to
        DEFUN (if_ospf_network).
        
1999-06-18  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c: ospf_add_router_lsa (), ospf_add_network_lsa (),
        ospf_lsa_lookup (), ospf_lsa_count () Added.

1999-06-15  Toshiaki Takada  <takada@zebra.org>

        * DEFUN (ospf_debug_ism), DEFUN (ospf_debug_nsm),
        DEFUN (no_ospf_debug_ism), DEFUN (no_ospf_debug_nsm) Added.
        `debug ospf ism' command shows debug message.
        `debuf ospf nsm' command shows debug message.

1999-06-14  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c: ospf_network_lsa () Added.
        ospf_lsa_checksum () Added.
        * DEFUN (ospf_debug_packet), DEFUN (no_ospf_debug_packet) Added.
        `debug ospf packet' command shows debug message.

1999-06-13  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.h: Remove struct ospf_ls_req {}, ospf_ls_upd {},
        ospf_ls_ack {}.

1999-06-11  Toshiaki Takada  <takada@zebra.org>

        * ospf_dump.c: fix IP packet length treatment.

1999-06-10  Toshiaki Takada  <takada@zebra.org>

        * ospf_ism.h: Add OSPF_ISM_EVENT_EXECUTE() Macro Added.
        * ospf_nsm.h: Add OSPF_NSM_EVENT_EXECUTE() Macro Added.

        * ospf_packet.c: ospf_db_desc (), ospf_db_desc_send () Added.
        ospf_make_hello (), ospf_make_db_desc () Added.
        ospf_db_desc_proc () Added.n

        * Database Description packet can be processed.

1999-06-08  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.c: New file.
        
1999-06-07  Toshiaki Takada  <takada@zebra.org>

        * ospf_neighbor.c: ospf_fully_adjacent_count () Added.

1999-06-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_spf.[ch]: New file.

1999-05-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_zebra.c: Changed to use lib/zclient.c routines.

        * ospf_zebra.h (zebra_start): Remove struct zebra.

1999-05-29  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospfd.c (ospf_config_write): Add cast (unsigned long int) to
        ntohl for sprintf warning.

1999-05-19  Toshiaki Takada  <takada@zebra.org>

        * ospf_ism.c (ospf_dr_election): Join AllDRouters Multicast group
        if interface state changes to DR or BDR.

1999-05-14  Stephen R. van den Berg <srb@cuci.nl>

        * ospf_main.c (signal_init): SIGTERM call sigint.
        (sigint): Logging more better message.

1999-05-12  Toshiaki Takada  <takada@zebra.org>

        * ospfd.c: Fix bug of `no router ospf' statement, it will work.

1999-05-11  Toshiaki Takada  <takada@zebra.org>

        * ospf_neighbor.c: ospf_nbr_free () Added.

1999-05-10  Toshiaki Takada  <takada@zebra.org>

        * ospfd.h: struct ospf_area { }, struct ospf_network { } Changed.
        * Fix bug of `no network' statement, it will work.

1999-05-07  Toshiaki Takada  <takada@zebra.org>

        * ospf_interface.c, ospf_zebra.c: Fix bug of last interface is not
        updated by ospf_if_update ().

1999-04-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * Makefile.am (noinst_HEADERS): Add ospf_lsa.h for distribution.

1999-04-25  Toshiaki Takada <takada@zebra.org>

        * ospf_interface.c: DEFUN (no_if_ospf_cost),
        DEFUN (no_if_ospf_dead_interval),
        DEFUN (no_if_ospf_hello_interval),
        DEFUN (no_if_ospf_priority),
        DEFUN (no_if_ospf_retransmit_interval),
        DEFUN (no_if_ospf_transmit_delay) Added.

        interface_config_write () suppress showing interface
        default values.

1999-04-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_dump.c (ospf_timer_dump): If thread is NULL return "inactive".

        * ospfd.c (ospf_if_update): Fix bug of using ospf_area { } instead
        of ospf_network { }.  So `router ospf' statement in ospfd.conf
        works again.
        (ospf_if_update): Call ospf_get_router_id for updating router ID.

1999-04-25  Toshiaki Takada  <takada@zebra.org>

        * ospf_interface.c: DEFUN (if_ospf_network) deleted.
        DEFUN (if_ospf_network_broadcast),
        DEFUN (if_ospf_network_non_broadcast),
        DEFUN (if_ospf_network_point_to_multipoint),
        DEFUN (if_ospf_network_point_to_point),
        DEFUN (no_if_ospf_network) Added.

1999-04-23  Toshiaki Takada  <takada@zebra.org>

        * ospfd.h: struct area { } changed to struct ospf_network { }.
        Add struct ospf_area { }.
        * ospfd.c: Add ospf_area_lookup_by_area_id (), ospf_network_new (),
        and ospf_network_free ().
        DEFUN (area_authentication), DEFUN (no_area_authentication) Added.

1999-04-22  Toshiaki Takada  <takada@zebra.org>

        * ospf_lsa.h: New file.
        * ospf_packet.h: LSA related struct definition are moved to
        ospf_lsa.h.
        * ospf_packet.c: ospf_verify_header () Added.

1999-04-21  Toshiaki Takada  <takada@zebra.org>

        * ospf_ism.c: ospf_elect_dr () and related function is changed.
        DR Election bug fixed.
        * ospf_dump.c: ospf_nbr_state_message (), ospf_timer_dump () Added.
        * ospfd.c: DEFUN (show_ip_ospf_neighbor) Added.

1999-04-19  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_main.c (main): access_list_init () is added for vty
        connection filtering.

1999-04-16  Toshiaki Takada  <takada@zebra.org>

        * ospfd.c: DEFUN (show_ip_ospf_interface) Added.
        * ospf_neighbor.c: ospf_nbr_count () Added.
        
1999-04-15  Toshiaki Takada  <takada@zebra.org>

        * ospfd.h: struct ospf { } Changed.
        * ospfd.c: ospf_lookup_by_process_id () Deleted.
        * ospf_ism.c: ospf_wait_timer () Added. WaitTimer will work.

1999-04-14  Toshiaki Takada  <takada@zebra.org>

        * ospf_ism.c: ospf_elect_dr () Added.
        * ospf_network.c: ospf_if_ipmulticast () Added.

1999-04-11  Toshiaki Takada  <takada@zebra.org>

        * ospf_interface.c: interface_config_write (),
        DEFUN (if_ip_ospf_cost),
        DEFUN (if_ip_ospf_dead_interval),
        DEFUN (if_ip_ospf_hello_interval),
        DEFUN (if_ip_ospf_priority),
        DEFUN (if_ip_ospf_retransmit_interval) and
        DEFUN (if_ip_ospf_transmit_delay) Added.

1999-04-08  Toshiaki Takada  <takada@zebra.org>

        * ospf_dump.c: ospf_packet_db_desc_dump () Added.
        * ospf_neighbor.c: ospf_nbr_bidirectional () Added.
        * ospf_nsm.c: nsm_twoway_received () Added.

1999-04-02  Toshiaki Takada  <takada@zebra.org>

        * ospf_neighbor.c: New file.
        * ospf_neighbor.h: New file.
        * ospf_nsm.c: New file.
        * ospf_nsm.h: New file.
        * ospf_packet.c: Add ospf_make_header (), ospf_hello () and
        ospf_hello_send (). Now OSPFd can receive Hello and send Hello.

1999-03-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_packet.c: Add ospf_recv_packet ().  Now OSPF Hello can receive.

1999-03-19  Toshiaki Takada  <takada@zebra.org>

        * ospf_packet.c: New file.
        * ospf_packet.h: New file.
        * ospf_network.c: New file.
        * ospf_network.h: New file.
        * ospfd.h: move OSPF message structure has moved to ospf_packet.h.

1999-03-17  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * ospf_zebra.c (ospf_zebra_get_interface): Fix for IPv6 interface
        address.

        * Makefile.am (install-sysconfDATA): Overwrite install-sysconfDATA
        for install ospfd.conf.sample as owner read only file.

        * ospf_main.c (usage): Change to use ZEBRA_BUG_ADDRESS.

1999-03-15  Toshiaki Takada  <takada@zebra.org>

        * ospf_ism.c: New file.
        * ospf_ism.h: New file.
        * ospf_dump.c: New file.
        * ospf_dump.h: New file.

        * ospfd.h: Add (struct ospf), (struct config_network),
        (struct message) structure.

        * ospf_interface.c: Add ospf_if_match_network ().
        * ospf_interface.h (struct ospf_interface): Change struct members.

        * ospfd.c: ospf_lookup_by_process_id (), ospf_network_new (),
        DEFUN (network_area): Added.

        * ospfd.conf.sample: Change sample configuration.

1999-03-05  Toshiaki Takada  <takada@zebra.org>

        * ospf_interface.c: New file.
        * ospf_interface.h: New file.
        * ospf_zebra.h: New file.
        * ospf_zebra.c: Add interface function for zebra daemon.
        * ospfd.c: New file.

1999-02-23  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * Move IPv6 codes and files to ospf6d directory.

1999-02-18  Peter Galbavy  <Peter.Galbavy@knowledge.com>

        * syslog support added

1998-12-22  Toshiaki Takada  <takada@zebra.org>

        * ospfd.h: New file.
        * ospf_lsa.h: New file.

1998-12-15  Kunihiro Ishiguro  <kunihiro@zebra.org>

        * Makefile.am: New file.
        * ospf_main.c: New file.

