+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.