2008-02-28 Paul Jakma <paul.jakma@sun.com>

	* log.c: (mes_lookup) Sowmini Varadhan diagnosed a problem where
	  this function can cause a NULL dereference, on lookups for unknown
	  indices, or messages with NULL strings. Can occur, e.g., debug
	  logging code when processing received messages. Fixed to accept a
	  pointer to a default string to be used if there is no match.
	* log.h: LOOKUP adjusted to match

2008-02-28 Paul Jakma <paul.jakma@sun.com>

	* linklist.c: This implementation expects that the data pointer not
	  be null, e.g. listgetdata() asserts this. The list add methods
	  don't apply the same sanity check.

	  Noted by Jim Carlson in bug #437.

2008-01-11 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* zebra.h: Revert previous change, no need to include <net/if_media.h>
	  here.

2008-01-10 Ingo Flaschberger <if@xip.at>

	* zebra.h: If HAVE_BSD_LINK_DETECT is defined, include <net/if_media.h>.

2008-01-08 Pavol Rusnak <prusnak@suse.cz>

	* memory.c: (mtype_memstr) Fix accidental shift past width of type,
	  constant should have been forced to UL, rather than being left to
	  default to int.

2007-11-12 Denis Ovsienko

	* linklist.c: (listnode_add_after) Don't forget to increment list
	  items counter.
	* workqueue.h: Changed working queue flags from enum into integer
	  and introduced WQ_AIM_HEAD flag to indicate our will to insert
	  new data before the list head.
	* workqueue.[ch]: (work_queue_schedule, show_work_queues,
	  work_queue_plug, work_queue_unplug) Adjust to the new flags style.
	* workqueue.[ch]: (work_queue_aim_head) new function to control the
	  WQ_AIM_HEAD flag
	* workqueue.[ch]: (work_queue_new) Explicitly set both WQ flags
	  during new WQ initialization.
	* workqueue.[ch]: (work_queue_add) If WQ_AIM_HEAD indicates a need
	  to place the new data into list head, do it.

2007-10-22 Lorenzo Colitti <lorenzo@colitti.com>

	* smux.c: (smux_stop) Avoid cancelling a defunct thread pointer
	  (smux_start) Stop smux before trying to start it, possibly again.

2007-10-04 Denis Ovsienko

	* pid_output.c: (pid_output) stop using LOGFILE_MASK
	  (0600 by default), introduce and use PIDFILE_MASK (0644)
	  instead.

2007-09-18  Paul Jakma <paul.jakma@sun.com>

	* privs.c: definition of ZCAP_NET_ADMIN on Solaris should
	  be PRIV_SYS_IP_CONFIG, when that's available. Thus allowing
	  Quagga to work with in Solaris zones with exclusive IP
	  instances.

2007-08-21 Denis Ovsienko

	* sockopt.[ch]: (setsockopt_so_sendbuf, getsockopt_so_sendbuf):
	  new functions to adjust ospfd working socket.

2007-08-13 Denis Ovsienko

	* zebra.h: introduce ZEBRA_ERR_KERNEL and ZEBRA_ERR_NOERROR

2007-07-06 Atis Elsts <atis@mikrotik.com>

	* pqueue.{c,h}: Export trickle_up

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

	* log.c: (mes_lookup) warning about code not being in same-number
	  array slot should be debug, not warning. E.g. BGP has several
	  discontigious number spaces, allocating from different parts of a
	  space is not uncommon (e.g. IANA assigned versus vendor-assigned
	  code points in some number space).
	  
2007-07-06 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* sockopt.{c,h}: (setsockopt_multicast_ipv4) Add some comments about
	  the arguments.

2007-06-01 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* zebra.h: On linux, we seem to need to include <linux/types.h> before
	  <sys/sysctl.h>, otherwise we get isisd compilation errors about
	  __be16 not being defined.

2007-05-10 Paul Jakma <paul.jakma@sun.com>

	* zebra.h: Don't try define _GNU_SOURCE, autoconf should do it.

2007-05-03 Paul Jakma <paul.jakma@sun.com>

	* memtypes.c: Add MTYPE_ATTR_EXTRA and MTYPE_BGP_ROUTE_EXTRA

2007-05-01 David L Stevens <dlstevens@us.ibm.com>

	* (general) These changes collectively add route-map and
	  prefix-list support to zebra and fix a bug in "show
	  route-map" (with no argument).
	* command.h: added PROTOCOL_NODE type
	* log.c: (proto_name2num) new function, protocol name to
	  number translation.
	* routemap.c: (vty_show_route_map) fixed "show route-map"
	  without route-map name
	* routemap.h: added RMAP_ZEBRA type
	* zebra.h: added proto_name2num() prototype

2007-04-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* log.c: (quagga_timestamp) Optimize the subsecond timestamp generation.

2007-04-28 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* command.c: (config_write_host) Save "log timestamp precision"
	  if not default value.
	  (show_logging) Show configured timestamp precision.
	  (config_log_timestamp_precision) Enable configuration of timestamp
	  precision.
	  (no_config_log_timestamp_precision) Restore default timestamp
	  precision.
	  (cmd_init) Install new timestamp precision commands.
	* log.h: (struct zlog) New timestamp_precision field.
	  (quagga_timestamp) New function to generate a timestamp with the
	  desired precision.
	  (struct timestamp_control) Declare a structure for use in avoiding
	  repeated duplicate calls to quagga_timestamp.
	* log.c: (quagga_timestamp) New function to generate a timestamp
	  of the desired precision.
	  (time_print) Call quagga_timestamp if the time hasn't already been
	  calculated.
	  (vzlog) Initialize a timestamp_control structure and pass it to
	  time_print and vty_log.
	  (zlog_backtrace) Fix 64-bit problem: cannot print size_t with %u.
	* vty.h: Must now include "log.h".
	  (vty_log) Takes an additional struct timestamp_control argument.
	* vty.c: (vty_log_out) Use new struct timestamp_control and new
	  quagga_timestamp function to print timestamps of the desired
	  precision.
	  (vty_time_print) Use new quagga_timestamp function.
	  (vty_log) Accept new struct timestamp_control argument and pass it
	  down to vty_log_out.

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

	* smux.c: (smux_trap) Fix printf format to work with 64-bit size_t.

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

	* prefix.h: Add define to match IPv4 Link-Local addresses

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

	* log.c: (mes_lookup) Make the function more robust: check for
	  cases where the index does not match the key value at that position.
	  If so, give a warning and fall back to a linear search.
	  And improve the error message in cases where even that fails.

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

	* if.h: (struct connected) Add new ZEBRA_IFA_PEER flag indicating
	  whether a peer address has been configured.  Comment now shows
	  the new interpretation of the destination addr: if ZEBRA_IFA_PEER
	  is set, then it must contain the destination address, otherwise
	  it may contain the broadcast address or be NULL.
	  (CONNECTED_DEST_HOST,CONNECTED_POINTOPOINT_HOST) Remove obsolete
	  macros that were specific to IPv4 and not fully general.
	  (CONNECTED_PEER) New macro to check ZEBRA_IFA_PEER flag.
	  (CONNECTED_PREFIX) New macro giving the prefix to insert into
	  the RIB: if CONNECTED_PEER, then use the destination (peer) address,
	  else use the address field.
	  (CONNECTED_ID) New macro to come up with an identifying address
	  for the struct connected.
	* if.c: (if_lookup_address, connected_lookup_address) Streamline
	  logic with new CONNECTED_PREFIX macro.
	* prefix.h: (PREFIX_COPY_IPV4, PREFIX_COPY_IPV6) New macros
	  for better performance than the general prefix_copy function.
	* zclient.c: (zebra_interface_address_read) For non-null destination
	  addresses, set prefixlen to equal the address prefixlen.  This
	  is needed to get the new CONNECTED_PREFIX macro to work properly.

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

	* if.c: (general) Handle upgrades from SUNWzebra, which tried
	  to track each logical interface as a seperate struct
	  interface, to Quagga, which assigns only one struct interface
	  per ifindex.
	  (if_sunwzebra_get) Try decompose a logical interface name
          (fooX:Y) to the 'primary' name (fooX), for Solaris.
          (interface_cmd) Use if_sunwzebra_get on Solaris.

2006-09-26 Pierre-Yves Ritschard <pierre-yves@spootnik.org>

	* smux.c: (smux_open,smux_trap,smux_register) Fix various
	  asn_build_* calls to pass the proper length in the final
	  argument: use sizeof(<variable>) instead of sizeof(<type>),
	  since there were several inconsistencies between the actual
	  variable type and the size that was passed.  This should
	  fix some problems on 64-bit architectures where sizeof(int)
	  != sizeof(long).

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

	* thread.c: (general) Add support for monotonic clock, it may still
	  jump forward by huge amounts, but should be immune to going
	  backwards. Fixes bug #134.
	  (quagga_gettimeofday_relative_adjust) helper, does what name
	  says - adjusts gettimeofday based relative timer.
	  (quagga_gettimeofday) helper to keep recent_time up to date.
	  (quagga_get_relative) helper, update and getch the relative
	  timer using gettimeofday(). POSIX CLOCK_MONOTONIC is also
	  supported, but the code is not enabled yet nor tested.
	  (quagga_real_stabilised) helper, retrieve absolute time but
	  stabilised so as to never decrease.
	  (quagga_gettime) Exported interface, analogous to POSIX
	  clock_gettime() in interface, supporting several clocks.
	  (quagga_time) Exported interface, analogous to traditional
	  time(), will never decrease.
	  (recent_relative_time) Convenience function to retrieve
	  relative_time timeval, similar to existing recent_time absolute
	  timeval, for when an approximately recent value will do.
	  (remainder) Update to use above helpers.
	  (thread_getrusage) Previously was a macro, but needs to be
	  a function to twiddle with thread.c private stuff.
	* thread.c: Point the GETRUSAGE macro at previous function.
	  Export quagga_gettime, quagga_time and recent_relative_time for 
	  general use.

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

	* thread.h: (struct thread) Add a cache pointer to the struct
	  cpu_thread_history, if it is known - saving hash lookup on
	  each thread_call.
	* thread.c: (thread_call) Cache the pointer to the
          cpu_thread_history, so that future thread_calls of same
          thread can avoid the hash_lookup.

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

	* vty.c: (vty_log_out) Do not call vty_close, because this could
	  result in a parent function's accessing the freed memory.
	  Instead, set status VTY_CLOSE and call shutdown(vty->fd, SHUT_RDWR).
	  And add a comment on vty_close.

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

	* vty.c: (vty_log_out, vty_read, vty_flush, vtysh_flush, vtysh_read)
	  After an I/O error, must set vty->monitor to 0 before calling
	  zlog_warn, otherwise an infinite recursion could occur
	  (since zlog_warn triggers a message to be written to the vty,
	  and that in turn triggers another error message when it fails, etc.).

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

	* vty.c: (vty_log_out) Debug messages to terminal vty sessions
	  should include timestamps.

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

	* memory.c: Fix typo in cpp conditional around malloc.h, from
	  comment in bug #269.

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

	* route_types.awk: Remove setting the 'bare' numeric route type
	  in redist strings.

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

	* command.c: (cmd_describe_command_real) Fix leak, CID #38.
	* memory.h: Experimental, have XFREE macro NULL out the freed
	  pointer.
	* linklist.c: (list_delete) call list_delete_all_node, don't
	  duplicate it.
	* if.c: (if_flag_dump) remove the whitespace indentation, callers
	  should provide.

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

	* zebra.h: Include inttypes.h rather than stdint.h, best practice
	  according to the autoconf manual.
	  Add UINT*_MAX defines for older platforms lacking these (FBSD 4)
	* memory.c: malloc.h is deprecated in favour of stdlib.h, however
	  we still need it on GNU Libc for mallinfo().
	* vty.c: (vty_log/vty_log_fixed) dont crash if called when vty
	  hasn't been initiliased.
	* log.c: (general) Add support for Sun libc printstack().
	  (hex_append) make the cpp conditional on general HAVE_STACK_TRACE
	  define.
	  (zlog_backtrace_sigsafe) Ditto. Add printstack() version of the
	  the DUMP macro in this function.

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

	* route_types.txt: New file, table of ZEBRA_ROUTE definitions.
	* route_types.awk: New script, to parse previous and generate
	  (for now) redistribute string defines.
	* Makefile.am: build route_types.h using previous two, ala
	  memtypes.h, include the script and table file in EXTRA_DIST.
	* command.h: pull in route_types.h, add a REDIST_STR define.

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

	* if.h: (struct connected) Document the meaning of the
	  ZEBRA_IFC_REAL and ZEBRA_IFC_CONFIGURED flags.

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

	* log.c: (general) Generalise struct zebra_route_desc into
	  struct zebra_desc_table and, similar to route_types, add a
	  command_types table to describe Zserv protocol commands.
	  (route_types[]) use a macro to use designated initialisers
	  while avoiding tedious duplication.
	  (zserv_command_string) lookup string from zebra_desc_table,
	  similar to zebra_route_string
	* zebra.h: Add declaration for zserv_command_string, adjust the
	  comments to reflect zebra_desc_table.

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

	* vty.c: (vty_describe_command) CID #39 fix was too hasty, just
	  cause it /can/ leak doesn't mean it always will have, check
	  first.

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

	* plist.c: (vty_prefix_list_uninstall) Fix potential NULL deref
	  of prefix and typestr strings, Coverity CID #3.
	* command.c: (cmd_complete_command_real) Fix leak of cmd_vector
	  in error case, Coverity CID #37.
	  (cmd_describe_command_real) Fix return of freed pointer when
	  no-match, CID #55.
	* vty.c: (vty_describe_command) fix leak of describe vector in
	  error path, CID #39.

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

	* command.h: (DEFUN_CMD_FUNC_TEXT) Annotate arguments as
	  potentially being unused.
	* workqueue.c: (work_queue_run) fix line length of comment

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

	* memtypes.awk: Fix gensub call, g should be a string..

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

	* workqueue.h: (struct work_queue) Remove status field and
	  state flag, no longer used.

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

	* memtypes.c: Add MTYPE_BGP_SYNCHRONISE.

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

	* Makefile.am: Fix -version-info argument.

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

	* memory.c: (mtype_memstr) new helper function to 
	  return human friendly string for a byte count.
	  (mtype_stats_alloc) new function, for users to retrieve
	  number of objects allocated.
	  (show_memory_mallinfo) New function, show mallinfo statistics
	  if available.
	  (show_memory_all_cmd) Call show_memory_mallinfo, if mallinfo
	  is available.
	* memory.h: Export mtype_memstr and mtype_stats_alloc.
	  Provide a define for a reasonable buffer size for
	  mtype_memstr.
	  
2006-03-14 Paul Jakma <paul.jakma@sun.com>

	* privs.c: (zprivs_caps_init) Change user IDs before lowering
	  privileges, while this seems to work on Linux, on Solaris
	  it rightfully refuses due to PRIV_PROC_SETID having been
	  dropped.
	* command.h: Add the struct host global exported from command.c

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

	* if.h: export show_address_cmd, for anyone who wishes to use
	  it.

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

	* sockunion.c: (sockunion_{su2str,log}) Use XSTRDUP.
	  Particularly with _su2str, as that string gets XFREEd,
	  which can be annoying if run debug code in memory.c.

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

	* workqueue.h: (struct work_queue) Remove the delay field.
	  It served no purpose and just introduced bad behaviour.
	  Should be excised before its allowed to escape into 1.0.
	  This removes need for the 'flood' and runs_since_clear
	  fields.
	* workqueue.c: (general) excise delay factor between queue
	  runs, hence the 'flood' crap too.. See above.

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

	* stream.c: (stream_getq_from) should use POSIX uint64_t
	  not u_int64_t. Latter is neither a traditional BSD type, nor
	  a POSIX type.

2006-01-17 Vincent Jardin <vincent.jardin@6wind.com>

	* md5.c: Don't forget to keep const.
	* regex.c: Cleanup code and remove warnings.

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

	* md5.{c,h}: (md5_loop) Is better off taking a void * and doing
	  cast to byte wise type internally, avoids needs for casts 
	  in users.
	* vty.c: (no_terminal_monitor_cmd) New ALIAS for 
	  terminal_no_monitor, in the more normal negating format,
	  to be kind to my fingers.
	  (vty_init) install new ALIAS.
	* zclient.{c,h}: (zclient_create_header) export this, seems others
	  could use it (in lieu of more complete zserv helpers).

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

	* zclient.h: Update the Zserv protocol header with a version
	  field.  Define the old command field to be a 'marker', to
	  allow old Zserv and updated Zserv to be differentiated.
	  Future updates will bump the version field obviously. New
	  command field is made wider.  Try to stop using the
	  'zebra_size_t' typedef in the callbacks.
	* zclient.c: Update to read/write new format header.

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

	* if.h: (struct interface) expand flags to 8 bytes.
	* zclient.c: (zebra_interface_{add,state}_read) stream read of
	  interface flags now need to use stream_getq.
	  (zebra_interface_if_set_value) ditto

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

	* stream.c: (stream_new) Allocate stream data as seperate object.
	  (stream_free) free the data.
	  (stream_resize) new function, resize stream to new size.
	  (stream_{get,put}q*) new functions to get/put quad word size
	  types.
	* stream.h: (struct stream) make data seperate from the stream.
	  Export new stream_resize and quad-word get/put functions.
	  
