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

	* sockunion.c: ifdef out various places that converted
	  v4mapped sockets to pure v4. Doesn't seem necessary at all,
	  presumably a workaround for now historical inet_ntop bugs (?)

2008-07-21 Michael H. Warfield <mhw@wittsend.com>
           YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>

	* sockopt.{c,h}: (sockopt_tcp_signature) Add TCP-MD5SIG support.

2008-06-07 Paul Jakma <paul@jakma.org>

	* stream.{c,h}: (stream_{put,write}) add const qualifier to source
	  argument. Change u_char to void *.

2008-06-02 Denis Ovsienko

	* workqueue.[ch]: completely drop WQ_AIM_HEAD flag and
	  work_queue_aim_head() function, they aren't needed any more
	  with the new meta queue structure; (work_queue_run) don't
	  increment the counter on work item requeueing

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.

