]> git.proxmox.com Git - mirror_frr.git/blobdiff - ospfd/ChangeLog
[ospfd] SPF ospf_canonical_nexthops_free bugfix.
[mirror_frr.git] / ospfd / ChangeLog
index 82d0039272b8a25e18352f08bf2c66803e7e1b6f..751f5d36c2702f8c558ed32b423b861f9014c5f4 100644 (file)
@@ -1,3 +1,754 @@
+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.