2005-12-29  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* vty.c (vty_hello): add cast to quiet lint (from David Young)

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

	* buffer.c: (struct buffer_data) change gcc zero array
	  declaration to C99 incomplete array.
	* stream.h: (struct stream) same

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

	* privs.c: (zcaps2sys/solaris) remove unused variable.
	  (zprivs_state_caps/solaris) Format string missing a
	  specifier.
	* zebra.h: s/u_int/unsigned int/, u_int is a BSD type, defining
	  __USE_BSD on Linux pulls in further things from netinet/ip.h
	  which dont preprocess for some reason. There is no C99
	  shorthand type directly equivalent to u_int afaict, so don't
	  use it.

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

	* (general) pass struct work-queue to callback functions.
	* workqueue.h: (struct work_queue) move the state flag
	  variables to end.
	  Add an opaque pointer to spec, for user-data global to the
	  queue.
	  Pass reference to work_queue to all callbacks.
	* workqueue.c: (work_queue_item_remove) pass ref to workqueue
	  to user callbacks.
	  (work_queue_run) ditto.

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

	* (general) Add state to detect queue floods.  There's no sense
	  trying to be sparing of CPU resources, if the queue is
	  flooding and using ever more memory resources. we should just
	  get on with clearing the queue.
	  The sense of delay and hold were wrong way around, fix.
	* workqueue.h: (struct work_queue) Add status bitfield.  Add
	  'flood' integer to workqueue spec.  Add runs_since_clear
	  counter to workqueue.
	* workqueue.c: (work_queue_new) set defaults for delay, hold
	  and flood.
	  (work_queue_add) initial schedule should use delay, not hold.
	  (show_work_queues) Print flood field, conserve whitespace.
	  (work_queue_unplug) use delay, not hold.
	  (work_queue_run) consecutive runs should be seperated by hold
	  time, not delay.
	  Keep track of number of consecutive runs, go into 'overdrive'
	  if queue is being flooded, we can't avoid making heavy use of 
	  resources, better to use CPU than ever more RAM.
	* zebra.h: [bug #231] include stdint, if its there.

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

	* routemap.c: (vty_show_route_map_entry) call action is
	  seperate from exit action, latter should still be printed
	  regardless of whether a call is specified.

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

	* zebra.h: BSD BYTE_ORDER define isn't available everywhere,
	  define if needs be.
	* checksum.h: new file. checksum.c exports in_cksum, provide
	  a header for it.
	* checksum.c: (in_cksum) callers shouldn't have to know it uses
	  a u_short internally, change to void *.
	* Makefile.am: Add checksum.h
	* command.h: remove bogus trailling slash.
	* md5.c: (general) Update it for the twentieth century. ANSI
	  declarations are widely supported now.. Don't include system
	  headers, only include zebra.h. Use POSIX types (the
	  alternative is to define u_int64_t in a portable way - rest
	  of Quagga needs same cleanup).
	  Make endian-conditional code be compiler conditional rather
	  than preprocessor conditional, so that breakage gets noticed
	  quicker.
	* md5.h: POSIX types. Get rid of the odd __P() non-ANSI capable
	  compiler compatibility hack.
	* if.c: (connected_free) use MTYPE for connected label.
	* memtypes.c: Add MTYPE_CONNECTED_LABEL
	* memtypes.h: Update auto-built file.

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

	* (general) Cleanup a some calls to XFREE,strdup, etc. to use
	  the memory.h macros.
	* memtypes.c: Add MTYPE_IF_RMAP_NAME, MTYPE_PQUEUE,
	  MTYPE_PQUEUE_DATA and MTYPE_HOST.
	* memtypes.h: update auto-built file.
	* if_rmap.c: Use MTYPE_IF_RMAP_NAME.
	* pqueue.c: Use the two MTYPE_PQUEUE mtypes for allocations.
	* command.c: Use MTYPE_HOST, MTYPE_STRVEC. Some other fixups,
	  including fixing some likely leaks in config_write_file.
	* vty.c: memory macro usage fixes. 
	  (vty_read_config) fix leak where relative config file is
	  specified.

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

	* sockopt.c: (setsockopt_multicast_ipv4) If IP_ADD_MEMBERSHIP
	  fails with errno equal to EADDRINUSE, then issue an info
	  message and try IP_DROP_MEMBERSHIP followed by IP_ADD_MEMBERSHIP.

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

	* memory.c: (show_memory_vty) Omit zero statistics.  Print separators
	  only if some non-zero stats have been printed in between.
	  (show_separator) New function to print a separator.
	  (show_memory_all) Keep track of whether a separator is needed
	  between the different memory statistics groups.

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

	* memtypes.h: Add MTYPE_OSPF_VERTEX_PARENT (to match memtypes.c).

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

	* memtypes.c: (memory_list_ospf) Add MTYPE_OSPF_VERTEX_PARENT.

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

	* zebra.h: Declare new functions zebra_route_string() and
	  zebra_route_char().
	* log.c: (zroute_lookup,zebra_route_string,zebra_route_char) New
	  functions to map zebra route numbers to strings.

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

	* smux.[ch]: allow to retreive global OID (identified by <0
	  namelen).

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

	* zebra.h: Solaris capabilities requires priv.h to be included.
	* privs.{c,h}: Add support for Solaris Least-Privileges.
	  privs.h: Reduce some of the abstract capabilities, which do
	  not have rough equivalents on both systems. Rename the net
	  related caps to _NET, as they should have been in first
	  place.
	  (zprivs_terminate) should take the zebra_privs_t as argument so
	  that it can update change pointer.
	  Add an additional privilege state, ZPRIVS_UNKNOWN.
	* privs.c: (various capability functions) Add
	  Solaris privileges variants.
	  (zprivs_state) Use privs.c specific generic types to
          represent various capability/privilege related types, so that
          each can be typedef'd as appropriate on each platform.
	  (zprivs_null_state) static added, to hold the state the null
	  method should report (should be raised by default, and
          LOWERED if zprivs_terminate has been called)
          (zprivs_state_null) Report back the zprivs_null_state.
          (cap_map) Make it able to map abstract capability to multiple
          system capabilities.
          (zcaps2sys) Map to abstract capabilities to multiple system
          privileges/capabilities.
          (zprivs_init) move capability related init to seperate
	  function, zprivs_caps_init.
          (zprivs_terminate) ditto, moved to zprivs_caps_terminate.
          Set the change_state callback to the NULL state, so the
          user can continue to run and use the callbacks.
          
2005-09-29 Alain Ritoux <alain.ritoux@6wind.com>

	* filer.c: show protocol name in filter_show()
	* plist.c: show protocol name in vty_show_prefix_entry()
	* routemap.c: show protocol name in vty_show_route_map_entry()
	* vty.c: in vty_command(), show protocol name if command unknown
	
2005-09-28 Alain Ritoux <alain.ritoux@6wind.com>

	* md5-gnu.h: removed
	* md5.h: replaces md5-gnu.h
	* Makefile.am: use correct md5.h
	* md5.c: import from WIDE

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

	* memtypes.{c,h}: Add MTYPE_AS_SEG_DATA.
	
2005-09-19 Hasso Tepper <hasso at quagga.net>

	* str.[ch]: Add strndup() from glibc.

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

	* command.c: (install_element) be more robust. Eg, cmd_init
	  need not have been called, some applications may use other
	  library subsystems, which call install_element, without the
          application wanting commands and hence not calling cmd_init.
        
2005-08-22 Hugo Santos <hsantos@av.it.pt>

	* command.h: (enum node_type) Add BGP_IPV6M_NODE 
	* command.c: (node_parent) Handle BGP_IPV6M_NODE node
	  (config_exit, config_end) ditto
	* vty.c: (vty_end_config) Handle BGP_IPV6M_NODE node
	
2005-08-10  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* getopt.h: Don't declare getopt (rather than getopt_long), since
	quagga doesn't need it.
	* getopt.c (getopt): Don't define getopt.

2005-07-26 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
	* prefix.c: (prefix_ipv4_new, prefix_ipv6_new): Call prefix_new
	  to allocate the memory to make sure that all struct prefix pointers
	  point to objects of the same length (avoids memory overruns
	  on struct prefix assignments).
	  (prefix_ipv4_free, prefix_ipv6_free): Simply call prefix_free.
	  It is interesting to note that these functions are never actually
	  called anywhere in the code.  Instead prefix_free was already
	  being called directly, despite the previous MTYPE incompatibility.

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

	* prefix.c: (ip_masklen) While loop should test that 'pnt' pointer is
	  in range before dereferencing it.

2005-06-24 Pawel Worach <pawel.worach@gmail.com>

	* getopt.h: add further tests for full getopt declaration on
	  various systems.

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

	* memtypes.h: update autobuilt file to match memtypes.c changes

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

	* memtypes.c: Add MTYPE_BGP_PROCESS_QUEUE and
	  MTYPE_BGP_CLEAR_NODE_QUEUE

2005-05-24 Paul Jakma <paul@dishone.st>

	* memtypes.h: update this auto-built file. (maybe we should just
	  remove it, is GNU awk a terrible dependency to have?)

2005-05-23 Paul Jakma <paul@dishone.st>

	* memtypes.awk: use character classes, which work correctly in
	  all LC_COLLATE environments, unlike A-Z, which doesnt work in
	  eg estonian collate order. Reported by Hasso.
	* routemap.c: (rmap_onmatch_goto) fix crash if 'continue' command
	  is used, which does not supply an argv[0].
	  this is a backport candidate /iff/ the trailing ; is removed
	  from VTY_GET_INTEGER_RANGE
	* vty.h: fix the VTY_GET macros, do {..} while(0) so they have
	  correct function like syntax in usage.
	* workqueue.h: Add a WQ_QUEUE_BLOCKED item_status return code,
	  to allow a queue function to indicate the queue is not
	  ready/blocked - rather than any problem with the item at hand.
	  Add a notion of being able to 'plug' and 'unplug' a queue.
	  Add helpers to plug/unplug a queue.
	  Add a completion callback, to be called when a queue is emptied.
	* workqueue.c: (work_queue_new) remove useless list_free.
	  (work_queue_schedule) new internal helper function to schedule
	  queue, if appropriate.
	  (work_queue_add) use work_queue_schedule
	  (show_work_queues) Print 'P' if queue is plugged.
	  (work_queue_plug) new API function, plug a queue - ie prevent it
	  from 'drained' / processed / scheduled.
	  (work_queue_unplug) unplug a queue, allowing it to be drained
	  / scheduled / processed again.
	  (work_queue_run) Add support for WQ_QUEUE_BLOCKED.
	  Add comment for RETRY_NOW case.
	  Make hysteris more aggresive in ramping up granularity, improves
	  performance significantly.
	  Add support for calling completion callback when queue is emptied,
	  possibly useful for knowing when to unplug a queue.

2005-05-19 Paul Jakma <paul@dishone.st>

	* thread.c: (thread_cancel_event) the number of pending events
	  cancelled is potentially useful information, dont throw it away,
	  pass it back to the caller.
	* sockunion.c: (sockunion_getsockname) use MTYPE_SOCKUNION, not TMP
	  (sockunion_getpeername) ditto
	* memtypes.c: (memory_list_bgp) add MTYPE_BGP_PEER_HOST

2005-05-15 Paul Jakma <paul@dishone.st>

	* getopt.h: It's not just __GNU_LIBRARY__ which defines
	  getopt, eg __EXTENSIONS__ does too on SunOS. It still seems
	  awfully fragile though.
	* getopt.c: include zebra.h after config.h, before including
	  getopt.h so that things at least are consistent..
	* getopt1.c: ditto
	
2005-05-07 Yar Tikhiy <yar@comp.chem.msu.su>

	* sockopt.c: Add support for BSD style ifindex in ip_mreq.

2005-05-06 Paul Jakma <paul@dishone.st>

	* (general) extern and static'ification of functions in code and
	  header.
	  Cleanup any definitions with unspecified arguments.
	  Add casts for callback assignments where the callback is defined,
	  typically, as passing void *, but the function being assigned has
	  some other pointer type defined as its argument, as gcc complains 
	  about casts from void * to X* via function arguments.
	  Fix some old K&R style function argument definitions.
	  Add noreturn gcc attribute to some functions, as appropriate.
	  Add unused gcc attribute to some functions (eg ones meant to help
	  while debugging)
	  Add guard defines to headers which were missing them.
	* command.c: (install_node) add const qualifier, still doesnt shut
	  up the warning though, because of the double pointer.
	  (cmp_node) ditto
	* keychain.c: (key_str2time) Add GET_LONG_RANGE() macro, derived 
	  fromn vty.h ones to fix some of the (long) < 0 warnings.
	* thread.c: (various) use thread_empty
	  (cpu_record_hash_key) should cast to uintptr_t, a stdint.h type
	* vty.h: Add VTY_GET_IPV4_ADDRESS and VTY_GET_IPV4_PREFIX so they
	  removed from ospfd/ospf_vty.h
	* zebra.h: Move definition of ZEBRA_PORT to here, to remove
	  dependence of lib on zebra/zserv.h

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

	* sockunion.c: Fix warning message.

2005-05-03 Paul Jakma <paul@dishone.st>

	* stream.h: Add comment about the special zero-ing ability of
	  stream_put.
	  (stream_recvmsg, stream_write) should return ssize_t and size_t
	  respectively. Should both be extern linkage.
	  (stream_recvfrom) Stream aware wrapper around recvfrom, in style
	  of stream_read_try.
	* stream.c: (stream_recvfrom) new function, wrapper around recvfrom.
	  (stream_recvmsg, stream_write) ssize_t and size_t return values
	  
2005-04-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	Add wall-clock timing statistics to 'show thread cpu' output.
	* thread.h: Define struct rusage_t to contain wall-clock time
	  and cpu time.  Change GETRUSAGE macro to collect both pieces
	  of data.  Make appropriate changes to struct cpu_thread_history
	  to track CPU time and real time.  Change proto for
	  thread_consumed_time to return real and cpu time elapsed.
	  And declare a new global variable 'struct timeval recent_time'.
	* thread.c (struct timeval recent_time): New global timestamp variable.
	  (timeval_adjust): If timeout is negative, set to 0 (not 10
	  microseconds).  And remove upper bound of 1,000,000 seconds, since
	  this does not seem to make any sense (and it breaks
	  funcname_thread_add_timer_timeval).
	  (timeval_cmp): Should return long, not int.
	  (vty_out_cpu_thread_history): Show CPU time and real time.
	  (cpu_record_hash_print): Calculate totals for CPU and real time.
	  (cpu_record_print): Change 'show thread cpu' title to show CPU and
	  real time.
	  (thread_timer_remain_second): Put current time in global recent_time.
	  (funcname_thread_add_timer_timeval): Fix assert.  Replace 2-case
	  switch assignment with a ternary expression.  Use global recent_time
	  variable.  Fix use of timeval_adjust (previously, the value was not
	  actually being adjusted).
	  (thread_cancel): Add missing "break" statement in case
	  THREAD_BACKGROUND.
	  (thread_timer_wait): Use global recent_time value instead of calling
	  gettimeofday.  And there's no need to check for negative timeouts,
	  since timeval_subtract already sets these to zero.
	  (thread_timer_process): Timers are sorted, so bail out once we
	  encounter a timer that has not yet popped.  And remove some
	  extraneous asserts.
	  (thread_fetch): Do not process foreground timers before calling
	  select.  Instead, add them to the ready list just after the select.
	  Also, no need to maintain a count of the number of ready threads,
	  since we don't care how many there are, just whether there's
	  one at the head of the ready list (which is easily checked).
	  Stick current time in global variable recent_time to reduce
	  the number of calls to gettimeofday.  Tighten logic for
	  calculating the select timeout.
	  (thread_consumed_time): Now returns real time and puts the elapsed
	  cpu time in an additional argument.
	  (thread_should_yield): Use real (wall-clock) time to decide whether
	  to yield.
	  (thread_call): Maintain CPU and real time statistics.
	* vty.c (vty_command): For slow commands, show real and cpu time.

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

	* workqueue.c (show_work_queues): Remove unused gettimeofday call.

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

	* workqueue.h: (struct work_queue_item) change retry_count to ran,
	  its a count of number item has been run.
	* workqueue.c: (show_work_queues) Fix formating of slightly
	  bugfix: fix SIGFPE if wq->runs is 0.
	  (work_queue_run) retry logic was slightly wrong.
	  cycles.best is 0 initialy, granularity is 1, so update best
	  if cycles >= granularity, not just >.
	* memory.h: memtypes is built source, default includes points to
	  top_builddir, so we should refer to lib/memtypes.h

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

	* buffer.c (buffer_write): Comment out call to buffer_flush_available.
	  This should speed up buffering at the expense of a possible increase
	  in latency in flushing the data if inside a long-running thread.

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

	* workqueue.{c,h}: Helper API for setting up and running queues via
	  background threads.
	* command.c: install the 'show workqueues' command
	* memtypes.c: Add work queue mtypes, and a rib-queue type for
	  a zebra rib work queue.
	* memtypes.h: Updated to match memtypes.c
	* Makefile.am: Refer to source files via srcdir variable, fix
	  out-of-tree build breakage.
	  Add new workqueue files to build.
	* memory.c: Make the string field much wider
	* memtypes.c: Correct the prefix list str/entry strings
	* thread.c: Kill unused TIMER_NO_SORT bits

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

	* thread.h: Fix type for struct thread_master add_type: should be
	  unsigned char.  Also, add some documentation of thread_add_background
	  args.  And remove extraneous declaration of
	  show_thread_work_queues_cmd.

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

	* memory.h: Move include of memtypes.h to after the definition of
	  struct memory_list, gcc 4.0 doesn't like arrays of incomplete 
	  types.
	* thread.h: Add background thread type and thread_add_background
	  macro and accompanying funcname_... function.
	  export thread_should_yield, background threads can use it.
	  Lower thread yield time to 10ms, 100ms is noticeable lag and
	  a thread would only be /starting/ to finish sometime afterward.
	* thread.c: (general) Add background thread type and schedule
	  nearly all thread types through the ready list for fairness.
	  (timeval_adjust) static qualifier missing
	  (vty_out_cpu_thread_history) add support for printout of 
	  background threads
	  (show_thread_cpu) ditto.
	  (thread_master_debug) add debug of background list
	  (thread_master_create) fixup long line
	  (thread_add_unuse) add asserts for required state.
	  (thread_master_free) free background thread list
	  (funcname_thread_add_timer_timeval) make generic, able to 
	  support arbitrary timer-like thread types.
	  (funcname_thread_add_timer) pass thread type to .._add_timer_timeval
	  (funcname_thread_add_timer_msec) ditto
	  (funcname_thread_add_background) Add a background thread, with an
	  optional millisecond delay factor, using .._add_timer_timeval.
	  (thread_cancel) Add background thread type.
	  Move the thread_list_delete common to all cases to bottom of
	  function, after the switch statement..
	  (thread_cancel_event) indent
	  (thread_timer_wait) Static qualifier, and make it able to cope
	  with arbitrary timer-like thread lists, so its of use to
	  background threads too.
	  (thread_process_fd) static qualifier. Again, make it take a list
	  reference rather than thread_master. Fix indentation.
	  (thread_timer_process) Check for ready timer-like threads in the
	  given list and move them on to the ready list - code originally
	  embedded in thread_fetch.
	  (thread_fetch) Schedule all threads, other than events, through
	  the ready list, to ensure fairness. Timer readying code moved to
	  thread_timer_process so it can be reused for background threads.
	  Remove the unneeded quagga_sigevent_process, as pointed out by
	  John Lin <john.ch.lin@gmail.com>.
	  (thread_should_yield) make this available.
	
2005-04-16 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* thread.h (thread_consumed_time): Declare new function to calculate
	  elapsed microseconds.
	* thread.c (thread_consumed_time): Must be global not static so we
	  can call it from lib/vty.c:vty_command.
	  (thread_should_yield): Surround with `#if 0' to make clear that this
	  function is not currently being used anywhere.
	  (thread_call): If CONSUMED_TIME_CHECK is defined, print a CPU HOG
	  warning message if the thread takes more than CONSUMED_TIME_CHECK
	  microseconds.
	* vty.c (vty_command): If CONSUMED_TIME_CHECK is defined, print a CPU
	  HOG warning message if the command takes more than CONSUMED_TIME_CHECK
	  microseconds.

2005-04-16 Paul Jakma <paul@dishone.st>

	* memtypes.c: the comment about use of comments in the comments
	  headers was causing comment within comment warnings from compiler
	* memtypes.awk: Add extensive comments on the file format for
	  memtypes.c.
	  tighten the pattern for the MTYPE matching action (suggestion from
	  Andrew) and tighten which field we try the match on.

2005-04-15 Paul Jakma <paul@dishone.st>

	* memtypes.c: The new, unified location for memory type definitions.
	  The memtype enum and declarations for memory_lists are built from
          this automatically and put into memtypes.h.
        * memtypes.awk: New script to generate memtypes.h from memtypes.c
        * memory.h: Finally, the enum can banished!
        * memory.c: Finally, the seperate mtype memory_list definitions can
          be banished!
          (log_memstats) Increase width of fields
          (show_memory_zebra_cmd) display zebra specific memory types.
          Increase width of fields.
        * Makefile.am: Add memtypes.{c,h}, add BUILT_SOURCES for memtypes.h
          Add a rule to build memtypes.h using memtypes.awk.
          Add memtypes.awk to EXTRA_DIST.
	  memtypes.awk is gawk dependent, use the GAWK automake var.
	* memtypes.h: New file, auto-generated, checked in for convenience.

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

	* zclient.h (struct zclient): Add two fields to support non-blocking
	  I/O: struct buffer *wb, and struct thread *t_write.
	  (zclient_free): Remove function.
	  (zebra_redistribute_send): Change 2nd arg from socket fd to
	  struct zclient * (needed to support non-blocking I/O and buffering).
	  (zclient_send_message): New function to send an arbitrary
	  message with non-blocking I/O.
	* zclient.c (zclient_new): Create write buffer.
	  (zclient_free): Remove unused function.
	  (zclient_stop): Must cancel new t_write thread.  Also, reset
	  all buffers: ibuf, obuf, and wb.
	  (zclient_failed): New helper function for typical error handling.
	  (zclient_flush_data): New thread to flush queued data.
	  (zclient_send_message): New function to send the message in
	  zclient->obuf to zebra using non-blocking I/O and buffering.
	  (zebra_message_send, zapi_ipv4_route, zapi_ipv6_route): Use
	  new zclient_send_message function instead of calling writen.
	  (zclient_start): Set socket non-blocking.  Also, change 2nd arg
	  to zebra_redistribute_send from zclient->sock to zclient.
	  (zebra_redistribute_send): Change 2nd arg to struct zclient *.
	  Can now use zclient->obuf to assemble the message instead of
	  allocating a temporary stream.  And call zclient_send_message to
	  send the message instead of writen. 
	  (zclient_read): Convert to support non-blocking I/O by using
	  stream_read_try instead of deprecated stream_read.
	  (zclient_redistribute): Change 2nd arg to zebra_redistribute_send
	  from zclient->sock to zclient.

2005-04-09 Jeroen Simonetti <jeroens@office.netland.nl>

	* routemap.c: Show description in "show route-map" output.

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

	* sigevent.c: On GNU_LINUX, check whether __USE_GNU is already defined.

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

	* vty.c: (vty_log_fixed) Use casts to (void *) to try to eliminate
	  compiler warnings when assigning a (const char *) value to
	  struct iovec iov_base.

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

	* zebra.h: If GNU_LINUX is defined, then define _GNU_SOURCE.  This
	  fixes a problem where we were not getting the declaration of strnlen
	  in <string.h>.

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

	* routemap.[ch]: Added "description ..." command.

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

	* prefix.[hc]: Pass argument to the inet6_ntoa by value making it more
	  inet_ntoa alike.

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

	* linklist.h: Add usage comments.	  
	  Rename getdata macro to listgetdata.
	  Rename nextnode to listnextnode and fix its odd behaviour to be
	  less dangerous.
	  Make listgetdata macro assert node is not null, NULL list entries
          should be bug condition.
          ALL_LIST_ELEMENTS, new macro, forward-referencing macro for use
          with for loop, Suggested by Jim Carlson of Sun.
          Add ALL_LIST_ELEMENTS_RO for cases which obviously do not need the
          "safety" of previous macro.
	  LISTNODE_ADD and DELETE macros renamed to ATTACH, DETACH, to
	  distinguish from the similarly named functions, and reflect their
	  effect better.
	  Add a QUAGGA_NO_DEPRECATED_INTERFACES define guarded section 
	  with the old defines which were modified above, 
	  for backwards compatibility - guarded to prevent Quagga using it..
	* linklist.c: fix up for linklist.h changes.
	* *.c: fix up for new list loop macro, try audit other loop
          usage at same time, to some degree.

2004-04-05 Hasso Tepper <hasso at quagga.net>

	* lib/prefix.[hc]: inet6_ntoa utility function copied from
	  ripngd/ripngd.c (inet6_ntop).

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

	* vty.c: Improve logging of failures to open vty socket(s).
	  See bugid #163.

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

	* if.h: Fix comments to reflect that if_lookup_by_name and
	  if_get_by_name now require the argument strings to be NUL-terminated.
	* if.c: (if_lookup_by_name) Compare using strcmp.
	  (if_get_by_name) Pass strlen(ifname) as 2nd arg to if_create.

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

	* if.c: (if_nametoindex) The man page is rather vague, but it seems
	  like the argument to if_nametoindex has an implicit maximum length
	  of IFNAMSIZ characters.

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

	* if.h: (if_lookup_by_name_len, if_get_by_name_len) New functions.
	* if.c: (if_lookup_by_name_len, if_get_by_name_len) New functions.
	  (if_get_by_name) Tighten up code.
	  (interface) Use new function if_get_by_name_len.
	* zclient.c: (zebra_interface_add_read) Use new if_get_by_name_len
	  function.
	  (zebra_interface_state_read) Use new if_lookup_by_name_len function.

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

	* str.c: Replace strlcpy and strlcat with actual working versions
	  copied from rsync-2.6.2/lib/compat.c.

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

	* if.h: Remove define for IFINDEX_INTERNBASE and add define
	  IFINDEX_INTERNAL 0, since all internal (i.e. non-kernel) pseudo-
	  interfaces should have ifindex set to 0.
	  (if_new) Remove function.
	  (if_delete_retain) New function to delete an interface without
	  removing from iflist and freeing the structure.
	  (ifname2ifindex) New function.
	* if.c: (if_new) Remove function (absorb into if_create).
	  (if_create) Replace function if_new with call to calloc.
	  Set ifp->ifindex to IFINDEX_INTERNAL.  Fix off-by-one error
	  in assert to check length of interface name.  Add error message
	  if interface with this name already exists.
	  (if_delete_retain) New function to delete an interface without
	  removing from iflist and freeing the structure.
	  (if_delete) Implement with help of if_delete_retain.
	  (ifindex2ifname) Reimplement using if_lookup_by_index.
	  (ifname2ifindex) New function to complement ifindex2ifname.
	  (interface) The interface command should check the name length
	  and fail with a warning message if it is too long.
	  (no_interface) Fix spelling in warning message.
	  (if_nametoindex) Reimplement using if_lookup_by_name.
	  (if_indextoname, ifaddr_ipv4_lookup) Reimplement using
	  if_lookup_by_index.

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

	* zebra.h: Should include str.h to pick up missing functions.
	* str.h: Declare strnlen if needed.
	* str.c: Do not include str.h since zebra.h now includes it.
	  (strnlen) New function.

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

	* zebra.h: Must check whether __attribute__ should be defined before
	  including zassert.h.

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

	* command.c: (sort_node) use vector_max instead of referencing 
	  (struct vector *)->max directly. Test that vector_max is > 0 
	  before using it to calculate an index.
	  Fixup vector loop to make main body conditional on vector slot
	  not being empty.
	  (cmd_cmdsize) Fixup vector loop to make main body conditional on
	  vector slot not being empty.
	  (cmd_filter_by_completion) ditto
	  (cmd_filter_by_string) ditto 
	  (is_cmd_ambiguous) ditto
	  (cmd_describe_command_real) Change index integers to unsigned.
	  Test that vector_max is > 0 before using it to calculate an index.
	  Return immediately with CMD_ERR_NO_MATCH if vline has no 
	  active slots.
	  Fixup vector loop to make main body conditional on vector slot
	  not being empty.
	  (cmd_complete_command_real) ditto.
	  (cmd_execute_command_strict) Fixup vector loop to be conditional
	  on non-null slot.
	  (various) Fix indentation and other whitespace.
	  vector.h: Rename to (struct vector).max to slightly less confusing
	  active, for the number of active slots, distinct from allocated
	  or active-and-not-empty. Rename vector_max to vector_active 
	  for same reason.

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

	* command.c: Undo commit of sign warning fix and hidden command
	  in list_cmd. Sign warning is more subtle. list_cmd on its own
	  will be committed after.
	* command.c: (config_list_cmd) Don't list hidden or deprecated
	  commands, hiding these from tab completion is still to be done.

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

	* command.c: (banner_motd_file_cmd) use XSTRDUP/XFREE.
	  (no_banner_motd_cmd) use XFREE.
	  (cmd_describe_command_real) sign compile warning fix
	  (cmd_complete_command_real) ditto.
	  (config_list_cmd) Don't list hidden or deprecated commands,
	  hiding these from tab completion is still to be done.
	* command.h: cmd attr enum should start at 1.
	* vty.c: (vty_hello) suggestions from Andrew, read by line and
	  stub out trailling non-printable characters on each line thus
	  allowing us to specify VTY_NEWLINE to vty_out.

2005-03-08 Jeroen Massar <jeroen@unfix.org>

	* vty.c: (vty_hello) display motd file, if set
	* command.h: add char *motdfile to struct host
	* command.c: (config_write_host) write out motdfile config
	  (banner_motd_file_cmd) new command, allow motd to be read from
	  file.
	  (no_banner_motd_cmd) free motdfile string, if needs be.
	  (cmd_init) init (struct host).motdfile. Add new motd file
	  commands.

2005-03-07 Michael Sandee <voidptr@voidptr.sboost.org>

	* command.c: host.name might be NULL.
	* vty.c: Fix fd leak.

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

	* stream.c: (stream_read_try) Log a warning message if a fatal
	  I/O error occurs.
	  (stream_fifo_new) Fix prototype.
	* stream.h: Fix prototype for stream_fifo_new (need void arg).

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

	* {vty.h,vty.c}: Remove vty_finish (duplicate of vty_reset).

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

	* buffer.h: Make the struct buffer and struct buffer_data structures
	  private by moving them inside buffer.c.  Add comments for all
	  functions.  Rename buffer_write as buffer_put (to be more consistent
	  with the buffer_putc and buffer_putstr functions).  Declare a new
	  buffer_write function that is used to write data to a file descriptor
	  and/or add it to the buffer queue.  Remove unused function
	  buffer_flush_vty_all.  Create a new enum typedef buffer_status_t
	  to be used as the return code for all buffer_flush* functions
	  and buffer_write.
	* buffer.c: The struct buffer and struct buffer_data declarations
	  are now private to this file.  In conjunction with that, remove
	  some unnecessary fields: struct buffer (alloc, unused_head,
	  unused_tail, length), struct buffer_data (prev).
	  (buffer_data_new) Removed: functionality incorporated into buffer_add.
	  (buffer_data_free) Removed: use a macro BUFFER_DATA_FREE instead.
	  (buffer_new) Use calloc instead of malloc + memset(zero). 
	  Supply an appropriate default size if the specified size is 0.
	  (buffer_free) Eliminate code duplication by calling buffer_reset to
	  free the contents of the buffer (and remove unused code related
	  to unused_head).
	  (buffer_empty,buffer_putc,buffer_putstr) Aesthetic change (make more
	  compact).
	  (buffer_reset) Use macro BUFFER_DATA_FREE.  No need to set
	  alloc and length to 0 (these fields have been removed).
	  (buffer_add) Fix scope to be static.  Call XMALLOC directly instead
	  of calling removed buffer_data_new function.  Simplify the logic
	  (since it's now a singly-linked list instead of doubly-linked).
	  (buffer_write) Renamed to buffer_put.  Change to void, since return
	  code of 1 was meaningless.  No need to adjust length field, since
	  it has been removed.
	  (buffer_putw,buffer_flush,buffer_flush_vty_all,buffer_flush_vty)
	  Remove unused functions.
	  (buffer_flush_all) Rewrite using buffer_flush_available to eliminate
	  a possible failure mode if IOV_MAX is less than the number of buffers
	  on the queue.
	  (buffer_flush_window) Incorporate logic from buffer_flush_vty.
	  Log an error message if there is a writev error.
	  (buffer_flush_available) Be more paranoid: check for case where
	  buffer is already empty.  Use new ERRNO_IO_RETRY macro, and use
	  new enum for return codes.  Simplify deletion logic (since it's
	  now a singly-linked list).
	  (buffer_write) New function for use with non-blocking I/O.
	* vty.h: Replace the struct vty sb_buffer field with a fixed-size
	  (5-character) sb_buf field and an sb_len field, since using
	  a struct buffer was inappropriate for this task.  Add some useful
	  comments about telnet window size negotiation.
	* vty.c: Include <arpa/telnet.h> (no longer included by zebra.h).
	  Remove VTY_OBUF_SIZE (instead use buffer_new default size).
	  Make telnet_backward_char and telnet_space_char static const.
	  (vty_out) Replace buffer_write with buffer_put.
	  (vty_log_out) Check for I/O errors.  If fatal, close the vty session.
	  Consolidate 3 separate writes into a single write call.
	  (vty_will_echo,vty_command,vty_next_line,vty_previous_line,
	  vty_end_config,vty_describe_fold,vty_clear_buf,vty_serv_sock_addrinfo,
	  vty_serv_sock_family,vty_serv_un,vty_use_backup_config,exec_timeout,
	  vty_config_write,vty_save_cwd) Fix scope to static.
	  (vty_new) Let buffer_new use its default buffer size.
	  (vty_write) Fix signature: 2nd arg should be const char *.
	  Replaced buffer_write with buffer_put.
	  (vty_telnet_option) Fix minor bug (window height or width greater than
	  255 was broken).  Use sb_buf and sb_len instead of removed sb_buffer
	  (which was being used improperly).
	  (vty_read) On error, use ERRNO_IO_RETRY to decide whether it's fatal.
	  If the error is fatal, call buffer_reset so vty_close does not attempt
	  to flush the data.  Use new sb_buf and sb_len instead of sb_buffer
	  to store the SB negotiation string.
	  (vty_flush) When vty->lines is 0, call buffer_flush_available instead
	  of buffer_flush_window.  Look at the return code from buffer_flush
	  to detect I/O errors (and in that case, log an error message and
	  close the vty).
	  (vty_create) Fix scope to static.  Initialize sb_len to 0 instead
	  of creating sb_buffer.
	  (vty_accept) Set socket nonblocking.
	  (vtysh_accept) Use new set_nonblocking function instead of calling
	  fcntl directly.
	  (vtysh_flush) New function called from vtysh_read (after command
	  execution) and from vtysh_write.  This flushes the buffer
	  and reacts appropriately to the return code (by closing the vty
	  or scheduling further flushes).
	  (vtysh_read) Check whether error is fatal using ERRNO_IO_RETRY.
	  If not, just try again later.  Otherwise, call buffer_reset before
	  calling vty_close (to avoid trying to flush the buffer in vty_close).
	  Fix logic to allow case where a command does not arrive atomically
	  in a single read call by checking for the terminating NUL char.
	  (vtysh_write) Use new vtysh_flush helper function.
	  (vty_close) No need to call buffer_empty, just call buffer_flush_all
	  in any case (it will check whether the buffer is empty).
	  Do not free sb_buffer (since it has been removed).
	  (vty_log_fixed) Use writev instead of write.
	* zebra.h: Do not include <arpa/telnet.h>, since this is used only
	  by lib/vty.c.

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

	* pqueue.[ch]: Introduce "update" function to meet ospf spf needs. It
	  will allow to update node when:
	  i) a node is inserted into the priority queue;
	  ii) a node position is modified in the priority queue;
	* pqueue.h: Export trickle_down() function.

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

	* stream.c: (stream_new) fix dumb mistake.

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

	* stream.c: (stream_read_try) Use new ERRNO_IO_RETRY macro.

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

	* network.h: Define a new ERRNO_IO_RETRY macro to test whether an I/O
	  operation should be retried.  This eliminates the need to duplicate
	  the same logic testing for EAGAIN or EINTR in multiple places.

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

	* stream.h: Declare new function stream_read_try suitable for use
	  with non-blocking file descriptors.  Indicate that stream_read
	  and stream_read_unblock are deprecated.
	* stream.c: (stream_read_try) New function for use with non-blocking
	  I/O.
	  (stream_recvmsg) Should return -1 if the stream is too small to
	  contain the data.

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

	* network.c: (set_nonblocking) Should check return code from
	  fcntl(F_GETFL).

2005-02-15 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
	
	* network.h: Declare new function set_nonblocking.  Indicate that
	  readn and writen are deprecated.
	* network.c: (set_nonblocking) New function to make a file descriptor
	  non-blocking, since it seems silly to have fcntl calls sprinkled
	  throughout the code.

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

	* stream.h: Unsigned long updated to size_t
	* stream.c: ditto
	* stream.h: Add stream_copy, stream_dup, stream_recvmsg.
	  Add comment describing struct stream abstraction, and various
	  other comments.
	  Deprecate several unsafe/ambigious macros.
	  Add STREAM_WRITEABLE and STREAM_READABLE.
	  Add (stream_getl_from) for symmetry.
	  Update stream_forward_{endp,getp} to use size_t offset.
	  Make stream data a 0 length array, rather than a seperate malloc.
	* stream.c: Add consistency checks. Update to follow stream.h
	  changes.
	  (stream_new) Alloc stream+data in one go.
	  (stream_copy) new function, copy a stream.
	  (stream_dup) new function, dup a stream.
	  (stream_recvmsg) new function, recvmsg data into a stream.
	  (stream_empty) no need to check getp == 0.

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

	* stream.h: Remove putp. Update reference to putp with endp.
	  Add stream_forward_endp, which daemons were doing manually.
	  Rename stream_forward to stream_forward_getp.
	  stream.c: Remove/update references to putp.
	  introduce stream_forward_endp.

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

	* zebra.h: Change macro definitions SET_FLAG and UNSET_FLAG
	  to use compound assignment operators (aesthetic change).

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

	* log.c: (zlog_signal,zlog_backtrace_sigsafe) Eliminate use of fileno()
	  since it is not async-signal-safe.
	  (_zlog_assert_failed) Rewrite crashlog logic more compactly.
	  (zlog_set_file,zlog_reset_file,zlog_rotate) Update logfile_fd
	  for use in signal handler.

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

	* log.c: (syslog_sigsafe) Reduce scope of syslog_fd: it is accessed
	  inside this function only.
	  (open_crashlog) New function to open /var/tmp/quagga.<daemon>.crashlog
	  with flags O_WRONLY|O_CREAT|O_EXCL to save some crash info.
	  (zlog_signal,_zlog_assert_failed) Increase logging priority from
	  LOG_ERR to LOG_CRIT.  If no file logging is configured, try to use
	  open_crashlog to create a crash logfile.
	  (zlog_backtrace_sigsafe) If a crashlog file descriptor is open,
	  dump a backtrace to that file.

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

	* if.h: Declare if_flag_dump.

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

	* daemon.c: (daemon) Replace perror with zlog_err.
	* vty.c: (vty_serv_un) Replace perror with zlog_err.

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

	* buffer.h: Fix comment on buffer_getstr to reflect that it now
	  uses XMALLOC.
	* buffer.c: (buffer_getstr) Use XMALLOC(MTYPE_TMP) instead of malloc.
	* filter.c: (access_list_remark,ipv6_access_list_remark) Use
	  argv_concat instead of buffer_getstr.
	* if.c: (interface_desc) Use argv_concat instead of buffer_getstr.
	* plist.c: (ip_prefix_list_description,ipv6_prefix_list_description)
	  Use argv_concat instead of buffer_getstr.

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

	* lib/buffer.h: Document behavior of buffer_getstr function.
	* lib/buffer.c: (buffer_getstr) Fix bug: must handle case where
	  the string extends beyond the head struct buffer_data.

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

	* lib/command.h: Document behavior of argv_concat function.
	* lib/command.c: (argv_concat) Calculate total string length first so
	  we can call malloc just once (instead of realloc'ing to add each
	  string element).
	  (do_echo,config_logmsg) Allow for possible NULL return value from
	  argv_concat.

2005-01-23 Hasso Tepper <hasso at quagga.net>

	* lib/command.[ch]: Make node_parent() function nonstatic. vtyh.c will
	  use it as well.

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

	* log.h: Test for SA_SIGINFO to see whether zlog_signal takes final
	  two args (siginfo and program_counter).
	* log.c: (hex_append) Include this function only if SA_SIGINFO or
	  HAVE_GLIBC_BACKTRACE is defined.
	  (zlog_signal) Final two args (siginfo and program_counter) now
	  depend on whether SA_SIGINFO is defined on this platform.
	* sigevent.c: (program_counter) Do not include this function if
	  SA_SIGINFO is not defined on this platform.
	  (exit_handler,core_handler) Test for SA_SIGINFO to decide whether
	  2nd & 3rd arguments are present and to decide how to invoke
	  zlog_signal.
	  (trap_default_signals) Test for SA_SIGINFO and invoke sigaction
	  appropriately.

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

	* log.h: Change prototype for zlog_backtrace_sigsafe to take additional
	  program_counter argument.
	* log.c: (zlog_backtrace_sigsafe) Add additional program_counter
	  argument.  If it is non-NULL, use backtrace_symbols_fd to resolve
	  the address.
	  (zlog_signal) Call zlog_backtrace_sigsafe with additional
	  program_counter argument.

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

	* command.[ch], vty.c: cmd_execute_command() function must not attempt
	  to walk up in the node tree if called from vtysh. Different daemons
	  might have commands with same syntax in different nodes (for example
	  "router-id x.x.x.x" commands in zebra/ospfd/ospf6d daemons).

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

	* command.c (print_version): Do not bother even to examine host.name,
	  since it is always NULL when this function is called from main.

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

	* command.c (print_version): Don't print host.name if it is NULL.
	Fixes segfault on Solaris reported by Goetz von Escher <goetz@open.ch>
	
2005-01-12 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* sigevent.c: (trap_default_signals) Use the SA_SIGINFO flag to
	  pass additional siginfo_t and ucontext_t arguments to core_handler
	  and exit_handler.
	  (core_handler,exit_handler) Now invoked with 3 arguments (using
	  SA_SIGINFO).  Pass additional info to zlog_signal.
	  (program_counter) New function to find program counter in ucontext_t,
	  needs to be enhanced to support more platforms (currently works only
	  on Linux/x86).
	* log.h: Change the zlog_signal prototype to add new arguments
	  siginfo_t * and program_counter.
	* log.c: (zlog_signal) Add new arguments siginfo and program_counter.
	  Include si_addr and program counter (if non-NULL) in message.
	  And remove #ifdef HAVE_GLIBC_BACKTRACE around hex_append, since
	  that is now used to render the si_addr and PC pointers.

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

	* zebra.h: If not C99 and no va_copy macro available, fall back to
	  memcpy (solves a build problem on FreeBSD 4.x).

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

	* zebra.h: Define ZCMSG_FIRSTHDR appropriately based on whether
	  config.h indicates HAVE_BROKEN_CMSG_FIRSTHDR (as determined
	  by the configure test program).
	* sockopt.c: (getsockopt_cmsg_data) Use ZCMSG_FIRSTHDR instead
	  of CMSG_FIRSTHDR.

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

	* command.c: Revert int -> unsigned int fixes in
	cmd_describe_command_real() and cmd_complete_command_real(). index can
	be actually negative and it caused crash with "do<TAB>" in vty.

2004-12-29  Greg Troxel  <gdt@poblano.ir.bbn.com>

	* sockopt.c (getsockopt_ipv4_ifindex): Document calling
	convention.  Beef up comments.  Handle the case where the cmsghdr
	has a zero controllen, or more specifically when the wanted option
	is not present.  This is needed for Solaris 8, and in general for
	any platform for which configure finds a method and it can fail.
	Mark some changes with XXX to be cleaned up post 0.98.	
	
2004-12-28 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* sockopt.c: (setsockopt_ipv4_ifindex) Improve error message.
	  When neither IP_PKTINFO nor IP_RECVIF is defined, make return value
	  deterministic (-1).

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

	* thread.c: (funcname_thread_add_timer_msec) Reduce overflow risk.

2004-12-21 Paul Jakma <paul.jakma@sun.com>

	* if.h: Add more 'non-generic' IFF_ flags.
	* if.c: IFF_NOXMIT/IFF_VIRTUAL interfaces are 'loopback like'
	* stream.c: Dont allocate streams with 0 sized data buffers

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

	* command.c: (do_echo) Added new "echo" command, useful for
	  watchdog pinging to make sure the daemon is responsive.

2004-12-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
	
	* pid_output.c: (pid_output_lock) Eliminate static function, and just
	  use the #ifdef to decide which version of the function to include.
	  This eliminates a compilation problem with gcc4.  And fix the
	  non-fcntl version so that it actually compiles.  Exit with
	  status 1 instead of -1 on error.

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

	* sigevent.c: (trap_default_signals) Ignore SIGPIPE instead of exiting.

2004-12-10 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
	
	* log.c: (zlog_signal,_zlog_assert_failed) Change logging level back to
	  LOG_ERR instead of LOG_EMERG.

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

	* log.c: (hex_append) No need to include this function if
	  HAVE_GLIBC_BACKTRACE is not defined.

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

	* prefix.c: (prefix_copy) Error message before abort should
	  have severity LOG_ERR, not LOG_INFO.
	* memory.c: (mtype_log) Log level should be LOG_DEBUG, not LOG_INFO.

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

	* {smux.c,zclient.c}: Change level of debug messages to LOG_DEBUG.

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

	* command.c: (config_write_host) Note that "log trap" is deprecated
	  when writing out the config.

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

	* log.h: Replace struct zlog flags and maskpri fields with maxlvl
	  array to support individual logging levels for each destination.
	  Remove the 2nd argument to openzlog since the default logging config
	  should be standardized inside the library.  Replaced the
	  zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
	  And zlog_set_file now requires an additional log_level argument.
	  Declare zlog_proto_names for use inside command.c in the
	  "show logging" command.  Added defines useful for command
	  construction.
	* log.c: (vzlog) Decide where to send the message based on the
	  individual logging levels configured for each destination.
	  Remove support for ZLOG_STDERR since it was never actually used.
	  Support record-priority for terminal monitors.
	  (zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
	  logging levels.  Remove stderr support (was never used).  Added
	  support for terminal monitor logging.
	  (_zlog_assert_failed) Increase message severity to LOG_EMERG.
	  (openzlog) Remove 2nd argument since default config should be
	  standardized in library.  By default, terminal monitoring
	  is set to debug, and all other logging is disabled.
	  (zlog_set_flag,zlog_reset_flag) Removed.
	  (zlog_set_level) New function to replace zlog_set_flag and
	  zlog_reset_flag.  Supports destination-specific logging levels.
	  (zlog_set_file,zlog_reset_file) Support file-specific logging level.
	  (zlog_rotate) Log an error message if fopen fails, and support
	  new file-specific logging level.
	* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
	  command functions will be static instead of global.  Remove
	  declarations for config_exit and config_help.  Define new macros
	  DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
	  have deprecated commands in vtysh.  Similarly, for completeness,
	  define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
	  Also, fix bug in ALIAS_ATTR macro (didn't matter because it
	  was never used).
	* command.c: Make many functions static instead of global.
	  (facility_name,facility_match,level_match) New functions
	  to support enhanced destination-specific logging levels.
	  (config_write_host) Support new destination-specific logging levels.
	  (config_logmsg) Added new "logmsg" command to help test logging
	  system.
	  (show_logging) Added "show logging" command to show the current
	  configuration of the logging system.
	  (config_log_stdout_level) Support explicit stdout logging level.
	  (no_config_log_stdout) Now takes optional LEVEL arg.
	  (config_log_monitor,config_log_monitor_level,no_config_log_monitor)
	  New commands creating new "log monitor" commands to set terminal
	  monitoring log level.
	  (config_log_file_level) Support explicit file logging level.
	  (config_log_syslog_level) Support explicit syslog logging level.
	  (config_log_facility,no_config_log_facility) Implement new
	  "log facility" command.
	  (cmd_init) Add hooks for new commands: "show logging", "logmsg",
	  "log stdout <level>", "log monitor", "log monitor <level>",
	  "no log monitor", "log file <filename> <level>",
	  "no log file <filename> <level>", "log syslog <level>",
	  "log facility", and "no log facility".
	* vty.h: Added a "level" argument to vty_log so it can support
	  "log record-priority".  Declare new function vty_log_fixed for
	  use in signal handlers.
	* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
	  "log record-priority" for vty terminal monitors.
	  (vty_down_level) Use config_exit_cmd.func instead of calling
	  config_exit directly (since command functions will now be static
	  instead of global).
	  (vty_log_fixed) New function to send terminal monitor messages
	  from inside a signal handler.

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

	* log.h: Document appropriate use of syslog logging priorities
	  inside quagga.

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

	* command.h: Remove fields log_stdout and log_syslog from struct host,
	  since they are just trying to duplicate information in the
	  zlog_default structure.  Note that this fixes a bug since those
	  fields were not registering any logging that was established
	  in the initial call to openzlog (this affects only the zebra and
	  ospf6d daemons).  It is probably a bug to turn on any logging by
	  default in the call to openzlog.
	* command.c: (config_write_host) Get logging info from zlog_default
	  instead of now-removed fields host.log_stdout and host.log_syslog.
	  (config_log_stdout,no_config_log_stdout) Do not set now-removed field
	  host.log_stdout, since this info is recorded in zlog_default.
	  (config_log_file) Use XSTRDUP (instead of strdup) to set host.logfile.
	  (config_log_syslog,config_log_syslog_facility,no_config_log_syslog)
	  Do not set now-removed field host.log_syslog, since this info is
	  recorded in zlog_default.

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

	* version.h.in: Remove declaration for pid_output_lock, this function
	  is now static, not global.
	* pid_output.c: (pid_output_lock) This function should be static, not
	  global.  And remove "old umask" error message, since it was really
	  an unimportant debug message, not an error.
	  (pid_output) Need to declare static function pid_output_lock.

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

	* log.h: Remove several unused fields from struct zlog.  Add comments
	  for other fields, and add one new field syslog_options that is
	  used in the new syslog_sigsafe implementation.
	* log.c: (syslog_sigsafe) New function to send syslog messages in
	  an async-signal safe way that can be used inside a signal handler.
	  (syslog_connect) New function to connect to syslog daemon inside a
	  signal handler.  This function supports only systems where /dev/log
	  is a unix datagram socket (e.g. not Solaris).
	  (zlog_signal) Call syslog_sigsafe if syslog logging is enabled.
	  (zlog_backtrace_sigsafe) Call syslog_sigsafe if syslog logging is
	  enabled.
	  (openzlog) Save syslog_options for use in syslog_sigsafe.
	  (num_append) Fix bug: handle 0 properly.
	  (hex_append) New function to print a u_long in hex format.

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

	* command.h: DEFUN_DEPRECATED passes attribute to DEFUN as well.

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

	* log.c, log.h, memory.c: Change function name from zlog_backtrace_safe
	  to the more self-explanatory zlog_backtrace_sigsafe.

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

	* debug.[ch]: Remove unused files.
	* Makefile.am: Remove references to debug.c and debug.h

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

	* log.c: (zlog_backtrace) New function to log a backtrace.
	  (zlog_backtrace_safe) Log a backtrace in an async-signal-safe way.
	  Unfortunately, this function does not support syslog logging yet.
	  (zlog_signal) Move backtrace code into separate function
	  zlog_backtrace_safe.
	  (_zlog_assert_failed) Call zlog_backtrace before aborting.
	* log.h: Declare new functions zlog_backtrace and zlog_backtrace_safe.
	* memory.c: (zerror) Call zlog_backtrace before aborting.

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

	* Makefile.am: Need to add zassert.h to pkginclude_HEADERS.

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

	* zebra.h: If not C99 and there's no va_copy macro and there is
	  a __va_copy macro, define va_copy as __va_copy.

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

	* pid_output.c: (pid_output_lock) Fix 2 bugs: when locking, should
	  set l_whence to SEEK_SET, not SEEK_END.  And after writing new
	  pid to file, must ftruncate to eliminate any extraneous bytes left
	  over from the last time a pid was written.

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

	* zassert.h: New header file to declare a quagga-specific assert macro.
	* log.c: (_zlog_assert_failed) New function called when assert fails
	  to log the error and abort.
	* zebra.h: Include "zassert.h" instead of <assert.h>.
	* regex.c: Include "zassert.h" instead of <assert.h>.

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

	* sigevent.c: (signal_init) Set up some default signal handlers
	  so that processes will issue an error message before terminating
	  or dumping core.
	  (trap_default_signals) New function to set up signal handlers
	  for various signals that may kill the process.
	  (exit_handler) Call zlog_signal, then _exit.
	  (core_handler) Call zlog_signal, then abort.
	* log.h: Declare new function zlog_signal.
	* log.c: (zlog_signal) New function to log information about
	  a received signal before the process dies.  Try to log a 
	  backtrace also.
	  (quagga_signal_handler,signal_set) Should be static.

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

	* log.c: (vzlog) Take a single va_list argument and use va_copy
	  as necessary for multiple traversals.
	  (zlog) Pass only one va_list to vzlog.
	  (zlog_*,plog_*) Use a macro for boilerplate code; pass only one
	  va_list to vzlog.
	  (zlog_set_file) Remove unused 2nd argument (flags).
	  (zlog_save_cwd,zlog_get_cwd,zlog_free_cwd) Remove unused functions.
	* log.h: Remove ZLOG_*_INDEX defines (no longer used).
	  Remove unused 2nd argument from zlog_set_file prototype.
	  Fix prototype for zlog_rotate.
	* command.c: (config_log_file) Remove unused 2nd arg to zlog_set_file.
	* vty.c: (vty_out) Fix stdarg usage to perform multiple traversals
	  properly.
	  (vty_log) Must use va_copy for multiple traversals of va_list arg.

2004-11-19 David Young <dyoung@pobox.com>

	* log.c: (safe_strerror) New function: safe wrapper for strerror.

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

	* sockopt.c: (setsockopt_so_recvbuf) Stop error message from being
	  printed every time.

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

	* memory.h: Fix prototype for memory_init().
	* memory.c: Declare many functions and data structures static instead
	  of global.  Fix prototype for memory_init().

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

	* sockopt.h: Avoid CMSG_ALIGN, and declare that sizes are without
	alignment (users should use CMSG_SPACE).

	* zebra.h: Rationalize CMSG_SPACE compatibility defines.  Warn if
	asumming 4-byte alignment, since this isn't safe.

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

	* memory.c: (zerror) Use zlog_err instead of fprintf to stderr.
	  Instead of exiting, log currenty memory usage and then abort.
	  (log_memstats) New function to log memory statistics, called by
	  zerror.
	  (show_memory_all) Loop over new mlists array instead of calling
	  show_memory_vty separately for each memory_list.

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

	* buffer.c: Add missing include of log.h.
	  (buffer_flush_available) written is compared against
	  mostly against unsigned types, only for the writev do we need
          signed compare, so declare it as size_t and cast it to ssize_t
          just for the error compare when we've called writev.
	* buffer.h: Add comment that buffer data sizes really should be 
          size_t.

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

	* version.h.in: add autoconf configure_input output var

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

	* vty.h: Remove fields in struct vty that were related to VTY_CONTINUE
	  capabilities (that were used only in bgpd/bgp_route.c and are now
	  removed).  Also remove some other fields that were not being
	  used at all.
	* vty.c: (vty_execute) Do not test for obsolete status values VTY_START
	  and VTY_CONTINUE.
	  (vty_read) Remove calls to vty->output_func since that was part
	  of the VTY_CONTINUE infrastructure that has been removed.
	  (vty_flush) Remove code to support VTY_START and VTY_CONTINUE.
	  (vty_close) Remove code to cancel vty->t_output thread, since that
	  thread was never actually used.

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

	* vty.c: Vtysh connections to daemons should use buffering.
	  (vty_out) Remove exception for vty_shell_serv, just use buffer_write.
	  (vty_new) Increase output buffer size to 4096 rounded up to a
	  multiple of pagesize.
	  (vtysh_read) After command has been executed and all output buffered,
	  call buffer_flush_available and schedule further writes if the
	  buffers are not yet empty.
	  (vtysh_write) New function to flush output to vtysh when the socket
	  is writeable.
	  (vty_event) Added new VTYSH_WRITE event for flushing buffers to vtysh
	  clients.  Also, should save read thread in vty->t_read so the
	  thread can be cancelled in vty_close.
	* buffer.h: In struct buffer_data, remove unused "parent" field.
	  Convert "unsigned char *data" to "unsigned char data[0]" to save
	  a malloc.  Declare new function buffer_flush_available that works
	  with non-blocking sockets.
	* buffer.c: (buffer_data_new) Use a single malloc now that data is
	  a variable-size array at end of structure.
	  (buffer_data_free) Just a single free now that data is part of the
	  structure.
	  (buffer_write) Simplify the logic to make behavior more transparent.
	  (buffer_flush) Decrease b->length as data is written out.
	  (buffer_flush_vty_all) Decrease b->length as buffers are freed.
	  (buffer_flush_vty) Decrease b->length as data is written out.
	  (buffer_flush_available) New function to flush non-blocking sockets.
	  
2004-11-01 Paul Jakma <paul@dishone.st>

	* sockopt.c: (setsockopt_pktinfo) remove, its unused.

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

	* vty.c: As per Andrew's suggestions..
	  (vty_serv_un) remove flags.
	  (vtysh_accept) close socket if we cant set NONBLOCK. Add flags.
	* keychain.c: Convert some more strtoul users to VTY_GET_INTEGER.
	* memory.h: Add MTYPE_THREAD_FUNCNAME and MTYPE_THREAD_STATS
	* thread.c: Update stats and funcname alloc/free to use previous
	  specific memory type defines. Use XCALLOC and sizeof the type,
          not the pointer.
	* smux.c: fix int to size_t compile warnings

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

	* vty.c: Move setting of sock to O_NONBLOCK from vty_serv_un
	  to vtysh_accept, where sock is the actual fd we wanted to set to
          O_NONBLOCK, ie the /connected/ vtysh unix socket.

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

	* zclient.c: Unbreak reading interface update message. Might fix
	blocker bugzilla #109.

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

	* sockopt.c: (getsockopt_ipv4_ifindex) no ifindex should be 0, not
          -1. 
          (setsockopt_pktinfo) unexported
	* sockopt.h: Cleanup SOCKOPT_CMSG defines a bit. Add a throwaway
          define for SOPT_SIZE_CMSG_IFINDEX_IPV4 for systems which have
          neither IP_RECVIF nor IP_PKTINFO (eg openbsd), thanks to Rivo
          Nurges for highlighting problem and fix.
          Fix elif that should be an else.
	* command.h: Cleanup the defines a bit, add helper defines and
	  collapse all defines to use those. Add an attribute field to
	  cmd_element to support, eg hidden or deprecated commands, add
          defun defines for such. All that's left to do is add logic
          to command.c to check these attributes... ;)
	* zebra.h: reserve ZEBRA_ROUTE_HSLS

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

	* version.h.in: Define copyright string QUAGGA_COPYRIGHT.
	* print_version.c: Remove. print_version () function moved to
	  command.[c|h].
	* command.c: Use QUAGGA_COPYRIGHT.
	* Makefile.am: Remove useless version.c and print_version.c files.

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

	* zclient.c: (zebra_interface_address_read) If the destination address
	  is encoded as all zeroes, load it as a NULL pointer.
	* if.h: Add comment describing struct connected destination field
	  and indicating that it may be NULL.  Define macros
	  CONNECTED_DEST_HOST and CONNECTED_POINTOPOINT_HOST to help
	  with PtP logic (distinguish between host and subnet addressing).
	* if.c: (if_lookup_address) Fix PtP logic to handle subnet addressing
	  properly,
	  (connected_lookup_address) ditto.
	  (connected_add_by_prefix) Handle case where destination is NULL,
	* prefix.[c|h]: New functions ipv4_network_addr and
	  ipv4_broadcast_addr.

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

	* command.c: Make CMD_ERR_NOTHING_TODO nonfatal if reading
	  configuration from file. Fixes critical bugzilla #113.
	* smux.c, smux.h: Remove all defaults to initialize smux connection to
	  snmpd by default even if not configured to do so. "smux peer OID
	  <password>" initializes now connection and "no smux peer" terminates
	  it.

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

	* (global) more const'ification.
	* sockunion.c: (sockunion_su2str) buffer should be sized
          SU_ADDRSTRLEN.
          (sockunion_log) do not return stack variables, strdup buf before
          return.
        * vty.h: Fix up the VTY_GET_INTEGER macros. Testing caller supplied
          values against ULONG_MAX is daft, when caller probably has passed
          a type that can not hold ULONG_MAX. use a temporary long instead.
          Add VTY_GET_LONG, make VTY_GET_INTEGER_RANGE use it, make
	  VTY_GET_INTEGER a define for VTY_GET_INTEGER_RANGE.

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

	* command.h: Sync DEFUNSH with other macros.
	* sockunion.c, sockunion.h: More const strings.

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

	* thread.c: (funcname_thread_add_timer) 
	  (funcname_thread_add_timer_msec) Fix mistakes from last change.
	  Pointed out by Liu Xin in [quagga-dev 1609].
	* if.h: mtu's should be unsigned.
	* routemap.{c,h}: const char updates
	* smux.{c,h}: ditto

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

	* version.h.in: (pid_output*) add const qualifier.
	* command.h: Change DEFUN func to take const char *[] rather
          than char **, to begin process of fixing compile warnings in lib/.
          Nearly all other changes in this commit follow from this change.
        * buffer.{c,h}: (buffer_write) pointer-arithmetic is gccism, take
          const void * and cast an automatic const char *p to it.
          (buffer_putstr) add const
        * command.c: (zencrypt) const qualifier
          (cmd_execute_command_real) ditto
          (cmd_execute_command_strict) ditto
          (config_log_file) ditto. 
          Fix leak of getcwd() returned string.
        * memory.{c,h}: Add MTYPE_DISTRIBUTE_IFNAME for struct dist ifname.
        * distribute.{c,h}: Update with const qualifier.
          (distribute_free) use MTYPE_DISTRIBUTE_IFNAME
          (distribute_lookup) Cast to char *, note that it's ok.
          (distribute_hash_alloc) use MTYPE_DISTRIBUTE_IFNAME.
          (distribute_get)  Cast to char *, note that it's ok.
        * filter.c: Update with const qualifier.
        * if.{c,h}: ditto.
        * if_rmap.{c,h}: ditto.
          (if_rmap_lookup) Cast to char *, note that it's ok.
          (if_rmap_get) ditto.
        * log.{c,h}: Update with const qualifier.
        * plist.{c,h}: ditto.
        * routemap.{c,h}: ditto.
        * smux.{c,h}: ditto. Fix some signed/unsigned comparisons.
        * sockopt.c: (getsockopt_cmsg_data) add return for error case.
        * vty.c: Update with const qualifier.
          
2004-10-08 Hasso Tepper <hasso at quagga.net>

	* routemap.c, routemap.h: Make some string arguments const.

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

	* version.h.in: print_version declaration is here, not in automake
	  generated version.h.

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

	* command.c, command.h: Make argument of cmd_make_strvec function
	  const.
	* command.c: Make hostname commands usable in vtysh again.

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

	* command.c, pid_output.c, print_version.c, vty.c, vty.h: Make more
	  strings const.

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

	* *.[c|h]: Make many strings cons and a lot of int -> unsigned int
	  changes to fix warnings.

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

	* sockopt.{c,h}: add sockopt_iphdrincl_swab_{htosys,systoh},
          functions to change byte order between system IP_HDRINCL order
          and host order.
	* thread.c: (funcname_thread_add_timer_timeval) new function, add
          timer at specified timeval.
	  (funcname_thread_add_timer) use funcname_thread_add_timer_timeval.
	  (funcname_thread_add_timer_msec) ditto

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

	* memory.c, memory.h: Make char * argument of strdup functions const.
	* prefix.c, prefix.h: Make many arguments const. Reorder stuff in
	  header.
	* log.h: Make log message const in struct message.
	* log.c: Fix some indenting.
	* network.c, network.h: Make second argument of writen() const.

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

	* command.h: Introduce SERVICE_NODE for "service <...>" commands.
	* command.c: Don't initialize commands that don't make sense if vtysh
	  is used.
	* vty.c: Make VTY_NODE appear in vtysh.

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

	* zclient.c, zclient.h: zclient functions for router id handling.
	* zebra.h: New message types for router id handling.

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

	* zebra.h: Add WANT_OSPF_WRITE_FRAGMENT for ospfd
	  to try to fragment oversized packets. Enabled only for Linux.
	  Add HAVE_IP_HDRINCL_BSD_ORDER to define struct ip byte order,
	  to consolidate various ad-hoc platform defines for same thing.

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

	* vty.c, sockopt.c: Fix compiler warnings.

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

	* linklist.h: Remove list and listnode typedefs.
	* *.[c|h]: list -> struct list *, listnode -> struct listnode *.

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

	* sockopt.c: Add missing bracket

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

	* sockopt.{c,h}: Add setsockopt_so_recvbuf, for ripd and ripngd.

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

	* command.c: Update the copyright string in the default motd.

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

	* hash.c (hash_iterate): Save next pointer before calling
	procedure, so that iteration works even if the called procedure
	deletes the hash backet.

	* linklist.h (listtail): new macro, not yet used.

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

	* command.c: Install "terminal length" commands only if vty is used.
	  Vtysh will handle it itself.

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

	* sockopt.h: Define method-independent macro for callers of
	get_ifindex to use for cmsg length.

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

	* zebra.h: add MAX and MIN defines (eg for ospf6d)

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

	* sockopt.c: include sockopt.h
	  rename some of the _pktinfo_ functions to _ifindex, where that is
	  their purpose.
          (getsockopt_ipv6_pktinfo_ifindex) renamed to
	  getsockopt_ipv6_ifindex.
	  (setsockopt_ipv4_pktinfo) renamed to setsockopt_ipv4_ifindex
	  (setsockopt_pktinfo) update with previous and add comment re
	  AF_INET portability.
	  (setsockopt_ifindex) generic ifindex function ala
	  setsockopt_pktinfo.
	  (getsockopt_ipv4_pktinfo_ifindex) renamed to
	  getsockopt_ipv4_ifindex.
	  (getsockopt_ipv4_ifindex) rejiggling to reduce repeated
          ifdef/elses. pktinfo case forgot to set ifindex.
          (getsockopt_pktinfo_ifindex) renamed to 
          getsockopt_ifindex. update some calls to renamed functions.
        * sockopt.h: Update renamed exported functions
          Rename the CMSG_SIZE macros to IFINDEX.
          Guard IPv4 PKTINFO in a conditional define.

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

	* vty.c: (vty_serv_un) set unix vty socket to nonblocking
	  to prevent inadvertent blocking of daemons by use of
	  vtysh. TODO: disentangle manual paging from the buffer_write
	  path so that unix vty can use this path too and be reliable.
	  
2004-07-23  Greg Troxel  <gdt@poblano.ir.bbn.com>

	* sockopt.c (getsockopt_ipv4_pktinfo_ifindex): Make this compile
	on NetBSD, and add comments to make it less confusing.  Change the
	sense of the SUNOS_5 test to make parallel structure between the
	variables and the code.

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

	* sockopt.h: Add SOPT_SIZE_CMSG_PKTINFO{_IPV{4,6}} define, for
	  sizeof pktinfo as appropriate, to be used when allocating msg
	  buffers. export setsockopt_pktinfo() and
	  getsockopt_pktinfo_ifindex()
	* sockopt.c: (setsockopt_pktinfo_ifindex) new function to portably
	  set received ifindex sock option.
	  (getsockopt_pktinfo_ifindex) portably retrieve ifindex.
	  (getsockopt_cmsg_data) retrieve indicated control info from 
	  message header.
	  (getsockopt_ipv6_pktinfo_ifindex) ipv6 version of above.
	  (setsockopt_ipv4_pktinfo) v4 version
	  (setsockopt_pktinfo) the exported version
	  (getsockopt_ipv4_pktinfo_ifindex) v4 specific version
	  (getsockopt_pktinfo_ifindex) the exported version

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

	* sigevent.c: (quagga_signal_handler) add a global caught flag, set
	  the flags to a constant rather increment to be kinder. 
	  (quagga_sigevent_process) new function, to do core of what
	  quagga_signal_timer did. dont block signals at all as sig->caught
	  is volatile sig_atomic_t and should be safe to access from signal
	  and normal contexts. The signal blocking is unneeded paranoia, but
	  is left intact under an ifdef, should some platform require it.
	  Check global caught flag before iterating through array. 
	  (quagga_signal_timer) nearly everything moved to
	  quagga_sigevent_process. Left in under ifdef, in case some
	  platform could use a regular timer check for signals.
	* sigevent.h: quagga_sigevent_process declaration.
	* thread.c: (thread_fetch) check for signals at beginning of 
	  scheduler loop, check for signals if select returns EINTR.
	 
2004-07-13  Greg Troxel  <gdt@poblano.ir.bbn.com>

	* sigevent.c: Don't block SIGTRAP and SIGKILL.  Blocking SIGTRAP
	confuses gdb, at least on NetBSD 2.0_BETA, where the block
	succeeds.

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

	* Merge Kunihiro's 'show route-map' change and add 
	  compatibility aliases for route-map continue
	* jhash.{c,h}: New files. Bob Jenkins' public domain hashing 
	  function, as implemented in linux kernel by David Miller.

2004-07-09 Juris Kalnins <juris@mt.lv>

	* if.c: (if_cmp_func) fix for interface names where name is same,
	  but one has no number, eg "devtyp" and "devtyp0".
	  
2004-06-30  Greg Troxel  <gdt@poblano.ir.bbn.com>

	* Makefile.am: Make libzebra shared.

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

	* ChangeLog: fix my last update config.h -> zebra.h ;)
	* zebra.h: Fix gcc check.
	
2004-06-11 Sowmini Varadhan <sowmini.varadhan@sun.com>

	* filter.c: (access_list_remark_cmd) buffer_putstr doesnt need cast
	  to u_char. (ipv6_access_list_remark_cmd) ditto.
	  if.c: ditto
	* network.c: (readn/writen) pointer arg should be type u_char.
	* plist.c: needs to include stream.h, not declare stream functions
	  internally.
	  (various) Add static qualifier to internal functions.
	  (prefix_list_type_str) extraneous breaks in switch statement.
	  (ip_prefix_list_description_cmd) buffer_putstr doesnt need cast
	* stream.h: depends on plist.h and export stream_put_prefix
	* vty.c: (vty_<telnet option build functions>) should use 
	  unsigned char, telnet options are 0 -> 255.
	* zclient.c: various u_char<->char type cleanups.
	* zebra.h: Having to define CMSG_* can apply to more than just
	  BSDI_NRL. 
	  
2004-06-09 Paul Jakma <paul@dishone.st>

	* zebra.h: __attribute__ is a gcc'ism
	
2004-06-04 Paul Jakma <paul@dishone.st>

        * type mismatch fixes
        
2004-05-18 Hasso Tepper <hasso@estpak.ee>
	
	* pqueue.[c|h]: Added as part of ospf6d merge from Zebra repository.

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

	* zclient.c (zapi_ipv4_route) Follow Sowmini's lead and describe
	  message format.

2004-05-08 Sowmini Varadhan <sowmini.varadhan@sun.com>

	* zclient.c: (zapi_ipv4_add) collapsed into zapi_ipv4_route
	  (zapi_ipv4_delete) ditto.
	  (zapi_ipv4_route) add/delete a route by way of cmd arg.
	  (zapi_ipv6_add) collapsed into zapi_ipv6_route.
	  (zapi_ipv6_delete) ditto.
	  (zapi_ipv6_route) add/delete a route by way of cmd arg.
	  (zebra_interface_address_delete_read) collapsed into 
	  zebra_interface_address_read.
	  (zebra_interface_address_delete_read) ditto.
	  (zebra_interface_address_read) read address add/delete messages
	  by way of type argument. Describe command message format.
	  (zebra_interface_add_read) Unconditionally read new ifmtu6 field.
	  Describe command message format.
	  (zebra_interface_state_read) Unconditionally read new ifmtu6 field.
	  (zclient_redistribute_set) Collapsed into zclient_redistribute
	  (zclient_redistribute_unset) ditto
	  (zclient_redistribute) set/unset redistribution.
	  (zclient_redistribute_default_set) Collapsed into
	  zclient_redistribute_default.
	  (zclient_redistribute_default_unset) ditto.
	  (zclient_redistribute_default) Redistribute default set/unset.
	* zclient.h: delete zapi_ipv{4,6}_add, zapi_ipv{4,6}_delete. Add
	  zapi_ipv{4,6}_route. delete zclient_redistribute_set/unset. Add
	  zclient_redistribute. Ditto for
          zclient_redistribute_default_{set/unset}.
          
2004-05-08 Sowmini Varadhan <sowmini.varadhan@sun.com>

	* if.h: Add mtu6 field to struct interface, IPv6 MTU may differ
	  from IPv4, and Solaris treats the MTU's differently.
	  Add connected_add_by_prefix, for use by later patch.
	* if.c: (connected_add_by_prefix) Add prefix to connected list.
	  (if_flag_dump) Solaris: Dump IFF_IPv4/6 flag
	  (if_dump) Dump mtu6 flag, for HAVE_IPV6.
	* command.c: (sockunion_getsockname) use socklen_t for len.
	  (sockunion_getpeername) ditto.
	  	  
2004-04-21 Boris Kovalenko <boris@tagnet.ru>

	* daemon.c: (daemon) fix check for error return from setsid
	
2004-01-19 Paul Jakma <paul@dishone.st>

	* sigevent.{c,h}: New files, implement event handled signals.
	  see signal_init() in sigevent.h.
	  
2003-12-23  Vincent Jardin  <jardin@6wind.com>

	* {command.c, memory.c, vty.c, zebra.h}: Add isisd support

2003-12-22  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* vty.c (vty_use_backup_config): Don't free filenames before using
	them for unlink.

2003-08-20 Yasuhiro Ohara <yasu@sfc.wide.ad.jp>

	* command.c: Fix <cr> display problem for command line
	  description

2003-05-24 Anil Madhavapeddy

	* (sockunion.c): Incorrect bounds specified in sockunion_log()

2003-05-08 Sergiy Vyshnevetskiy <serg @ vostok.net>

	* vty.c: -A option

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

	* rip_routemap.c: sync daemon's route-map commands to have same
	syntax

2002-09-28  Yasuhiro Ohara <yasu@sfc.wide.ad.jp>

	* vty.c (vty_flush): One line more on vty.

2002-09-27  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* vector.c (vector_lookup): Add new function.

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

	* thread.c (timeval_adjust): Fix unconditional crush due to
	FreeBSD's select() system call timeval value check.

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

	* zebra-0.93 released.

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

	* if.c (ifc_pointopoint): Add ifc_pointopoint() accoding to Frank
	van Maarseveen's suggestion.

2002-06-18  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c: Change bcopy() to memcpy().

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

	* command.c (config_password): Fix host.password clear bug.
	Reported by Wang Jian <lark@linux.net.cn>.

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

	* thread.c (thread_should_yield): New function to check thread
	should yeild it's execution to other thread.  Suggested by: Rick
	Payne <rickp@ayrnetworks.com>

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

	* thread.c (thread_timer_cmp): Rewrite function.

	* hash.c: Add hash_get().  Change hash_pull() to hash_release().

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  Akihiro Mizutani <mizutani@dml.com>

	* prefix.c (netmask_str2prefix_str): Convert "1.1.0.0 255.255.0.0"
	string to "1.1.0.0/16".

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

	* filter.c (access_list_lookup): access_list_lookup's first
	argument is changed from address family to AFI.

	* plist.c: (prefix_list_lookup): Likewise.

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

	* plist.c: ge and le display order is changed.  Old compatible
	rule (len <= ge-value <= le-value) is removed.

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

	* prefix.h: Temporary fix for alignment of prefix problem.

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

	* prefix.h (struct prefix): Remove safi and padding field.
	(struct prefix_ipv4): Likewise.
	(struct prefix_ipv6): Likewise.
	(struct prefix_ls): Likewise.
	(struct prefix_rd): Likewise.

	* command.h (enum node_type): Preparation for BGP new config.

	* vty.c (vty_end_config): Likewise.

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

	* routemap.c (route_map_rule_delete): Call func_free when
	route-map rule is deleted.

2001-06-14  "Akihiro Mizutani" <mizutani@dml.com>

	* routemap.c (route_map_index_lookup): Prevent to use deny and
	permit for same route-map sequence.

2001-04-12  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_read_config): Fix warning.

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

	* command.c (IPV6_PREFIX_STR): Add '.' and '%' for IPv6 address
	strings.

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

	* zebra.h (_XPG4_2): Define _XPG4_2 and __EXTENSIONS__ for
	CMSG_FIRSTHDR.

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

	* zebra.h (struct in_pktinfo): structure in_pktinfo declaration.

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

	* memory.c (memory_list_lib): Add MTYPE_NEXTHOP for "show memory
	lib" member.

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

	* vty.c (vty_read_config): Revert check of integrate_default when
	VTYSH is defined.

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

	* vty.c (vty_read_config): Do not check integrate_default.  That
	should be used only by vtysh.

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

	* vty.c (vty_serv_un): Set umask 0077.
	(vty_read_config): Stat for vtysh Zebra.conf, if found startup and
	wait for boot configuration.

	* if.c (if_lookup_address): Make it smart implementation.

	* sockopt.c (setsockopt_multicast_ipv4): Set up a multicast socket
	options for IPv4 This is here so that people only have to do their
	OS multicast mess in one place rather than all through zebra,
	ospfd, and ripd .

2001-02-04  Akihiro Mizutani <mizutani@dml.com>

	* plist.c (vty_prefix_list_install): Even when argument is
	invalid, new memory is allocated.  Now memory allocation is done
	after argument check.

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

	* zebra-0.91 is released.

2001-01-31  Akihiro Mizutani <mizutani@dml.com>

	* vty.c (vty_login): Add vty login command.

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

	* vty.c (vty_reset): Close accept socket.

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

	* memory.h (enum): MTYPE_ATTR_TRANSIT is added for unknown transit
	attribute.

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

	* zclient.c (zebra_interface_address_add_read): Fetch interface
	address flag.
	(zebra_interface_address_delete_read): Likewise.

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

	* table.c (route_node_match_ipv4): Utility function for IPv4
	address lookup.
	(route_node_match_ipv6): Utility function for IPv4 address lookup.

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

	* if.c: Delete RIP_API part until new implementation comes out.

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

	* hash.h (struct Hash): Rename alloc to count.  Change type to
	unsigned long.

	* stream.c (stream_getc_from): New function.
	(stream_getw_from): Likewise.

	* zebra.h (ZEBRA_FLAG_STATIC): Add new flag for persistent route.

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

	* flap.c: File is removed.

	* flap.c: Likewise.

	* roken.h: Likewise.

	* buffer.c (buffer_new): Remove type option to buffer_new().

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

	* zclient.c (zapi_ipv4_delete): Remove OLD_RIB part.

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

	* zebra-0.90 is released.

	* command.c: Update Copyright year.

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

	* if.c (if_create): Register connected_free() function for
	deletion.
	(if_delete): Free connected information when the interface is
	deleted.
	(if_lookup_by_index): Fix argument type from int to unsigned int.
	(connected_add): Keep list in order if old info found, essential
	for repeatable operation in some daemons.

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

	* vty.c (vty_flush): When vty->statis is VTY_CLOSE do not add vty
	read thread.

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

	* filter.c (access_list_delete): Access-list name is not freed.

	* plist.c (prefix_list_delete): Prefix-list name is not freed.

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

	* zclient.c (zclient_start): Change to use UNIX domain
	socket for zebra communication.

	* vector.c (vector_init): vector_alloc and vector_data_alloc is
	removed.  All memory allocation count should be maintained by
	XMALLOC and XFREE macros.

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

	* zebra.h (ZEBRA_NEXTHOP_IFINDEX): Define ZEBRA_NEXTHOP_* values.

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

	* zebra.h (ZEBRA_ERR_RTEXIST): Make zebra error code to negative
	value.

2000-12-25  "Wataru Uno" <wataru@po.ntts.co.jp>

	* vty.c (vtysh_read): Don't allocate new buffer because buffer is
	allocated in vty_new ().

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

	* memory.h (enum): Add MTYPE_AS_FILTER_STR.

	* command.c (config_write_terminal): Display "end" at the end of
	configuration.

	* plist.c (vty_prefix_list_install): Use AF_INET to determine
	lenum length.

2000-12-13  "Wataru Uno" <wataru@po.ntts.co.jp>

	* buffer.c (buffer_flush_vty): If IOV_MAX defined in the System,
	then all lines write by IOV_MAX.

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

	* command.c (config_write_file): Robust method for writing
	configuration file and recover from backing up config file.

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

	* smux.c (smux_connect): More fail check.
	(smux_trap): When SMUX connection is not established, do nothing.

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

	* thread.c (thread_fetch): Execut event list first.  Old event
	list is renamed to ready list.  With this change, event thread is
	executed before any other thread.

	* thread.h (struct thread_master): Add ready list.

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

	* linklist.c (listnode_add_after): Add node right after the
	listnode pointer.

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

	* smux.h: Pass struct variable to WriteMethod.

2000-11-25  Frank van Maarseveen <F.vanMaarseveen@inter.NL.net>

	* if.c (if_lookup_address): When looking up interface with IP
	address, Sometimes multiple interfaces will match.  Now PtP
	interfaces prevail in such a case which seem the right thing to
	do: There will probably also be host routes which usually prevail
	over network routes.

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

	* smux.c (smux_trap): SMUX trap implementation.

2000-11-19  Akihiro Mizutani <mizutani@dml.com>

	* plist.c: Add automatic conversion function of an old rule. 
	ex.) 10.0.0.0/8 ge 8 -> 10.0.0.0/8 le 32

2000-11-16  Yon Uriarte <ukl2@rz.uni-karlsruhe.de>

	* zclient.c (zebra_interface_add_read): Read hardware address when
	hw_addr_len is greater than 0.

2000-11-15  Akihiro Mizutani <mizutani@dml.com>

	* plist.c: The rule of "len <= ge-value <= le-value" 
	was changed to "len < ge-value <= le-value".

2000-11-09  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* memory.[ch]: Added #define and functions for ospf6d.

	* log.[ch]: some platform says that the data of used va_list
	is undefined. Changed to hold list of va_list for each
	vsnprintf.

2000-11-07  Rick Payne <rickp@rossfell.co.uk>

	* memory.h (enum): Add MTYPE_COMMUNITY_REGEXP.

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

	* command.c (config_exit): Fix bug of missing break after case
	BGP_VPNV4_NODE.

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

	* vector.c (vector_unset): Check i is not nevative.

2000-10-24  Arkadiusz Miskiewicz <misiek@pld.org.pl>

	* smux.c (smux_sock): Set terminating '\0'.  Check address family.

	* vty.c (vty_serv_sock_addrinfo): Set terminating '\0'. Use
	gai_strerror.  Check address family.

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

	* smux.c: Use linklist rather than vector.
	(smux_getnext): A SMUX subagent has to behave as if it manages the
	whole SNMP MIB tree itself. It's the duty of the master agent to
	collect the best answer and return it to the manager. See RFC 1227
	chapter 3.1.6 for the glory details :-). ucd-snmp really behaves
	bad here as it actually might ask multiple times for the same
	GETNEXT request as it throws away the answer when it expects it in
	a different subtree and might come back later with the very same
	request.

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

	* command.c (cmd_init): Log related command are only installed for
	terminal mode.

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

	* Makefile.am (libzebra_a_SOURCES): Remove duplicated buffer.c.

	* zebra.h: Remove #warn directive.

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

	* keychain.c (keychain_init): Register "key chain" command to
	KEYCHAIN_NODE and KEYCHAIN_KEY_NODE.

	* vty.c (vty_end_config): Fix missing vty_cinfig_unlock for other
	CONFIG_NODE.

	* command.c (config_end): Likewise.

	* keychain.c (keychain_get): Key is sorted by it's identifier
	value.

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

	* linklist.c (list_delete_all_node): Call delete function if it is
	defined.

	* command.c (cmd_execute_command_strict): Add modification for
	vtysh.
	(cmd_execute_command_strict): Remove first argument cmdvec because
	it is global varibale in command.c.

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

	* command.c (cmd_init): Install
	copy_runningconfig_startupconfig_cmd only in terminal mode.

	* linklist.c (list_delete_node): Simplify the function.
	(listnode_lookup): Renamed from list_lookup_node.

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

	* stream.h: Undef stream_read and stream_write without
	parenthesis.

	* newlist.c: File removed.

	* newlist.h: Likewise.

	* linklist.c (list_new): Remove list_init().  To allocate new
	linked list, please use list_new().
	(listnode_add): Remove list_add_node().  To add new node to linked
	list, please use listnode_add().
	(list_delete_by_val): Revemove fucntion.

2000-10-16  Nobuaki Tanaka <nobby@po.ntts.co.jp>

	* table.c (route_table_free): Reimplement route_table_free().

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

	* keychain.c (keychain_get): Register key_delete_func to key
	list's delete function.  Use linklist.c instead of newlist.c.

2000-10-04  Akihiro Mizutani <mizutani@dml.com>

	* filter.c (access_list_remark): Add access-list's remark command.
	(no_access_list): "no access-list 100 permit any" error message
	bug is fixed.

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

	* memory.h (enum): Add MTYPE_SOCKUNION.

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

	* zebra-0.89 is released.

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

	* linklist.c (list_add_node_head): Delete unused function.
	(list_add_node_tail): Likewise.

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

	* stream.c (stream_read_unblock): Add new function for unblocking
	read.

2000-09-26  Jochen Friedrich <jochen@nwe.de>

	* smux.c (smux_register): Fix bug of can't register more than one
	MIB with SMUX.

2000-09-26  Makoto Otsuka <otsuka@inl.ntts.co.jp>

	* vty.c (vty_close): Fix memory leak of sb_buffer.
	(vty_new): Likewise.

2000-09-21  steve@Watt.COM (Steve Watt)

	* log.h: Do not declare zlog_priority[0] variable.

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

	* linklist.h (struct _list ): Add member cmp for compare function.
	(struct _list ): Member up is deleted

2000-09-12  David Lipovkov <dlipovkov@OpticalAccess.com>

	* if.c: Include RIP_API header when RIP API is enabled.

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

	* prefix.c (prefix_free): Siplify prefix_free().

	* keychain.c (key_match_for_accept): strncmp check bug is fixed.

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

	* zebra.h: Merge roken.h into zebra.h.

2000-09-05  Akihiro Mizutani <mizutani@dml.com>

	* routemap.c (route_map_init_vty): Install route-map command to
	RMAP_NODE.

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

	* thread.c (thread_get_id): Remove pthread related garbage.

	* command.h (struct host): Likewise.

	* zebra.h: Likewise.

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

	* command.h (node_type ): Add AAA node for authentication.

	* vty.c (vty_close): Do not close stdout.

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

	* vty.c (vty_init_vtysh): Added for vtysh.

	* distribute.c (districute_list_prefix_all): Interface independent
	filter can be set.
	(distribute_list_all): Likewise.
	(config_show_distribute): Display current distribute-list status
	for "show ip protocols".

2000-08-18  Akihiro Mizutani <mizutani@dml.com>

	* command.c (config_terminal_no_length): no terminal monitor ->
	terminal no monitor
	(cmd_init): Do not install service_terminal_length_cmd into
	ENABLE_NODE.

	* vty.c (terminal_no_monitor): no terminal length -> terminal no
	length.

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

	* zebra-0.88 is released.

2000-08-17  Magnus Ahltorp <ahltorp@nada.kth.se>

	* vty.h (struct vty ): Add iac_sb_in_progress and sb_buffer for
	better IAC handling.

	* vty.c (vty_telnet_option): Change telnet option handling.

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

	* zclient.c (zclient_redistribute_unset):  New function added.

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

	* zclient.c (zebra_interface_add_read): Change ifindex restore
	size from two octet to four.
	(zebra_interface_state_read): Likewise.
	(zebra_interface_address_add_read): Likewise.

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

	* vty.c (vty_event): Use vector_set_index() instead of
	vector_set().

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

	* zebra.h (ZEBRA_XXX_DISTANCE_DEFAULT): Define Default
	Administrative Distance of each protocol.

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

	* if.h (struct interface ): Add new member bandwidth to struct
	interface.

	* zclient.c (zebra_interface_add_read): Fetch bandwidth value.
	(zebra_interface_state_read): Likewise.

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

	* routemap.c (route_map_event_hook): New hook route_map_event_hook
	is added.  This hook is called when route-map is changed. The
	parameters passed to the hook are 'event' and 'route-map name'

	* routemap.h: Add prototype for route_map_event_hook().

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

	* zclient.c (zebra_ipv4_route): zebra_ipv4_route(),
	zebra_ipv4_add(), zebra_ipv4_delete() are removed.

	* routemap.c (route_map_empty): Add new function.
	(route_map_delete): Use route_map_index_delete() instead of
	route_map_index_free().
	(route_map_index_free): Function removed.

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

	* routemap.c (route_map_index_delete): Add check for route-map is
	empty or not.

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

	* zclient.c (zebra_ipv4_add): Change socket arguemnt with struct
	zclient.

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

	* zclient.h (struct zebra): Add obuf for output buffer.

	* if.c: Remove #ifdef NRL enclosing if_nametoindex() and
	if_indextoname().

2000-08-02  David Lipovkov <davidl@nbase.co.il>

	* if.h (IF_PSEUDO_UNSET): IF_PSEUDO related macro added.
	(IF_UNKNOWN_SET): IF_UNKNOWN related macro deleted.

	* if.c (interface_pseudo): Add "pseudo" command to interface node.
	(no_interface_pseudo): Add "no pseudo" command to interface node.

	* zclient.c (zebra_interface_add_read): Set pseudo flag when it is
	send from zebra.

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

	* zebra.h (ZEBRA_IPV4_NEXTHOP_LOOKUP): Add new message.
	(ZEBRA_IPV6_NEXTHOP_LOOKUP): Likewise.

	* vty.c (vty_serv_un): Use AF_UNIX for backward compatibility.

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

	* vty.c: Use vector for VTY server thread listing instead of
	single value.

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

	* keychain.c (no_key_chain): "no key chain WORD" command is added.

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

	* command.c (config_from_file): If command fail in
	KEYCHAIN_KEY_NODE, down to KEYCHAIN_NODE.

	* vty.h (struct vty ): Add index_sub member.

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

	* if.c: Help strings updates.

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

	* command.c (no_config_enable_password): Add "no enable password"
	command.
	(config_write_host): Display password string.

	* routemap.c (route_map_delete_match): Add support for delete
	match without argument.
	(route_map_delete_set): Likewise.

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

	* command.h (node_type ): Change KEYCHAIN_NODE and
	KEYCHAIN_KEY_NODE place just before INTERFACE_NODE.

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

	* smux.c (config_write_smux): Fixes the option to override OID and
	password for SMUX.

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

	* command.h (node_type ): Add SMUX_NODE for SMUX configuration.

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

	* command.c: Sort descvec command's help.

	* vty.c (vty_describe_command): Display '<cr>' at the end of
	descriptions.

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

	* command.c (cmd_ipv6_match), (cmd_ipv6_prefix_match):  Fix bug
	treatment of double colon.

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

	* zclient.h: Add zclient_redistribute_default_{set,unset}().

	* keychain.c: New file for authentication key management.
	* keychain.h: Likewise.
	
	* tcpfilter.c: New file for TCP/UDP base filtering using ipfw or
	ipchains.
	* tcpfilter.h: Likewise.
	
	* flap.h: New file for route flap dampening.
	* flap.c: Likewise.

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

	* filter.c (struct filter): Add exact flag.
	(access_list): Add exact-match command.
	(ipv6_access_list): Add exact-match command.
	
2000-07-03  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* zebra.h (ZEBRA_REDISTRIBUTE_DEFAULT_ADD): New message for
	request default route.

2000-07-01  Hideaki YOSHIFUJI ($B5HF#1QL@(B) <yoshfuji@ecei.tohoku.ac.jp>

	* smux.c: Add IPv6 smux connection code.

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

	* vty.c (vty_complete_command): To cooperate readline library,
	returned string is newly allocated.  So some match function case
	need, free of memory.

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

	* distribute.c: Fix help strings.

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

	* command.c (cmd_complete_command): Add check for vector_slot
	(vline, index) is not NULL when calculating lcd.
	(cmd_entry_function): First check variable arguemnt to prevent it
	from completion.

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

	* vty.h (struct vty ): Add output_count member for displaying
	output route count.  Remove arugment arg from output_func because
	the value is passed by vty argument.  Change output to output_rn.
	Add output_clean function pointer member.  Add output_type member.

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

	* command.c (show_startup_config): Add "show startup-config"
	command.

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

	* filter.c: Fix help strings.

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

	* prefix.h (struct prefix_rd): New prefix structure for routing
	distinguisher.
	(struct prefix): Add padding to every prefix structure.


	* routemap.c (route_map_add_match): When completely same match
	statement exists, don't duplicate it.

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

	* routemap.c: Change NAME to WORD.

	* plist.c: Fix help strings.

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

	* routemap.c: Fix route-map help strings.

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

	* command.c (cmd_filter_by_completion): Fix CMD_VARARG treatment
	to filter other non vararg commands.

	* routemap.c (route_map_init_vty): Use install_default() for
	install common commands into route-map node..

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

	* command.h (OSPF_STR):  Macro added.

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

	* command.c (cmd_complete_command): LCD completion must not modify
	installed command string.

	* plist.c (ipv6_prefix_list): Fix wrong syntax definition.  Change
	X:X::X:X to X:X::X:X/M.

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

	* vty.c (show_history):  New defun added.

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

	* command.h (CMD_COMPLETE_LIST_MATCH): New define for completion
	list.  CMD_COMPLETE_MATCH is used for LCD completion.

	* vty.c (vty_complete_command): Matched string's LCD is completed.

	* command.c (cmd_lcd): New function for calculate LCD of matched
	strings.

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

	* command.c (install_default): config_write_terminal_cmd,
	config_write_file_cmd, config_write_memory_cmd are added to
	default node.

	* memory.c (memory_init): Divide show memory command into each
	sort.

	* command.c (cmd_init): config_write_terminal_cmd,
	config_write_file_cmd, config_write_memory_cmd are added to
	CONFIG_NODE.

	* routemap.c (route_map_index_free): New function.
	(no_route_map_all): New DEFUN for "no route-map NAME".

	* filter.c (no_access_list_all): New DEFUN for delete access-list
	with NAME.
	(no_ipv6_access_list_all): Likewise.

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

	* plist.c: Change IPV6_PREFIX to X:X::X:X.  When "any" is
	specified, user can not use "ge" and "le" statement.

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

	* routemap.c (route_map_add_set): Fix bug of next pointer missing.

	* table.c (route_table_free): Like wise.

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

	* vty.c (vty_stop_input): Set history pointer to the latest one.

	* vty.c (vty_hist_add): Do not add command line history when input
	is as same as previous one.

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

	* memory.h (enum): Add MTYPE_ECOMMUNITY and MTYPE_ECOMMUNITY_VAL.

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

	* command.h (node_type ): Add BGP_VPNV4_NODE.

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

	* vty.c (vtysh_accept): Add cast of struct sockaddr * to bind
	argument.  Reported by: Vesselin Mladenov <mladenov@netbg.com>.

	* filter.c (ipv6_access_list): Add IPv6 prefix example instead of
	IPv4 example.  Reported by: Love <lha@s3.kth.se>.

	* command.c (cmd_complete_command): Make it sure last element of
	matchvec is NULL.  This fix problem which cause crush in
	vty_complete_command().  Reported by: JINMEI Tatuya
	<jinmei@isl.rdc.toshiba.co.jp>.

2000-04-28  Love <lha@s3.kth.se>

	* prefix.h (struct prefix): Add padding.

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

	* command.c (show_version): Update copyright year.

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

	* routemap.c (route_map_apply): When map is NULL, return deny.

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

	* filter.c (access_list_apply): When access is NULL, return deny.

	* plist.c (prefix_list_apply): When plist is NULL, return deny.

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

	* command.h (node_type ): Change RDISC_NODE to IRDP_NODE.

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

	* filter.[ch] (access_list_add_hook), (access_list_delete_hook):
	Add argument for hook function to give struct access_list *.

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

	* plist.c (prefix_list_entry_match): In case of le nor ge is
	specified, exact match is performed.
	(prefix_list_entry_match): Add any entry matching check.

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

	* vty.c (exec_timeout): Separate timeout setting to minutes and
	seconds.
	(no_exec_timeout): Add "no exec-timeout" command.

	* vty.h (VTY_TIMEOUT_DEFAULT): Change default value from 300 to
	600.

2000-03-31  Jochen Friedrich <jochen@scram.de>

	* smux.h (SMUX_CLOSE): The SMUX_CLOSE PDU is implicit integer, so
	it is a primitive encoding and not constructed.

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

	* memory.[ch] (enum): Add MTYPE_OSPF_EXTERNAL_INFO.

2000-03-26  Love <lha@s3.kth.se>

	* zclient.c (zclient_read): Add nbytes size check for
	ZEBRA_HEADER_SIZE.  Check return value of steam_read ().

2000-03-26  Rick Payne <rickp@rossfell.co.uk>

	* routemap.c: Add flexible route-map commands such as on-match
	next, on-match goto N.

	* routemap.h: Likewise

2000-03-23  Adrian Bool <aid@u.net.uk>

	* command.c (config_log_trap): Add new command "log trap
	PRIORITY".

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

	* memory.c (struct memory_list): Add Link List and Link Node
	to view.
	
	* memory.h (enum): Remove MTYPE_OSPF_EXTERNAL_ROUTE.
	
2000-01-20  Hideto Yamakawa <hideto.yamakawa@soliton.co.jp>

	* str.c (snprintf): Fix bug of calling sprintf instead of
	vsprintf.

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

	* memory.h (enum): Add MTYPE_RIP_PEER.

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

	* memory.h (enum): Add MTYPE_OSPF_CRYPT_KEY.

2000-01-15  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.h (node_type ): Add MASC_NODE for masc.

2000-01-09  Wang Jianliang <wangjl@soim.net>

	* routemap.c (route_map_index_add): When route_map_index is not
	empty and insert new item at the head, it can cause core dump.
	Fix "if (index == map->head)" to "if (point == map->head).
	(route_map_add_set): If there is an old set command, override old
	set command with new one.
	(route_map_index_delete): Use while() instead of for for() for
	logical correctness.

1999-12-26  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* memory.h (enum): Add MTYPE_BGP_STATIC.

1999-12-23  Alex Zinin <zinin@amt.ru>
	* zebra.h, zclient.*: dynamic int up/down message
	support

1999-12-10  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* thread.c (thread_cancel_event): Add a function for clean up
	events.

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

	* dropline.c: Delete file.
	dropline.h: Linewise.	

1999-12-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* filter.c (access_list_filter_delete): Wrong pointer
	access->master was pointed out after access is freed.  I store
	master value at the beginning of the function.

1999-12-08  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (exec_timeout): Change of VTY timeout affect to current
	VTY connection.
	(vty_accept): Instead of immediate exit() return -1.

1999-12-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_configure_lock): Configuration lock function added.
	Only one VTY can use CONFI_NODE at the same time.

	* log.c: Delete zvlog_* functions.  Now zlog_* does the same
	thing.

	* log.c (log_init): Function removed.
	(log_close): Likewise.
	(log_flush): Likewise.
	(log_open): Likewise.

	* vty.c (terminal_monitor): Add new command.
	(no_terminal_monitor): Likewise.

	* log.c (old_log): Function removed.
	(old_log2): Likewise.
	(old_log_warn): Likewise.

1999-12-04  Toshiaki Takada  <takada@zebra.org>

	* command.c (cmd_ipv6_match): New function added.
	(cmd_ipv6_prefix_match): Likewise.
	
1999-12-04  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c (cmd_ipv6_match): 

	* table.c: Delete #ifdef HAVE_MBGPV4.

	* prefix.h (struct prefix): Add safi member.
	(struct prefix_ipv4): Likewise.
	(struct prefix_ipv6): Likewise.

1999-12-04  Rumen Svobodnikov <rumen@linux.tu-varna.acad.bg>

	* memory.c (struct mstat): Revert to support MEMORY_LOG.

1999-11-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h: Bump up to 0.81c for testing new kernel codes.

1999-11-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* thread.h (struct thread): Pthread support is disabled all
	platform.

1999-11-21  Michael Handler <handler@sub-rosa.com>

	* Include <limits.h> and <strings.h> under SUNOS_5.

1999-11-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* sockunion.c (in6addr_cmp): Enclosed by #define HAVE_IPV6
1999-11-13  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.h (node_type ): Add BGP_IPV4_NODE and BGP_IPV6_NODE.

1999-11-12  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c (disable): Add `disable' command.

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

	* plist.c (vty_prefix_list_install): Add any check.

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

	* command.h (node_type ): Add DUMP_NODE.

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

	* smux.c: Change default SMUX oid to compatible with gated.

1999-10-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if_rmap.c: New file added.

	* if_rmap.h: New file added.

1999-10-29  Alex Zinin  <zinin@amt.ru>

	* hash.c: add hash_free() function

1999-10-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* hash.c (hash_clean): Add clean function.

	* plist.c (prefix_list_reset): Add reset function.

	* filter.c (access_list_reset): Add reset function.

1999-10-17  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* client.c: Merged with zclient.c.
	* client.h: Merged with zclient.h.

1999-10-15  Jordan Mendelson <jordy@wserv.com>

	* md5.c: Imported from GNU C Library.
	* md5-gnu.h: Likewise.

1999-10-15  Jochen Friedrich <jochen@scram.de>

	* smux.c (smux_getresp_send): SMUX_GETRSP codes improvement.

1999-10-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* smux.h: New file added.

	* snmp.c: Rename to smux.c.

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

	* command.c (cmd_execute_command_strict): Filter ambious commands.
	(cmd_filter_by_string): Change to return enum match_type.

1999-10-01  Toshiaki Takada  <takada@zebra.org>

	* vty.c (vty_describe_fold): New function which does VTY
	description line fold.
	* vty.c (vty_describe_command): Set description column.

1999-09-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* plist.c (prefix_list_init_ipv4): VTY user interface is improved.

1999-09-26  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c (cmd_filter_by_string): Fix bug of CMD_IPV4 and
	CMD_IPV4_PREFIX check.  Both return type must be exact_match.

1999-09-24  Toshiaki Takada  <takada@zebra.org>

	* command.c (cmd_filter_by_completion),
	(is_cmd_ambiguous): Check IPv4 address, IPv4 prefix and range 
	parameter matches range.

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

	* routemap.c (route_map_apply): Returm RM_DENYMATCH when no match
	is performed.

1999-09-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_read): Control-C stop VTY_MORE mode.

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

	* command.h (node_type ): Add ACCESS_IPV6_NODE and
	PREFIX_IPV6_NODE.

	* distribute.h: New file added.

	* command.h (node_type ): Delete DISTRIBUTE_NODE.

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

	* vty.c (vty_terminate_all): New function added for reload
	support.

1999-09-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* memory.h (enum): Add new type MTYPE_OSPF_EXTERNAL_ROUTE.

1999-08-31  Janos Farkas <chexum@shadow.banki.hu>

	* vty.c (vty_read): Handle also 0x7f (alt-backspace), just like
	esc-ctrl-h (delete word backwards).

1999-08-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.h: Add if_nametoindex for NRL.

1999-08-23  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.c (if_create): New function.

1999-08-22  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* snmp.c: New file.

1999-08-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* stream.c (stream_put): stream_memcpy () is changed to stream_put
	().  stream_get () is added.

1999-08-18  Toshiaki Takada  <takada@zebra.org>

	* memory.h (enum): Add MTYPE_OSPF_LSA_DATA.
	
1999-08-18  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* table.c (route_table_finish): add function frees table.

1999-08-12  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* memory.h (enum): Add MTYPE_RTADV_PREFIX.

1999-08-11  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.h (struct interface ): hw_address, hw_address_len added.

1999-08-10  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.h (struct interface ): Change structure member if_data to
	info, index to ifindex.

1999-08-08  Rick Payne <rickp@rossfell.co.uk>

	* routemap.c: Multi protocol route-map modification.

	* routemap.c (route_map_apply): Route match process bug is fixed.

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

	* thread.c (thread_fetch): When signal comes, goto retry point.

1999-08-04  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* Makefile.am: Add sockopt.c and sockopt.h
	* sockopt.c: New file.
	* sockopt.h: New file.
	
1999-08-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h (ZEBRA_VERSION): Release zebra-0.75

1999-08-01  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* memory.h (enum): Add MTYPE_RIPNG_AGGREGATE.

1999-07-31  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* sockunion.h: Add sockunion_getpeername ().

1999-07-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h: Release zebra-0.74

1999-07-26  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.h (struct host): Delete lines from struct host.  Add
	lines to struct vty.

	* command.c: Delete `lines LINES'.  Terminal display line settings
	should be done by `terminal length' command.

1999-07-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* memory.h (enum): MTYPE_OSPF_PATH are added.

1999-07-22  Toshiaki Takada  <takada@zebra.org>

	* memory.h (enum): MTYPE_OSPF_NEXTHOP is added.

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

	* linklist.c (list_add_node_prev), (list_add_node_next),
	(list_add_list): New function added.

	* table.c (route_table_free): New function added.
	
1999-07-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* plist.c (config_write_prefix): Set write flag when configuration
	is written.

1999-07-15  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp> 

	* prefix.c : prefix_cmp() added. change apply_mask() to
	apply_mask_ipv4(), and new apply_mask() added.

1999-07-14  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* prefix.c (prefix2str): append prefixlen.

1999-07-13  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c (config_terminal): Change "config terminal" to
	"configure terminal".  Reported by Georg Hitsch
	<georg@atnet.at>.
	(config_terminal_length): `terminal length <0-512>' is added.  At
	this moment this command is only usef for vty interface.
	Suggested by Georg Hitsch <georg@atnet.at>.

1999-07-12  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* routemap.c (rulecmp): Add wrapper function of strcmp.

1999-07-08  Rick Payne <rickp@rossfell.co.uk>

	* sockunion.c (inet_aton): Fix bug of inet_aton.

1999-07-08  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h (ZEBRA_VERSION): Start zebra-0.73

1999-07-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h: Bump up to 0.72.

1999-07-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c (install_default): New function for install default
	commands to the node.

	* memory.h (enum): MTYPE_NEXTHOP is added.

1999-07-01    <kunihiro@zebra.org>

	* command.c (no_banner_motd): `no banner motd' command added.

1999-06-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* regex.c: Update to glibc-2.1.1's posix/regex.c

	* regex-gnu.h: Update to glibc-2.1.1's posix/regex.h

	* prefix.h (IPV4_ADDR_SAME): Macro added.
	(IPV6_ADDR_SAME): Likewise.

1999-06-29  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* memory.h (enum): Add MTYPE_OSPF_VERTEX

	* version.h: Bump up to 0.71.

	* vty.c (vty_serv_sock_addrinfo): Use addrinfo function to bind
	VTY socket when IPv6 is enabled.

1999-06-28  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_serv_sock): Change vty_serv_sock determine which
	address family to bind.

	* command.c: Add quit command.

1999-06-26  NOGUCHI kay <kay@dti.ad.jp>

	* vty.c (vty_read_config): Fix bug of configuration file path
	detection.

1999-06-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h: Bump up to 0.70.

1999-06-17  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* buffer.h (GETL): Remove GETL macro.

	* version.h: Bump up to 0.69.

1999-06-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.c (connected_add): Commented out connected_log.

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

	* command.h (struct cmd_element ): strvec and descvec is combined
	into newstrvec.

	* command.c (desc_make): Function removed.
	(desc_next): Function removed.

	* command.h (struct cmd_element ): docvec is removed from struct
	cmd_element.

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

	* command.c (cmd_execute_command): Remove command NULL check.

	* command.h (struct cmd_element ): Add newstrvec entry to struct
	cmd_element.
	(DEFUN2): DEFUN2 macro is removed.  DEFUN is extended to support
	(a|b|c) statement.
	(DESC): DESC macro is removed.

	* vty.c (vty_complete_command): When return value is
	CMD_ERR_NO_MATCH, don't display error message.

1999-06-08  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* table.c (route_next_until): New function.

	* version.h: Bump up to 0.68.

1999-06-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_close): Free vty->buf when vty is closed.

	* memory.h (enum): Add MTYPE_COMMUNITY_ENTRY and
	MTYPE_COMMUNITY_LIST.

	* vty.h (struct vty ): Change buf from static length buffer to
	variable length buffer.

	* vty.c (vty_ensure): New function added.
	
1999-06-04  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.h (node_type ): Add COMMUNITY_LIST_NODE.

	* command.c (config_enable_password): Freeing host.enable bug is
	fixed.
	(config_enable_password): Add argc count check.

1999-05-31  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h: Bump up to 0.67.

1999-05-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c (zencrypt): New function for encrypt password.

	* command.h (struct host): Add password_encrypt and
	enable_encrypt.

1999-05-30  Jochen Friedrich <jochen@scram.de>

	* command.h (struct host): New member encrypt is added for
	encrypted password.

1999-05-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c: Remove all_digit_check function.  Instead use all_digit.

	* prefix.c (all_digit): New function for checking string is made
	from digit character.

1999-05-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* Makefile.am (libzebra_a_SOURCES): Add zclient.c.
	(noinst_HEADERS): Add zclient.h

	* zclient.[ch]: New file for zebra client routine.

	* memory.h (enum): Add MTYPE_ZEBRA.

1999-05-19  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h (ZEBRA_VERSION): Update to 0.66.

1999-05-15  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* buffer.h (GETC,GETW): Macro deleted.

1999-05-15  Carlos Alberto Barcenilla <barce@frlp.utn.edu.ar>

	* prefix.h (IPV4_NET0, IPV4_NET127): Macro added.

1999-05-15  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (service_advanced_vty): New command added.
	(no_service_advanced_vty): Likewise.

1999-05-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_auth): If advanced flag is set and enable password is
	not set, directly login to the ENABLE_NODE.  This feature is
	originally designed and implemented by Stephen R. van den Berg
	<srb@cuci.nl>.

	* command.h (host): Add advanced flag to struct host for advanced
	vty terminal interface.

	* version.h (ZEBRA_VERSION): Update to 0.65 for next beta release.

1999-05-14  Stephen R. van den Berg <srb@cuci.nl>

	* command.h (node_type ): Add TABLE_NODE.
	
	* vty.c (vty_telnet_option): Check host.lines value.

	* command.c (config_lines): DEFUN for 'lines LINES' command.

	* zebra.h: Include <sys/utsname.h> for uname().
	(RT_TABLE_MAIN): Defined as 0 if OS does not support multiple
	routing table.

	* vty.c (vty_auth): Directly login to the ENABLE_NODE when enable
	password is not set.
	(vty_prompt): Get machine's hostname when hostname is not set.

1999-05-11  James Willard <james@whispering.org>

	* command.c (config_exit): Close connection when `exit' command is
	executed at ENABLE_NODE.

1999-05-10  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_stop_input): `C-c' key change node to ENABLE_NODE.

	* command.c (cmd_execute_command_strict): Matched command size
	check added.
	(cmd_make_desc_line): New function for DEFUN2.

	* command.h (struct cmd_element ): Add descsize.

1999-05-09  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.h (struct cmd_element ): Remame descvec to docvec.
	(struct cmd_element ): Add descvec for new description system.

	* command.c (desc_make): Check cmd->descvec.

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

	* memory.h (enum): Add MTYPE_CLUSTER, MTYPE_CLUSTER_VAL.

1999-05-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h (ZEBRA_VERSION): Bump up to 0.64 for next beta
	release.

1999-05-04  Yasuhiro Ohara <yasu@sfc.wide.ad.jp>

	* linklist.c (list_delete_all_node): bug fix. 
	previous code loses current position when node
	is deleted.

1999-05-03  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.h (DESC): Macro added.
	(struct cmd_element2): Delete struct cmd_element2.

	* plist.c (prefix_list): Sequential number option check is added.

1999-05-02  Yasuhiro Ohara <yasu@sfc.wide.ad.jp>

	* log.c (zvlog_{debug,info,notice,warn,err}): have been
	added. now we can log both console and file, but still 
	need some fix about config write.

1999-05-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* log.c (zvlog_debug): Fix yasu's change.

1999-05-01  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* plist.c (prefix_list): Fix typo.

1999-04-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* Set version to 0.63 for first beta package.

1999-04-27  Carlos Barcenilla <barce@frlp.utn.edu.ar>

	* prefix.c (str2prefix_ipv4): Fix prefix length check.
	(str2prefix_ipv6): Likewise.

1999-04-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* memory.h (enum): Add MTPYE_PREFIX_LIST and
	MTYPE_PREFIX_LIST_ENTRY.

	* command.h (node_type ): Add PREFIX_NODE.

1999-04-25  Carlos Barcenilla <barce@frlp.utn.edu.ar>

	* command.c: ALIAS (config_write_memory_cmd) and ALIAS
	(copy_runningconfig_startupconfig_cmd) is added.

	* table.c (route_node_lookup): Unused match variable deletion.

1999-04-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* Makefile.am (libzebra_a_SOURCES): plist.c added.
	(noinst_HEADERS): plist.h added.

	* plist.c, plist.h: New file added.

	* memory.h (enum): Rename MTYPE_AS_PASN to MTYPE_AS_STR.
	* memory.c: Likewise.

1999-04-19  Carlos Alberto Barcenilla <barce@frlp.utn.edu.ar>

	* command.c (show_version): `show version' command added.

1999-04-19  Kunihiro Ishiguro <kunihiro@zebra.org>

	* prefix.c (str2prefix_ipv6): Prefix length overflow check.

1999-04-19  Carlos Alberto Barcenilla <barce@frlp.utn.edu.ar>

	* prefix.c (str2prefix_ipv4): Prefix length overflow check.

1999-04-19  Alex Bligh <amb@gxn.net>

	* prefix.c (sockunion2hostprefix): Function added.
	(sockunion2prefix): Address family was not set.  Now it is set.
	
	* vty.c: VTY access-class command is added.

1999-04-18  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* memory.c: Change xmalloc to zmalloc.  xcalloc, xrealloc, xfree,
	xstrdup are likewise.

1999-04-18  Yasuhiro Ohara <yasu@sfc.wide.ad.jp>

	* thread.c: Add thread_execute for other routing daemon.
	OSPF tasks need to be generated by "sheduled" and "executed".

1999-04-13  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* buffer.c: Rewrite buffer_write and buffer_flush related
	functions for fixing bugs.  Reason of the problem and fix is
	suggested by Alex Bligh <amb@gxn.net>.
	
1999-04-12  Alex Bligh <amb@gxn.net>

	* command.c (cmd_entry_function_descr): Added for variable
	argument help display.

1999-04-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* regex.c, regex-gnu.h: Imported from GNU sed-3.02 distribution.

1999-03-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* stream.c: stream_fifo_free bug is fixed.

1999-03-19  Toshiaki Takada  <takada@zebra.org>

	* stream.c (stream_strncpy): Added for getting any length bytes
	from stream.

1999-03-16  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* version.h (ZEBRA_BUG_ADDRESS): New macro added.

1999-03-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* buffer.c (buffer_flush_window): If ep is same as buffer's size
	length and lp is overrun one octet.

1999-03-13  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.h: add VTY's timeout function.

1999-03-05    <kunihiro@zebra.org>

	* command.h (node_type ): Add OSPF6_node.

1999-03-04  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* zebra.h: Check HAVE_SYS_SELECT_H when include <sys/select.h>

1999-03-03  Jeroen Ruigrok/Asmodai <asmodai@wxs.nl>

	* zebra.h: Include <net/if_var.h> if it exists.

1999-03-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* getopt.[ch],getopt1.c: Sync with glibc-2.1.

	* log.c (zlog): Tempolary ZLOG_STDOUT feature added.

	* command.h: Include vector.h and vty.h

1999-02-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* routemap.h (struct route_map_rule_cmd): Add prefix arguemnt.

	* routemap.c (route_map_apply_index): Add prefix argument.
	(route_map_apply): Likewise.

	* memory.h (enum): Add MTYPE_ROUTE_MAP_COMPILED.

	* stream.c: Add stream_fifo related functions.

1999-02-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* daemon.c: Return integer value.  File descriptor close is added.

	* memory.h (enum): add MTYPE_OSPF_LSA.

1999-02-23  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* rsh.c: Remove empty file.

1999-02-22    <kunihiro@zebra.org>

	* routemap.c: Add add/delete hook to route_map_master.

1999-02-19  Peter Galbavy  <Peter.Galbavy@knowledge.com>

	* str.[ch] added to supply wrappers for snprintf(), strlcat() and
	strlcpy on system without these.

1999-02-18  Peter Galbavy  <Peter.Galbavy@knowledge.com>

	* syslog support added

1999-02-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* filter.c (access_list_add_hook): added for hook function management.
	* filter.c (access_list_delete_hook): Likewise.

1999-01-19  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* stream.c: New file.
	* stream.h: New file.
	* Divide stream related fucntions from buffer.[ch] into stream.[ch].
	
1999-01-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* memory.h (enum): add MTYPE_STREAM, MTYPE_STREAM_DATA

	* buffer.c (stream_new): Set MTYPE_STREAM to XMALLOC argument.

1998-12-23  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* routemap.c: route_map_index_delete() added.

1998-12-22  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* buffer.c (buffer_empty): check cp instead of sp.

1998-12-17  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* radix.[ch]: Deleted.

1998-12-15  Magnus Ahltorp <map@stacken.kth.se>

	* buffer.c: Prototype fixes.
	* prefix.c: Likewise.
	* sockunion.c: Likewise.
	* sockunion.h: Likewise.

1998-12-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_read): DELETE key works as vty_delete_char.

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

	* log.c (time_print): chane %y to %Y.

1998-12-10  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* distribute.c: new file.

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

	* filter.c: Remove all of struct prefix_{ipv4,ipv6} and add
	complete support of IPv6 access list.

	* command.c (config_write_element): function delete.
	(config_write_host): function add.  password and enable password
	isn't printed to vty interface.

1998-12-08  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* filter.c: Change prefix_ipv4 to prefix and add support of
	prefix_ipv6 filtering.

1998-12-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* Makefile.am (INCLUDES): add @INCLUDES@ for Linux IPv6 inet6-apps
	header includes.

1998-12-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* log.c (log_flush): fix function name typo.

1998-12-04  Yasuhiro Ohara <yasu@sfc.wide.ad.jp>

	* memory.h: OSPF memory type is added.

1998-11-15  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c (sort_node): add sort_node() for pretty printing of
	command on vty interface.
	(config_password): delete the restriction of charaster of password
	string.

1998-09-05  Kunihiro Ishiguro  <kunihiro@debian.zebra.org>

	* prefix.c (prefix_ipv4_any): add prefix_ipv4_any().

1998-08-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* network.h: New file.

1998-08-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_will_echo): function name change from vty_off_echo.

1998-08-18  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* buffer.h: add PUTC,PUTW,PUTL macros.

1998-07-22  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* route.[ch]: renamed to prefix.[ch]

1998-06-09  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* prefix_in, prefix_in6 is replaced by prefix_ipv4, prefix_ipv6.

	* Makefile.am: @INCLUDES@ is deleted from INCLUDES.

1998-06-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* host.[ch]: merged with command.[ch]

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

	* Makefile.am (libzebra_a_SOURCES): add route.c to libzebra_a_SOURCES.

1998-05-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* route.c (str2prefix): str2prefix () is gone.

1998-05-03  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_read_config): change CONDIR to SYSCONFDIR.

	* .cvsignore: add file.

	* memory.c (xerror): add arguent `type' and `size'.

	* socket.c: deleted.

1998-05-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vector.c: malloc,free,realloc -> XMALLOC,XFREE,XREALLOC.
	* linklist.c: same as above.

1998-04-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* filter.[ch]: added.

1998-04-01  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (config_who): return CMD_SUCCESS

1998-04-01  Jochen Friedrich <jochen@scram.de>

	* table.c (route_dump_node): route_dump_node is IPv6 specific
	function so move #ifdef to the end of route_dump_node ().

1998-03-05  "Hannes R. Boehm" <hannes@boehm.org>

	* if.c: DEFUN(interface_desc) added.

1998-03-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.c: separated from ripd/rip_interface.c

1998-03-04  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* thread.[ch] : added.

1998-02-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_delete_char): fix size bug.
	(vty_backward_pure_word): function added.
	(vty_read): ESC + 'f' perform vty_forward_word.
	(vty_read): ESC + 'b' perform vty_backward_word.

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

	* radix.c (radix_lookup_rt): add mask check.
	(radix_delete_duproute): add mask check.

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

	* command.c (config_write_file): fix vty -> file_vty.

1998-02-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c (cmd_filter_ambiguous): add complex type treatment.

1998-02-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c (vty_time_print): function added.
	(vty_complete_command): now [...] element isn't shown by completion.

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

	* command.c : change from cmd_install_node() to install_node().

1998-01-16  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* route.[ch]: struct rt{} is replaced by struct prefix{}.

1998-01-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c (cmd_execute_command): check command length.

	* timer.c (zebra_timer_set): add zebra_timer_set.

1998-01-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.h (node_type ): add ZEBRA_NODE.

	* command.c (config_exit): add RIP_NODE.
	(config_write_file): add RIP_NODE.

1998-01-04  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* print_version.c (print_version): Now Copyright is 1996-1998.

	* sockunion.c (sockunion_log): moved from ../zebra/route.c

1997-12-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* host.c (config_logfile): change 'log PATH' to 'logfile PATH'.

	* sockunion.c (sockunion_sameprefix): add same prefix for
	sockunion.

1997-12-29  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* radix.[ch] : are moved from ../zebra directroy.
	
	* command.c (config_from_file): if command execution failed down
	level to CONFIG_NODE.

	* host.c: config_log function which enable 'log FILENAME' command.

1997-12-23  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* vty.c: add vty_transpose_chars ().  Now you can use '^T' to
	transpose character.

	* command.c: cmd_cmdsize add, this is useful to check incomplete
	command.

1997-12-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* fd.h: add family for address family

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

	* command.o
	* vty.o
	* host.o    is moved from ../zebra

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

	* make library directory.

