2007-09-12 Denis Ovsienko

	* rt_socket.c: (kernel_rtm_ipv4) prefix_buf could be passed
	  to zlog_err() uninitialized with debug disabled. Fixed.

2007-09-06 Denis Ovsienko

	* rtread_sysctl.c: (route_read) Set RTF_DONE on the routing
	  messages when fetching initial kernel FIB, so rtm_read()
	  doesn't skip them.

2007-08-21 Denis Ovsienko

	* ioctl_solaris.c: (if_get_mtu) Don't break things if either
	  IPv6 was disabled at compile time or the current interface
	  hasn't it enabled.
	* kernel_socket.c: (ifm_read) Don't forget to call if_get_mtu()
	  for updated interfaces.

2007-08-17 Denis Ovsienko

	* kernel_socket.c: (rtm_read) Ignore any routing socket messages
	  without RTF_DONE flag set, as they are just noise for us.

2007-08-14 Denis Ovsienko

	* zebra_rib.c: (nexthop_active_update) Added a comment
          and rewrote nexthop iteration.

2007-08-13 Denis Ovsienko

	* kernel_socket.c: normalize rtm_type_str so it can be handled
	  by LOOKUP macro
	* kernel_socket.c: (rtm_read) don't ignore self-generated
	  routing messages, so we can debug them; make use of
	  ZEBRA_ERR_RTNOEXIST; output more details in debug log.
	* kernel_socket.c: (rtmsg_debug) make use of LOOKUP macro
	* kernel_socket.h: let the world know about rtm_type_str[_max]
	* rib.h: 3 more debugging functions and 5 return codes
	* rt_socket.c: (kernel_rtm_ipv4) dump IP prefix and masklen;
	  complain about strange rtm_write() return values
	* zebra_rib.c: (rib_lookup_ipv4_route, rib_dump,
	  rib_lookup_and_dump) --- new functions; more comments;
	  more debug logging

2007-08-10  Emmanuel Vize <emmanuel.vize@6wind.com>

	* rt_netlink.c: (netlink_interface_addr) Use the appropriate field length for the address
          (acknowledge Andy's comment).

2007-08-06  Denis Ovsienko

	* zebra_rib.c: (general) Add extra debug logging for RIB and
	  RIB queue.

2007-08-02  Denis Ovsienko

	* rt_socket.c (kernel_rtm_ipv4): Only call rtm_write when changes
	are intended.  Don't set FIB flag on failed additions (such as
	occur with multiple paths.

2007-06-25 Denis Ovsienko

	* zebra_rib.c: (rib_add_ipv4_multipath) Loop through RIB
	  is using 'same' variable, but RIB_ENTRY_REMOVED check
	  is testing the constant 'rib' variable, fix. Impact
	  unknown at this point.

2007-05-30 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* zebra_routemap.c: (route_set_src_compile) Use '#ifdef HAVE_IPV6'
	  as needed.
	* zebra_vty.c: (vty_show_ip_route_detail, vty_show_ip_route) Use
	  '#ifdef HAVE_IPV6' as needed.
	  (show_ip_protocol) Move function definition outside of
	  '#ifdef HAVE_IPV6' section.

2007-05-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* kernel_socket.c: (ifam_read_mesg) Grab RTA_DST and RTA_GATEWAY
	  addresses from the message (if present, which seems unlikely on
	  current BSD platforms), and show them in the debug messages.
	  Also, add ifam_flags to the debug messages.
	  (ifam_read) If the interface is point-to-point, then the RTA_BRD
	  address should be treated as a peer address.

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).
	* connected.c: (connected_up_ipv4) added src preference argument
	  to rib_add_ipv4()
	* kernel_socket.c: (rtm_read) ditto
	* main.c: added prefix list initialization
	* Makefile.am: added zebra_routemap.c source file
	* rib.h: added generic address union "g_addr" and use in
	  existing places that had an explicit union.
	  Added "src" to struct nexthop.
	  Added preferred src arg to nexthop_ipv4_add and rib_add_ipv4.
	* rt_netlink.c: (netlink_routing_table) set preferred source on 
	  netlink messages.
	  (netlink_route_change) ditto
	  (netlink_route_multipath) ditto.
	* rtread_getmsg.c: (handle_route_entry) added (NULL) src to
	  rib_add_ipv4() call.
	* rtread_proc.c: (proc_route_read) ditto
	* zebra_rib.c: (nexthop_ipv4_add) add src argument.
	  (nexthop_ipv4_ifindex_add) ditto
	  (rib_add_ipv4) ditto
	  (nexthop_active_check) Add route-map processing.
	* zebra_routemap.c: new file for zebra route-map commands.
	* zebra_vty.c: (ip_protocol_cmd) Apply route-map to protocol
	  (vty_show_ip_route_detail) added "src" printing
	  (vty_show_ip_route) ditto
	  (show_ip_protocol_cmd) new command, list routemaps.
	  (config_write_protocol) write out routemap protocl config.
	  (zebra_vty_init) Install the new routemap protocol commands.
	* zserv.c: (zread_ipv4_add) added (NULL) src arg
	  (zebra_init) init zebra route-maps.
	* zserv.h: add zebra_route_map_init
	
2007-04-29 Paul Jakma <paul.jakma@sun.com>

	* ioctl{_solaris,}.c: (if_get_mtu) Fix missing ; in last commit.
	* if_ioctl_solaris.c: (if_get_index) Fix bogus argument passed
	  to lifreq_set_name().

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

	* ioctl{_solaris,}.c: (if_get_mtu) Ping clients via
          zebra_interface_up_update if MTU is changed.

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

	* {ioctl,kernel}_null.c: Install of IP address should
	  reflect back to zebra via kernel_address_add..., makes
	  testzebra more useful.
	* interface.c: (if_delete_update) Address removal triggered
	  by kernel shouldn't remove configured IPv4 address from connected
	  list.

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

	* redistribute.c: (zebra_check_addr) Don't redistribute routes
	  to IPv4 link-local prefixes, fixes bug #351.
	* redistribute.h: Export zebra_check_addr.
	* router-id.c: (router_id_bad_address) re-use zebra_check_addr
	  rather than implementing similar logic.

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

	* kernel_socket.c: (ifam_read) Do not update interface metric on
	  receipt of NEW/DEL ADDR messages, bogus as: a) some systems
	  dont include iface metric for address events b) we didn't
	  update clients either. Initial diagnosis by Eugene Grosbein.

2007-02-26 Robert Olsson <Robert.Olsson@data.slu.se>

	* irdp_main.c: (irdp_send_thread) Skip non-AF_INET addresses,
	   i.e. do not try interpret IPv6 addresses as IPv4 addresses
	   to broadcast in IRDP announcements..

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

	* if_ioctl_solaris.c: (if_get_addr) For IPv6, stop assuming
	  that all IFF_POINTOPOINT have prefixlen of IPV6_MAX_BITLEN.
	  Instead, always try the SIOCGLIFSUBNET ioctl; if that fails,
	  then we fall back to IPV6_MAX_BITLEN for PtP interfaces.

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

	* connected.c: (connected_up_ipv4, connected_down_ipv4,
	  connected_up_ipv6, connected_down_ipv6) Simplify logic using the
	  new CONNECTED_PREFIX macro.
	  (connected_add_ipv4) Set prefixlen in destination addresses (required
	  by the CONNECTED_PREFIX macro).  Use CONNECTED_PEER macro instead
	  of testing for IFF_POINTOPOINT.  Delete invalid warning message.
	  Warn about cases where the ZEBRA_IFA_PEER is set but no
	  destination address has been supplied (and turn off the flag).
	  (connected_add_ipv6) Add new flags argument so callers may set
	  the ZEBRA_IFA_PEER flag.  If peer/broadcast address satisfies
	  IN6_IS_ADDR_UNSPECIFIED, then reject it with a warning.
	  Set prefixlen in destination address so CONNECTED_PREFIX will work.
	* connected.h: (connected_add_ipv6) Add new flags argument so
	  callers may set the ZEBRA_IFA_PEER flag.
	* interface.c: (connected_dump_vty) Use CONNECTED_PEER macro
	  to decide whether the destination address is a peer or broadcast
	  address (instead of checking IFF_BROADCAST and IFF_POINTOPOINT).
	* if_ioctl.c: (if_getaddrs) Instead of setting a peer address
	  only when the IFF_POINTOPOINT is set, we now accept a peer
	  address whenever it is available and not the same as the local
	  address.  Otherwise (no peer address assigned), we check
	  for a broadcast address (regardless of the IFF_BROADCAST flag).
	  And must now pass a flags value of ZEBRA_IFA_PEER to 
	  connected_add_ipv4 when a peer address is assigned.
	  The same new logic is used with the IPv6 code as well (and we
	  pass the new flags argument to connected_add_ipv6).
	  (if_get_addr) Do not bother to check IFF_POINTOPOINT: just
	  issue the SIOCGIFDSTADDR ioctl and see if we get back
	  a peer address not matching the local address (and set
	  the ZEBRA_IFA_PEER in that case).  If there's no peer address,
	  try to grab SIOCGIFBRDADDR regardless of whether IFF_BROADCAST is set.
	* if_ioctl_solaris.c: (if_get_addr) Just try the SIOCGLIFDSTADDR ioctl
	  without bothering to check the IFF_POINTOPOINT flag.  And if
	  no peer address was found, just try the SIOCGLIFBRDADDR ioctl
	  without checking the IFF_BROADCAST flag.  Call connected_add_ipv4
	  and connected_add_ipv6 with appropriate flags.
	* if_proc.c: (ifaddr_proc_ipv6) Must pass new flags argument to
	  connected_add_ipv6.
	* kernel_socket.c: (ifam_read) Must pass new flags argument to
	  connected_add_ipv6.
	* rt_netlink.c: (netlink_interface_addr) Copy logic from iproute2
	  to determine local and possible peer address (so there's no longer
	  a test for IFF_POINTOPOINT).  Set ZEBRA_IFA_PEER flag appropriately.
	  Pass new flags argument to connected_add_ipv6.
	  (netlink_address) Test !CONNECTED_PEER instead of if_is_broadcast
	  to determine whether the connected destination address is a
	  broadcast address.

2006-12-08 Piotr Chytla <pch@packetconsulting.pl>

	* zebra_rib.c: (static_install_ipv{4,6}) Case where existing
	  RIB is updated must explicitely rib_addqueue the route_node,
	  to ensure the update actually takes effect.

2006-09-13 Tom Everett <tom@khubla.com>

	* kernel_socket.c (rtm_type_str): ifdef RTM_OLD{ADD,DEL} to
	compile on systems that no longer define them.

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

	* interface.h: (ifstat_update_proc) declaration should match
	  ifstat_update_sysctl really, which is to not return status, as
	  such status is not used anywhere.
	* if_{proc,sysctl}.c: Make ifstat_update_* definitions and return values
	  consistent with each other and their declarations, ie: 
	  (void) (*) (void).
	* rtadv.h: depends on interface.h, so should include it.

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

	* misc_null.c: Add ifstat_update_sysctl, add another required
	  header.

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

	* misc_null.c: Must include header files to get older versions of gcc
	  to process the #pragma statements properly.

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

	* irdp_main.c: (irdp_advertisement) free the stream here, when done,
	  right under where it was allocated so it's blindingly obvious
	  it's correct. This possibly fixes a very slow leak of streams in
	  zebra.
	* irdp_packet.c: (send_packet) don't free the stream here as
	  it's hard to tell if right, plus an error case seemed to
	  returning before free anyway.

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

	* {ioctl,kernel}_null.c: Dummy/Null kernel method implementations,
	  useful for testing zebra code that calls such methods.
	* {redistribute,misc}_null.c: Dummy/Null methods, as above. But
	  for zclient, and for various misc functions.
	* test_main.c: Test harness for zebra, currently just to test the
	  RIB.
	* Makefile.am: Build testzebra using above.
	* debug.{c,h}: Add 'debug zebra rib' and 'debug zebra rib queue'.
	* rib.h: (struct rib) Add a route_node rn_status flag field,
	  this has to be copied every time head RIB of a route_node
	  changes.
	  Remove the rib lock field, not needed - see below. 
	  Add a status field for RIB-private flags.
	* zebra_rib.c: Add a global for the workqueue hold time, useful
	  for testing.
	  (general) Fix for bug #268. Problem originally detailed by
	  Simon Bryden in [quagga-dev 4001].
	  Essentially, add/delete of a RIB must happen /before/ the
	  queue. Best-path selection (ie rib_process) and reaping of
	  freed RIBs can then be done after queueing. Only the route_node
	  is queued - no important RIB state (i.e. whether a RIB is to be
	  deleted) is queued.
	  (struct zebra_queue_node_t) Disappears, no longer need to
	  track multiple things on the queue, only the route_node.
	  (rib_{lock,unlock}) removed, RIBs no longer need to be
	  refcounted, no longer queued.
	  (rib_queue_qnode_del) Removed, deleted RIBs no longer deleted
	  via the queue.
	  (rib_queue_add_qnode) deleted
	  (rib_queue_add) Only the route_node is queued for best-path
	  selection, we can check whether it is already queued or
	  not and avoid queueing same node twice - struct rib * argument
	  is not needed.
	  (rib_link/unlink) (un)link RIB from route_node.
	  (rib_{add,del}node) Front-end to updates of a RIB.
	  (rib_process) Reap any deleted RIBs via rib_unlink.
	  Unset the route_node 'QUEUED' flag.
	  (General) Remove calls to rib_queue_add where add/del node was
	  called - not needed, update calls where not.
	  Ignore RIB_ENTRY_REMOVEd ribs in loops through route_nodes

2006-07-27 Rumen Svobodnikov <rumen@telecoms.bg>

	* connected.c: (connected_up_ipv4) interface connected routes always
	  go to table main (or otherwise they cannot be used by linux as
          nexthops)
	* zserv.c: (zread_ipv4_add) send route to the correct routing table
	* zebra_rib.c (static_install_ipv4) set routing table

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

	* rt_netlink.c: (netlink_interface_addr) Fix CID #104, can not
	  proceed if addr is NULL.
	* zebra_rib.c: (static_add_ipv6) Fix CID #18, double check
	  required arguments are supplied for the given nexthop type.
	
2006-06-15 Paul Jakma <paul.jakma@sun.com>

	* interface.c: (if_flag_dump_vty) redundant code, remove.
	  (if_dump_vty) use libzebra if_flag_dump.
	  (ip_address_uninstall) Unset the configured flag.
	* connected.c: (connected_same) new helper, check whether
	  two connected are same.
	  (connected_implicit_withdraw) new helper, consolidation of
	  existing code in connected_add_ipv{4,6}.
	  Try filter out unneeded Zserv address delete/adds when
	  address is exact same.
	  Where old address is implicitely removed, be sure to preserve
	  the IFC_CONFIGURED flag if set, fixes bug where configured
	  addresses were being lost on FreeBSD (Andrew Schorr).	  

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

	* connected.c: (connected_withdraw) Do not delete the connected
	  address if the ZEBRA_IFC_CONFIGURED flag is set.
	  (connected_add_ipv4,connected_add_ipv6) Before calling
	  connected_withdraw, unset the ZEBRA_IFC_CONFIGURED flag
	  on the superseded connected structure.

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

	* connected.c: (connected_add_ipv4,connected_add_ipv6) If the
	  new struct connected matches an already existing one
	  (that will consequently be removed by connected_withdraw),
	  then be sure to preserve the ZEBRA_IFC_CONFIGURED flag.

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

	* kernel_socket.c: (ifam_read_mesg) Improve debug message
	  to show the IP address.

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

	* zserv.c: (general) Remove the private zebra_command_str
	  in favour of newly added libzebra zserv_command_string.

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

	* interface.c: (if_delete_update) route_node_lookup may return
	  NULL, should fix Coverity CID #31.

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

	* rib.h: (struct {rib,nexthop}) Rearrange fields to avoid
	  needless padding. 
	  (struct rib) Remove the indirect pointer, not used anywhere!

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

	* interface.c: (if_dump_vty) move flags to their line, neater.

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

	* zebra_rib.c: (rib_process) Fourth time lucky on this jinxed
	  commit, last commit had a hole that could allow connected
	  route selection to escape beyond the connected route logic. 
	  This time I cross-checked with Gunnar first. ;)

2006-01-25 Gunnar Stigen <gunnar.stigen@axxessit.no>

	* zebra_rib.c: (rib_process) Application of Gunnar's earlier
	  metric selection RIB change included incorrect tidy-ups made
	  by commiter. Fix. (NB: any errors here are again due to paul).

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

	* (general) More solaris PF_ROUTE hacks. The IFF_UP mangling
	  for solaris was incomplete on the PF_ROUTE side. fix it.
	  This changeset generally uglifies things. For some future
	  work I'd like to see the state changes seperated out from
	  the details of the code. Differences between systems might
	  then be slightly easier to implement without convoluted
	  hacks.
	  Changes should be specific to Solaris mostly, however
	  also tested on FreeBSD 6.
	* if_ioctl_solaris.c: (interface_list_ioctl) ignore ~IFF_UP
	  interfaces, we'll hear about them when/if interface goes up
	  through NEWADDR.
	  Update flags explicitely at end of it to kick mangling.
	* ioctl_solaris.c: (if_mangle_up) removed to interface.c, in
	  kind.
	  (lifreq_set_name) more convenient to take the string, than
	  the ifp.
	  (if_get_flags_direct) new convenience function, returns
	  the actual flags. Used during bootstrap in if_ioctl_solaris.c
	  to peek at flags of logical interfaces to see whether or
	  not to ignore them.
	  (if_get_flags) ENXIO means it's gone, poke out IFF_UP and
	  kick flags update.
	  (if_{un,}set_flags) flags argument should be 64bit.
	* ioctl.{c,h}: flags argument should be 64bit. 
	* interface.h: Add a 'primary_state' flag to struct zebra_if on
	  SUNOS_5.
	  Export if_flags_update.
	* interface.c: (if_flags_mangle) moved over in kind from
	  ioctl_solaris.c. Nasty kludge to try get IFF_UP right, as
	  much as is possible. Also keep track of the actual IFF_UP
	  value for the primary interface, so we can know when the ifp
	  must be deleted.
	  (if_flags_update) Take a new interface flags value, apply it
	  to the interface, and take whatever actions are required due
	  to flag transitions.
	  (if_refresh) flag state change logic is moved out to
	  previous. Just call if_get_flags, which will end up using
	  previous to effect the update of flags.
	  (if_flag_dump_vty) IFF_IPV{4,6} aren't interesting, VIRTUAL
	  and NOXMIT are though.
	* kernel_socket.c: (ifm_read) Down->Down transitions shouldn't
	  create ifp, for non-IFANNOUNCE systems.
	  Use if_flags_update to update flags.
	  flag transition logic is now handled automatically through
	  if_flags_update.
	  (ifam_read) Better to call if_refresh *after* adding
 	  connected addresses, as connected count affects IFF_UP on
 	  IFF_UP-mangled systems.
 	  On Solaris, Up->Down due to DELADDR means we need to delete
	  the ifp - the IFINFO might already have been and gone.
	* rt.h: include other dependent headers.

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

        * (general) various miscellaneous compiler warning fixes.
          Remove redundant break statements from switch clauses
          which return.
          Remove stray semi-colons which cause empty-statement
          warnings.
	* main.c: (sighup) remove private declaration of external
          function.
          (main) return from main, not exit, cause it annoys SOS.

2006-01-18 Gunnar Stigen <gunnar.stigen@axxessit.no>

	* zebra_rib.c: Take interface metric into account.

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

	* kernel_socket.c: (ifam_read) Read metric from RTM_NEWADDR.
	  If interface is an alias, pass the alias as a label for
	  connected_add_ipv{4,6}.
	* rt_netlink.c: (netlink_interface_addr) print out
	  IFA_CACHEINFO info, if present, when debugging kernel
	  messages.

2006-01-17 Gunnar Stigen <gunnar.stigen@axxessit.no>

	* connected.c: (connected_up_ipv{4,6}) Include interface metric on
	  connected routes.
	* if_ioctl.c: (if_getaddrs) Be defensive about assuming
	  that struct ifaddrs will have ifa_addr filled in.

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

	* zserv.c: Read/write updated Zserv header.

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

	* zserv.c: (zsend_interface_{add,delete,update}) if flags are
	  8 bytes now, update to write out with stream_putq.

2005-12-29  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* kernel_socket.c: remove dead code (from David Young).

	* rt_socket.c (kernel_rtm_ipv4): Use AF_INET rather than AF_UNSPEC
	for mask.  From David Young.

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

	* connected.{c,h}: (connected_add_ipv6) label should have
	  const qualifier, fix declarations.

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

	* kernel_socket.h: New header for functions exported to sysctl
	  methods.
	* kernel_socket.c: include previous.
	  Remove static qualifier from couple of functions which are
	  used by sysctl methods.
	  Add a workaround for a bogus gcc warning to the RTA_ macros.
	* Makefile.am: Add kernel_socket.h to noinst_HEADERS
	* if_sysctl.c: include rt.h and kernel_socket.h and remove
	  redundant prototypes.
	* rtread_sysctl.c: ditto.
	  (route_read) fix mismatch of return values.
	* {rt,zserv,rib}.h: Include lib headers depended on.

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

	* (general) fix some small compile errors, and mark several
          functions as static.
        * kernel_socket.c: (ifan_read) should be static.
          fix missing brackets.
          (ifm_read,ifam_read,rtm_read_mesg,kernel_read) Make static
          (ifam_read_mesg) make static. fix incorrect variable name.
          (rtm_read) make static. Fix call to rib_delete_ipv4 which
          should be rib_delete_ipv6.
          (routing_socket,kernel_init) should be static. Void argument
          should be specified as such, not left incomplete.
        * rt_netlink.c: rt.h should be included, contains prototypes of  
          exported functions.
          (kernel_delete_ipv6_old) fix sign of index argument.   
        * rt_socket.c: Exact same as previous. Also, make various
          functions static.
        * rtread_getmsg.c: Include zserv.h, which prototypes
          route_read. Make static.
        * rtread_sysctl.c: zserv.h and rt.h should be included.
          fix definition of route_read.
   
2005-11-14 Paul Jakma <paul.jakma@sun.com>

	* zebra_rib.c: (rib_process) convert to new workqueue specs and
	  shut up gcc, which complains about cast from void via
	  function parameters, for some dumb reason. Do the cast
	  inside the function instead.
	  (rib_queue_qnode_del) ditto.
	  (rib_queue_init) no need for the casts anymore.

2005-11-12 Alexander Gall <gall@switch.ch>

	* See [quagga-dev 1815]
	* kernel_socket.c: (rtm_write) Use SAROUNDUP when HAVE_SIN_LEN
	  is not available.
	* rt_socket.c: (kernel_rtm_ipv6(_multipath)) set family to 
	  AF_INET6 on ipv6 routes.

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

	* kernel_socket.c: Add RTA_NAME_GET macro to extract name from
	  sockaddr_dl. Add some more RTF_ flags.
	* (ifan_read) Add some debug messages.
	* (ifm_read) Add more debug messages. More robust cross-checks
	  of index against name.
	  Fall back to by-name lookup if the index lookup fails, future
	  proofing more than anything else.
	  (ifam_read_mesg) Read RTA_IFP. Add debug messages.
	  (ifam_read) More debug. If there's an RTA_IFP and it isn't
	  the name of the interface, save it as the label.
	  (rtm_read_mesg) Read RTA_IFP.
	  (rtm_read) allow name to be retrieved.
	  (rtmsg_debug) expand on the debug message.

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

	* kernel_socket.c: (ifm_read) arithmetic on void pointer
	  warning.
	  (ifam_read) Fix error from connected-with-label merge,
	  something crept in from the pending Solaris kernel_socket.c
          patch which shouldn't have.

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

	* connected.{c,h}: Include memory.h
	  (connected_add_ipv4) Use MTYPE for ifc label.
	  (connected_add_ipv6) Also should accept label. Store it in ifp.
	  (connected_del_ipv4) Taking label as argument is pointless.
	* rt_netlink.c: (netlink_interface_addr) update label usage
	  for connected_{add,delete} functions.
	* if_ioctl.c: (if_getaddrs) NULL label for connected_add_ipv6.
	* if_ioctl_solaris.c: (interface_list_ioctl) Pass LIFC_NOXMIT
	  so we also find out about NOXMIT interfaces like VNI.
	  Bit of hackery to turn interface names into the primary
	  interface name, later with routing socket messages we only
	  will about primary interfaces anyway, so we must normalise
	  the name.
	  (if_get_addr) take label as argument, so it can
	  be passed to connected_add.
	  If label is provided, then it is interface name to issue the
	  ioctl for address information on, not the ifp name.
	  (interface_list) List AF_UNSPEC too, just in case.
	* if_proc.c: (ifaddr_proc_ipv6) label for connected_add_ipv6.
	* interface.c: (if_addr_wakeup) Some very bogus code - sets
	  IFF_RUNNING - add comment.
	  (if_refresh)
	  (ip_address_install) Use MTYPE for ifc label.
	* ioctl_solaris.c: (if_mangle_up) New function. Hackery to make
	  IFF_UP reflect whether any addresses are left on the
	  interface, as we get signalled for IFF_UP flags change on the 
	  primary interface only. Logical interfaces dont generate
	  IFINFO, but we do get an RTM_DELADDR.
	  (if_get_flags) Call if_mangle_up before return.
	* kernel_socket.c: (ifam_read) Fixup calls to
	  connected_{add,delete} to match above changes. Rename gate
	  variable to brd, less confusing.
	  Pass the interface name as a label, if it is not same name 
	  as ifp->name.

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

	* connected.{c,h}: (connected_{add,delete}_ipv4) label should
	  be const qualified.
	
2005-10-01 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* zebra_vty.c: (route_type_str) Remove obsolete function: use new
	  library function zebra_route_string() instead.  Note that there
	  are a few differences: for IPv6 routes, we now get "ripng" and
	  "ospf6" instead of the old behavior ("rip" and "ospf").
	  (route_type_char) Remove obsolete function: ues new library function
	  zebra_route_char() instead.  Note that there is one difference:
	  the old function returned 'S' for a ZEBRA_ROUTE_SYSTEM route,
	  whereas the new one returns 'X'.
	  (vty_show_ip_route_detail,vty_show_ipv6_route_detail) Replace
	  route_type_str() with zebra_route_string().
	  (vty_show_ip_route,vty_show_ipv6_route) Replace route_type_char()
	  with zebra_route_char().

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

	* rt_netlink.c: (netlink_request) Use memset to clear structure
	  before calling sendto (eliminates a valgrind error message about
	  uninitialized data).

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

	* zserv.c: Always provied distance for route add

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

	* connected.c: flag connected_up_ipv6() and connected_down_ipv6()
	  usage with HAVE_IPV6

2005-09-24 Hasso Tepper <hasso at quagga.net>

	* rib.h: Add note about behaviour of rib_add_ipv[46]* functions -
	  add is treated as implicit withdraw.

2005-09-21 David Young <dyoung@ojctech.com>

	* zebra_rib.c: Reduce the height of some staircases. Fix
	  rib_delete_ipv6() to match routes in the RIB by their gateway as
	  well as by destination.

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

	* zebra_rib.c: (static_uninstall_ipv{4,6}) Fix regression wrt
	  removal of static routes with multiple-hops introduced with
	  the workqueue conversion. We should free the relevant
	  nexthop and then get rib_process to run, otherwise we just
	  get same static route back again (with no way to unconfigure
          it, because its already deleted from configuration).
          
2005-09-12 Paul Jakma <paul.jakma@sun.com>

	* (general) RTM_CHANGE and implicit withdraw on RTM_NEWADDR
	  support.
	* connected.c: (connected_withdraw) new function. withdraw a
	  connected subnet address set from zebra, and pass information
	  along to clients.
	  (connected_announce) similar, but to announce a new connected
	  subnet address set.
	  (connected_check_ipv4) renamed to connected_check, as its
	  AFI independent.
	  (connected_add_ipv{4,6}) Remove the connected address announce
	  stuff, use connected_announce instead.
	  If connected_check indicates address is already present,
	  treat it as an implicit withdraw of the existing address, ie
	  remove the old address details and replace with the new
	  details.
	  (connected_delete_ipv{4,6}) Use connected_withdraw.
	  (connected_check_ipv6) deleted in favour of connected_check.
	* connected.h: Rename connected_check_ipv4 to connected_check.
	  delete connected_check_ipv6.
	* interface.c: Use connected_check rather than the AFI specific
	  symbols.
	* kernel_socket.c: (rtm_read) RTM_CHANGE support. Create a 
	  rib delete event for the existing route, before adding route
	  again.
	  (kernel_read) we can handle RTM_CHANGE now.

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

	* zebra_rib.c, rib.h: Add distance and metric arguments to the
	  rib_add_ipv6() function so that IPv6 routes in RIB can have correct
	  metric. No IPv6 routing daemon uses distance yet though.
	* zserv.c, connected.c, kernel_socket.c, rt_netlink.c,
	  rtread_proc.c,zserv.c: Pass metric and distance info to the
	  rib_add_ipv6().

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

	* interface.c: (if_delete_update) should always be available, not
	  just on RTM_IFANNOUNCE/NETLINK systems.
	* kernel_socket.c: (ifan_read) only call if_delete_update when
	  interface departs, dont if_delete, because we wish to retain
	  interface configuration state even when interfaces are removed.
	  (ifm_read) If we dont have RTM_IFANNOUNCE, then transitioning
	  to down state is only chance we have to clean up interface in case
	  it is deleted (eg Solaris down -> unplumb -> plumb up).
	* redistribute.c: (zebra_interface_delete_update) should always be
	  available, we /will/ call it now on all systems, via
	  if_delete_update.
	* zserv.c: (zsend_interface_delete) ditto
	  (zsend_interface_address) Update the call-flow diagramme, to
	  reflect that if_delete_update /is/ now called on all systems,
	  potentially.
	* zserv.h: (zsend_interface_delete) unconditionally exported, as
	  above.
	  
2005-06-28 Paul Jakma <paul.jakma@sun.com>

	* (global) Extern and static'ification, with related fixups
	  of declarations, ensuring files include their own headers, etc.
	* if_ioctl.c: (interface_info_ioctl) fix obvious arg mis-order in
	  list loop
	* kernel_socket.c: (RTA_{ADDR,ATTR}_GET) fix mistake, NULL check
	  should be on DEST argument

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

	* kernel_socket.c: consolidate the IFAM{ADDR,MASK}GET and 
	  RTM{ADDR,MASK}GET macros into generic rta_addrs macros,
	  RTA_{ADDR,ATTR}_GET.
	  (af_check) could use 'inline' attribute
	  (ifam_read_mesg) remove IFAM{ADDR,MASK}GET macro, change to
	  generic macro.
	  (rtm_read_mesg) similar

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

	* rt_netlink.c: Remove netlink-addr socket declaration, it's not used.
	* rt_netlink.c (netlink_parse_info): Fix debug messages - nlmsg_pid is
	  unsigned and one zlog call had swapped arguments.
	* rt_netlink.c (netlink_route_multipath): Fix compile with disabled
	  IPv6 support.

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

	* zserv.c: (zsend_route_multipath) Fix bug if route is sent
	  with no NEXTHOP_FLAG_FIB nexthops. As ZAPI_MESSAGE_IFINDEX
	  and ZAPI_MESSAGE_NEXTHOP are always set, clients would try
	  read non-existent nexthop information and hit stream assert.
	  Zserv is still broken for multi-nexthop messages, but it always was.

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

	* zserv.h: Remove ZEBRA_PORT definition, its in lib/zebra.h now

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

	* rib.h: (struct rib) Add lock field for refcounting.
	* zserv.h: (struct zebra_t) Add a ribq workqueue to the zebra
	  'master' struct.
	* zserv.c: (zread_ipv4_add) XMALLOC then memset should be XCALLOC.
	* zebra_rib.c: Clean up refcounting of route_node, make struct rib
	  refcounted and convert rib_process to work-queue. In general,
	  rib's should be rib_addnode'd and delnode'd to route_nodes, and 
	  these symmetrical functions will manage the locking of referenced
	  route_node and freeing of struct rib - rather than having users
	  manage each seperately - with much scope for bugs..
	  (newrib_free) removed and replaced with rib_lock
	  (rib_lock) new function, check state of lock and increment.
	  (rib_unlock) new function, check lock state and decrement. Free
	  struct rib if refcount hits 0, freeing struct nexthop's, as 
	  newrib_free did.
	  (rib_addnode) Add RIB to route_node, locking both.
	  (rib_delnode) Delete RIB from route_node, unlocking each.
	  (rib_process) Converted to a work-queue work function.
	  Functional changes are minimal, just arguments, comments and 
	  whitespace.
	  (rib_queue_add_qnode) Helper function to setup a ribq item.
	  (rib_queue_add) Helper function, same arguments as old
	  rib_process, to replace in callers of rib_process.
	  (rib_queue_qnode_del) ribq deconstructor.
	  (rib_queue_init) Create the ribq.
	  (rib_init) call rib_queue_init.
	  (remainder) Sanitise refcounting of route_node's. Convert to 
	  rib_queue_add, rib_addnode and rib_delnode. Change XMALLOC/memset
	  to XCALLOC. Remove calls to nexthop_delete and nexthop_free.
	  
2005-04-10 Paul Jakma <paul@dishone.st>

	* if_ioctl_solaris.c: (if_lookup_linklocal) fix order of args
	  in ALL_LIST_ELEMENTS_RO macro.

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

	* zserv.c (zebra_client_read): Fix bug: first read attempt should
	  read ZEBRA_HEADER_SIZE minus the number of bytes already read.
	  Improve efficiency by maintaining a calculation of the number
	  of bytes read instead of calling stream_get_endp multiple times.
	  If message length is too small, issue a warning message (not debug)
	  before closing the connection.  And also check that message length
	  is not too big.

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

	* rt_netlink.c: One tiny missing comma caused pointless debug messages
	  about IPv6 nexthops.

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

	* rt_netlink.c (netlink_parse_info): Fix warning. It's safe to cast
	  status to unsigned here, because we already checked that it isn't
	  negative or 0.
	* rt_netlink.c (netlink_interface_addr): Prefix length belongs to the
	  address, not to the interface.
	* rt_netlink.c (netlink_route_multipath): Fix debug. No useless info
	  is printed out now and IPv6 info is handeled.

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

	* zserv.c: print more helpful errors when we fail to successfully
	  bind and listen on zserv socket. Closes bugzilla #163.

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

	* if_ioctl.c: (interface_list_ioctl) Use if_get_by_name_len.
	* if_proc.c: (ifaddr_proc_ipv6) Increase size of ifname buffer to
	  avoid overflow.
	* kernel_socket.c: (ifan_read) Use if_get_by_name_len.

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

	* kernel_socket.c: (ifm_read) Use new if_lookup_by_name_len function
	  to save a memcpy.
	* if_ioctl_solaris.c: (interface_list_ioctl) Fix subtle bug with new
	  if_get_by_name_len function.

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

	* interface.c: (if_new_intern_ifindex) Remove obsolete function.
	  (if_delete_update) After distributing the interface deletion message,
	  set ifp->ifindex to IFINDEX_INTERNAL.
	  (if_dump_vty) Detect pseudo interface by checking if ifp->ifindex is
	  IFINDEX_INTERNAL.
	  (zebra_interface) Check return code from interface_cmd.func.
	  Do not set internal ifindex values to if_new_intern_ifindex(),
	  since we now use IFINDEX_INTERNAL for all pseudo interfaces.
	* kernel_socket.c: (ifm_read) Fix code and comments to reflect that
	  all internal interfaces now have ifp->ifindex set to IFINDEX_INTERNAL.
        * rt_netlink.c: (set_ifindex) New function used to update ifp->ifindex.
	  Detects interface rename events by checking if that ifindex is already
	  being used.  If it is, delete the old interface before assigning
	  the ifindex to the new interface.
	  (netlink_interface, netlink_link_change) Call set_ifindex to update
	  the ifindex.

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

	* rt_netlink.c (netlink_talk_filter): Show always warning message,
	  it's not for debug.
	* rt_netlink.c (netlink_talk): Don't assume we use netlink_cmd
	  although we do now actually.
	* rt_netlink.c (netlink_route, netlink_route_multipath): Always use
	  netlink_cmd to send messages to the kernel.

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

	* irdp.h: Add prototype for irdp_sock_init, and fix protos for
	  other irdp_* functions.
	* irdp_interface.c: (irdp_if_start) If irdp_sock is negative,
	  call irdp_sock_init to create the IRDP socket.
	  (irdp_if_init) Rename to irdp_init().
	  (get_iflist_ifp) Remove function that is a duplicate of
	  if_lookup_by_index.
	  (*) Make many functions static.  And remove superfluous "\n" from
	  several zlog messages.
	* irdp_main.c: (irdp_init) Remove function that used to call
	  irdp_if_init() and irdp_sock_init(), since we will now create
	  the socket only upon first use.
	  (irdp_sock_init) Do not update global irdp_sock variable, just
	  return the fd and assume that the caller will do so.  If setsockopt
	  calls fail, close the socket before returning -1.
	  (*) Make many functions static.
	* irdp_packet.c: Initialize irdp_sock to -1.
	  (irdp_read_raw) Call standard library function if_lookup_by_index
	  instead of get_iflist_ifp.
	  (irdp_recvmsg) Should be static, not global.

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

	* rt_netlink.c: (netlink_link_change) If the status of an
	  operative interface changes (e.g. MTU changes), the client
	  daemons should be notified by calling zebra_interface_up_update.
	  Previously, the information was being updated in zebra's
	  interface structure, but the clients were not notified of
	  changes to an operative interface.

2005-03-25 Jean-Mickael Guerin <jean-mickael.guerin@6wind.com>
	* interface.c, interface.h, rtadv.c, rtadv.h: modifications to 
	  IPv6 Neighbor Discovery according to RFC3775, section 7:
	  o 1-bit Home Agent flag management in Router Advertisement (7.1).
	  o 1-bit Router Address flag management in Prefix Information 
	    Option (7.2).
	  o Advertisement Interval Option (7.3)
	  o Home Agent Information Option (7.4)
	  o Changes to Sending Router Advertisements more frequently (7.5)

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

	* zebra/interaface.c: "show interface description" command
	  implemented.

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

	* rt_netlink.c: (netlink_route_multipath) dont set equalise flag.
	  No stock Linux kernel has ever supported it, and even if it had
	  it's not generally a good idea.

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

	* if_proc.c, ipforward_proc.c, rtread_proc.c: Fix fd leaks.

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

	* interface.c: Fix CRC and frame errors statistics in Linux.

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

	* zserv.c: Must include network.h and buffer.h for non-blocking I/O.
	  Remove global message_queue and t_write (need separate buffering for
	  each client).
	  (zebra_server_dequeue,zebra_server_enqueue) Remove functions
	  related to old buggy buffering code.
	  (zserv_delayed_close) New thread callback function to delete a client.
	  (zserv_flush_data) New thread callback function to flush buffered
	  data to client.
	  (zebra_server_send_message) Rewritten to use buffer_write (so
	  buffering of writes and non-blocking I/O work properly).
	  (zsend_interface_add,zsend_interface_delete,zsend_interface_address,
	  zsend_interface_update) Return 0 instead of -1 if !client->ifinfo
	  (this is not really an error).  Return value from
	  zebra_server_send_message.
	  (zsend_route_multipath,zsend_ipv4_nexthop_lookup,
	  zsend_ipv4_import_lookup) Return value from zebra_server_send_message.
	  (zsend_ipv6_nexthop_lookup) Fix scope to static, and return value
	  from zebra_server_send_message.
	  (zsend_router_id_update) Must use zebra_server_send_message instead
	  of deprecated writen function.  Return 0 instead of -1 if this client
	  is not subscribed to router-id updates (since this is not really
	  an error).
	  (zread_interface_add) Change type to static int.  If
	  zsend_interface_add fails or zsend_interface_address fails, return -1
	  immediately (since the client has had an I/O error).
	  (zread_interface_delete,zread_ipv4_add,zread_ipv4_delete,
	  zread_ipv6_add,zread_ipv6_delete,zread_router_id_delete) Return 0
	  to indicate success.
	  (zread_ipv4_nexthop_lookup) Return value from
	  zsend_ipv4_nexthop_lookup.
	  (zread_ipv4_import_lookup) Return value from zsend_ipv4_import_lookup.
	  (zebra_read_ipv6) Remove unused function.
	  (zread_ipv6_nexthop_lookup) Return value from
	  zsend_ipv6_nexthop_lookup.
	  (zread_router_id_add) Return value from zsend_router_id_update.
	  (zebra_client_close) Call buffer_free(client->wb) and
	  thread_cancel(client->t_suicide).
	  (zebra_client_create) Allocate client->wb using buffer_new.
	  (zebra_client_read) Support non-blocking I/O by using stream_read_try.
	  Use ZEBRA_HEADER_SIZE instead of 3.
	  (zebra_accept) Fix bug: reset accept thread at top.  Make client
	  socket non-blocking using the set_nonblocking function.
	  (config_write_forwarding) Fix scope to static.
	  (zebra_init) Remove initialization code for old buggy write buffering.
	* zserv.h: Add 2 new fields to struct zserv: struct buffer *wb
	  (to enable buffered writes with non-blocking I/), and 
	  struct thread *t_suicide to support delayed close on I/O
	  errors.
	* router-id.h: Remove prototypes for zread_router_id_add and
	  zread_router_id_delete (their scope should be static to zserv.c).

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

	* redistribute.c: (zebra_check_addr,is_default,
	  zebra_redistribute_default,zebra_redistribute) Fix scope to be static.

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

	* rt_netlink.c: Don't show messages "ignoring message type 0x001[89]"
	  if we are not debugging.

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

	* zserv.c: (zebra_read_ipv6) replace the char * arithmetic with
	  STREAM_READABLE.

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

	* Not all Linux netlink systems have IFLA_WIRELESS

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

	* ioctl.c: (if_ioctl,if_ioctl_ipv6,if_get_flags) Replace perror with
	  zlog_err.
	* ioctl_solaris.c: (if_ioctl,if_ioctl_ipv6) Replace perror with
	  zlog_err.

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

	* if_ioctl_solaris.c: (interface_list_ioctl) Save errno before calling
	  zserv_privs.change.
	* ioctl{,_solaris}.c: (if_ioctl,if_ioctl_ipv6) Save errno before calling
	  zserv_privs.change.
	* ipforward_solaris.c: (solaris_nd) Save errno before calling
	  zserv_privs.change.
	* irdp_main.c: (irdp_sock_init) Save errno before calling
	  zserv_privs.change.

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

	* rt_netlink.c: (netlink_socket,netlink_request,netlink_parse_info,
	  netlink_talk) Save errno before calling zserv_privs.change.

2005-01-24 Martin Pot <mpot at martybugs.net>

	* zebra/rt_netlink.c: ignore wireless newlink netlink messages.

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

	* interface.c: Better statistics output in "show interface" command in
	  case of /proc being used.

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

	* main.c: With --nl-bufsize argument is required.

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

	* zserv.c: (zebra_accept) Comment out setting of socket to NONBLOCK
          for now, as we dont actually deal with with resending.... See
          bugzilla #122, fix from wawa@yandex-team.ru (Vladimir Ivanov).
	* kernel_socket.c: (routing_socket) ditto.

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

	* rtadv.c: (rtadv_recv_packet,rtadv_send_packet) Use ZCMSG_FIRSTHDR
	  instead of CMSG_FIRSTHDR.

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

	* connected.c: (connected_add_ipv4) Limit warning about /32 addresses
	  with no peer specified to PtP interfaces only.

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

	* zebra_vty.c: Fix "show ipv6 route <proto>" command help and make it
	  work for isis routes.

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

	* kernel_socket.c (rtmsg_debug): char * => const char *

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

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

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

	* main.c: (main) The 2nd argument to openzlog has been removed.
	  So stdout logging will no longer be enabled by default.
	* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
	  from LOG_WARNING to LOG_INFO.

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

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

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

	* irdp_interface.c: Remove comment from DEFUN, it breaks vtysh because
	  it confuses extract.pl.
	* main.c: Make group to run as configurable.

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

	* interface.c: Remove dead "ip tunnel" command.

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

	* irdp_main.c: change setsockopt_pktinfo to setsockopt_ifindex

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

	* rt_netlink.c: (netlink_interface_addr) For PtP interfaces, ignore
	  tb[IFA_ADDRESS] if it's the same as tb[IFA_LOCAL].
	* interface.c: (ip_address_install) Use new ipv4_broadcast_addr
	  function.
	* connected.c: (connected_up_ipv4) Use CONNECTED_POINTOPOINT_HOST
	  macro.
	  (connected_down_ipv4) ditto.
	  (connected_add_ipv4) Validate destination address, print warnings
	  if it does not make sense.

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

	* zserv.c: Fix regression introduced with zserv cleanup.

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

	* zebra_snmp.c: Remove defaults used to initialize smux connection to
	  snmpd. Connection is initialized only if smux peer is configured.
	* zserv.c: Remove useless warnings "forwarding is already on".

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

	* zebra_vty.c: Unbreak "show ip route" command help and make it work
	  for isis routes.
	* interface.c(if_dump_vty): Show IPv6 addresses in "show interface"
	  output. Fixes Bugzilla #119.
	* *.c: Make some strings const and some (unsigned) casts to fix
	  compiler warnings.

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

	* connected.c, main.c, rt_netlink.c, rtadv.c, zebra_rib.c, zserv.c:
	  Fix warnings: make strings const, signed -> unsigned.

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

	* irdp_packet.c: (parse_irdp_packet) style issues.
	  Use sockopt_iphdrincl_swab_systoh.
          Try unbork the code. Checksum the ICMP data and actually 
          compare it to received checksum. Check data length against
          claimed length in header.
	  Always use ntoh.. when accessing addresses, even when the
          comparison happens to be endian-safe.
	  (send_packet) minor style isues. Use
          sockopt_iphdrincl_swab_htosys.
	  (irdp_iph_hton/ntoh) IP header to/from network/host order.

2004-10-03 Gilad Arnold <gilad.arnold at terayon.com>

	* interface.c, interface.h: A new prefix tree of connected subnets is
	  associated with each interface structure in zebra, in which each
	  live (ie, non-synthetic) node holds a list of installed addresses
	  that belong to that prefix. Remove secondary address logic from cli.
	  See [quagga-dev 872] for detailed explanation.
	* connected.c: Use if_subnet_add() and if_subnet_delete().

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

	* router-id.c, router-id.h: New files. Router id selection process. If
	  there is non 127.x.x.x address in loopack interface, lowest of them
	  is chosen. If there isn't, lowest from other interfaces addresses
	  are chosen. "router-id x.x.x.x" vty command to manual override.
	* Makefile.am: Compile new files.
	* main.c: Initialize router id.
	* redistribute.c: Add interface addresses into router id selection
	  lists as they (dis)appear.
	* zserv.c, zserv.h: Sending router id related messages to daemons.

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

	* irdp_interface.c, irdp_main.c, irdp_packet.c, rt_netlink.c,
	  rtadv.c, zebra_vty.c: Fix compiler warnings.

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

	* irdp_interface.c: (no_ip_irdp_address_preference_cmd)
          add missing listnode declaration.

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

        * irdp_{interface,main}.c: lists typedef removal cleanup.        
          update some list loops to LIST_LOOP. some miscellaneous style
          and indent fixups.
          (no_ip_irdp_address_preference_cmd) Fix delete of referenced node    
          in loop.
        * irdp_packet.c: (irdp_recvmsg) Fix buggy assignment of integer
          to pointer.
        * if_ioctl{,_solaris}.c: lists typedef removal cleanup. 
          update some list loops to LIST_LOOP.

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

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

2004-09-22 Paul Jakma <paul.jakma@sun.com>

	* zserv.c: (zsend_route_multipath) fix nasty bad memset of struct
	  in_addr to sizeof(struct in6_addr), causing odd and hard to debug
          crash.

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

	* main.c, rt_netlink.c: Added -s command line switch for tuning
	  netlink receive buffer size in Linux to avoid buffer overruns.

2004-08-26  Miles Nordin  <carton@Ivy.NET>

	* ipforward_sysctl.c (mib_ipv6): Use size_t for len, per
	  sysctl(3), rather than int.  (Needed on NetBSD/alpha to display
	  forwarding status correctly.)

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

	* zserv.c: (zebra_init) remove implicit ip forward enabling
	
2004-08-19 Paul Jakma <paul@dishone.st>

        * irdp_main.c: update to match sockopt renames.
        * irdp_packet.c: include sockopt.h and update to match sockopt
	  renames.
                
2004-08-11  Greg Troxel  <gdt@fnord.ir.bbn.com>

	* rtadv.c (rtadv_send_packet): Allocate space for control messages
	more carefully; it was wrong on NetBSD/sparc where CMSG alignment
	is to 8 bytes instead of 4, and overwriting the address.  Use the
	provided macros for determining lengths.

2004-07-23 Sowmini Varadhan <Sowmini.Varadhan@Sun.COM>

        * if_ioctl_solaris.c: HAVE_IPV6 ifdef fixups
        * zserv.c: ditto
        * ioctl_solaris.c: ditto.
        * interface.c: cast for LLADDR
        * interface.h: Add guards, include redistribute.h and remove
          extraneous definitions of zebra_interface_{up,down}_update
        * ioctl.h: Add AF_IOCTL define for non SOLARIS_IPV6
        * redistribute.h: include dependent header, zserv.h
        * zserv.h: include dependent header, rib.h

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

	* irdp_main.c: use setsockopt_pktinfo_ipv4
	* irdp_packet.c: use SOPT_SIZE_CMSG_PKTINFO_IPV4 and 
	  getsockopt_pktinfo_ifindex()

2004-07-13  David Wiggins <dwiggins@bbn.com

	* kernel_socket.c (rtm_flag_dump): terminate buffer with '\0', not '0'.

2004-07-13 Hasso Tepper <hasso@estpak.ee>

	* irdp_main.c: Add privilege change.

2004-07-12  Hasso Tepper <hasso@estpak.ee>

	* irdp_interface.c: follow common style while naming vty command
	  functions. Avoids confusion in extract.pl.

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

	* main.c: define thread_master variable so that linking with
	libzebra.so doesn't fail.  Arguably zclient.o should be in a
	separate library, but this is far less disruptive.

2004-06-12 Robert Olsson <Robert.Olsson at data.slu.se>

        * Added IRDP support.

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

	* rtadv.c: Removed "[no] ipv6 nd send-ra" command. Replaced "ipv6 nd
	  prefix-advertisement" with "ipv6 nd prefix". Rewrite syntax of
	  "ipv6 nd prefix" command to allow various combinations of parameters
	  and flags. No defaults in configuration. Replaced on-link and
	  autoconfig with off-link and no-autoconfig flags in command syntax.
	  Cosmetic fixes in all commands. Documentation to reflect all changes.

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

	* Makefile.am: support for IOCTL_METHOD, as per Sowmini's patch.
	* if_ioctl_solaris.c: Fixup some erroneous privilege changes and
	  add privs.h header.
	* ioctl_solaris.c: ditto
	* ioctl.h: Add if_ioctl_ipv6 prototype and AF_IOCTL for SOLARIS_IPV6
	* kernel_socket.c: Fix SAROUNDUP, compiler doesnt like do..while
	  RHS in assignments :)
	* redistribute.c: (zebra_interface_delete_update) only used
	  if RTM_IFANNOUNCE and NETLINK is available.
		 
2004-05-09 Paul Jakma <paul@dishone.st>

	* zserv.c: (zsend_route_multipath) Set the nexthop_num
	  field correctly. Add NEXTHOP_TYPE_IPV6_IFNAME for v6.
	  Conditionally set ZAPI_MESSAGE_METRIC flag - only for adds.
	  (zsend_ipv4_add) cruft, deleted.
	  (zsend_ipv4_delete) ditto.
	  (zsend_ipv6_add) ditto.
	  (zsend_ipv6_delete) ditto.
	* ioctl.c: (if_get_mtu) set mtu6 to mtu
	* mtu_kvm.c: (if_kvm_get_mtu) set mtu6 to mtu
	* rt_netlink.c: (netlink_interface) set mtu6 to mtu
	  (netlink_link_change) ditto 
	* ipforward_solaris.c: fix typo of ND variable.
	* if_ioctl_solaris.c: Add zprivs support.
	* ioctl_solaris.c: ditto.
		  
2004-05-09 Sowmini Varadhan <sowmini.varadhan@sun.com>

	* zserv.c: (zsend_ipv{4,6}_{add,delete}_multipath) collapsed
	  into single zsend_route_multipath function.
	  (zsend_interface_{up,down}) collapsed into zsend_interface_update.
	  (zsend_interface_address_{add,delete}) collapsed into 
	  zsend_interface_address.
	  (zsend_interface_add) send mtu6.
	  (zsend_interface_delete) ditto.
	  (zebra_write) remove unused function.
	  (various) Apply static qualifier. Add comments.
	* zserv.h: Definitions changed as per above.
	* redistribute.c: Changes as per zserv.c.
	* interface.c: (if_delete_update) only used with HAVE_NETLINK
	  and RTM_IFANNOUNCE.
	  (if_flag_dump_vty) Solaris IFF_IPV4 and IFF_IPV6 if flags
	  (if_dump_vty) print mtu6 if not same as mtu	  
	* if_ioctl_solaris.c: New file, Solaris interface ioctl methods.
	* ioctl_solaris.c: New file, Common solaris ioctl methods.
	
2004-04-06  Krzysztof Oledzki <oleq@ans.pl>

	* rt_netlink.c: Do not ignore metric when reading kernel routing
	  table on Linux with rt_netlink interface.

2004-03-18  Hasso Tepper <hasso@estpak.ee>

	* interface.c: Temporary fix for handling secondary addresses
	  with label.

2004-02-12  Hasso Tepper  <hasso@estpak.ee>

	* zserv.c: Added "ipv6 forwarding" command.

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

	* kernel_socket.c (kernel_read): Use sockaddr_storage in buffer
	for reading kernel messages to ensure enough space (necessary on
	Solaris due to sockaddr_dl being large).  Thanks to Sowmini
	Varadhan for help with this change.

2004-01-06  Greg Troxel  <gdt@t1.ir.bbn.com>

	* rtadv.c (rtadv_send_packet): Change perror to zlog_err.

2004-01-05  Greg Troxel  <gdt@fnord.ir.bbn.com>
	* kernel_socket.c (ifm_read): Major cleanup.  Use Sowmini's code
	to find the sockaddr_dl in all cases, narrowing the Solaris ifdef
	to just the accomodation of broken kernels.  Check sockaddr_dl
	carefully up front, and later assume any non-NULL sdl pointer is
	valid.  Clean up types and variable declarations, and rename
	WRAPUP to SAROUNDUP to make the name fit the behavior.

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

	* kernel_socket.c (kernel_read): Add a sockaddr_dl to the ifmsg
	structure, because on Solaris sockaddr_dl is far larger than the
	base sockaddr structure.  (The code had previously been failing to
	read all the data.)
	
2004-01-05  Greg Troxel  <gdt@ahi.ir.bbn.com>

	* kernel_socket.c (kernel_read): Look up interfaces by index
	first, so that state changes which do not include a sockaddr_dl
	now work.  Add many sanity checks.  In
	particular, do not assume that a sockaddr_dl follows a message
	without checking the ifm_addrs flags, and do not trust the length
	in a sockaddr_dl.  Add/clarify many comments.

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

	* rtadv.c: reorder includes to avoid compiler warning (define
	structs before using them in prototypes)

2003-05-25 Jim Crumpler <Jim.Crumpler@edion.com>

  * zserv.c: Add "ip forwarding" command.

2003-05-16 Gilad Arnold <gilad.arnold@terayon.com>

	* zebra_rib.c: Fix memory leaks for ifname nexthops

2003-04-19 Israel Keys <ikeys@agile.tv>

	* rt_netlink.c: BLOCK on netlink while initialising

2003-02-06  Francois Deppierraz <francois@ctrlaltdel.ch>

	* rt_netlink.c (netlink_route_multipath): Set RTM_F_EQUALIZE when
	it exists.

2002-09-28  Akihiro Mizutani <mizutani@net-chef.net>

	* zebra_rib.c (static_add_ipv4): Null0 static route is added.

2002-09-10  Jochen Friedrich <chris+zebra@scram.de>

	* rt_netlink.c: Add check for EAGAIN.
	* kernel_socket.c: Likewise

2002-06-12  Israel Keys <ikeys@oz.agile.tv>

	* rt_netlink.c: Setting the NLM_F_ACK flag on the netlink command
	  message so that we get an ACK for successful netlink commands.
	  Change the netlink socket to BLOCKING while we wait for a
	  response; be it an ACK or an NLMSG_ERROR.  Change
	  netlink_parse_info to deal with ACK messages.

2001-11-01  Jun-ichiro itojun Hagino <itojun@iijlab.net>

	* rtadv.c (rtadv_make_socket): setsockopt(IPV6_CHECKSUM) does not
	work for ICMPv6 socket.

2001-10-24  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>

	* rib.c (rib_process): Select connected route any case.

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

	* interface.c (no_ip_address_secondary): Add "no" to command.

2001-10-18  NOGUCHI Kay  <kay@v6.access.co.jp>

	* ioctl.c (if_prefix_add_ipv6): Set the prefered and valid lifetime
	to infinity as the freebsd4.4 workaroud.

2001-08-26  mihail.balikov@interbgc.com

	* zebra_snmp.c: Fix snmpwalk problem such as IPv4 address
	A.B.C.255.

2001-08-22  NOGUCHI Kay <kay@v6.access.co.jp>

	* rtadv.c: Do not send RA to loopback interface.

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

	* ioctl.c (if_set_prefix): Remove Linux 2.0 specific connected
	route treatment.

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

	* zebra-0.92a released.

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

	* rib.c: Kernel route is treated as EGP routes in nexthop active
	check.

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

	* zebra-0.92 released.

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

	* rib.c (show_ip_route_prefix_longer): Add longer-prefix option to
	show route commands.

2001-07-29  Yon Uriarte <havanna_moon@gmx.net>

	* zserv.c (zsend_ipv4_add_multipath): Add
	NEXTHOP_TYPE_IPV4_IFINDEX check.

2001-07-29  NOGUCHI Kay <kay@v6.access.co.jp>

	* rtadv.c: Apply valid lifetime, preferred lifetime, onilnk flag,
	autonomous address-configuration flag patch.
	(no_ipv6_nd_suppress_ra): Change "ipv6 nd send-ra" to "no ipv6 nd
	suppress-ra".

2001-07-24  NOGUCHI Kay <kay@v6.access.co.jp>

	* rtadv.c (ipv6_nd_ra_interval): Add "ipv6 nd ra-interval SECONDS"
	command.

2001-07-24  Jun-ichiro itojun Hagino <itojun@iijlab.net>

	* rt_socket.c (kernel_rtm_ipv4): Add KAME/NetBSD151 equal cost
	multicast FIB support both IPv4 and IPv6.

2001-07-24  Hal Snyder <hal@vailsys.com>

	* if_ioctl.c (interface_list_ioctl): Fix bug of failing to get the
	full list of interfaces on some configurations of OpenBSD.

2001-07-23  NOGUCHI Kay <kay@v6.access.co.jp>

	* rtadv.c (ipv6_nd_send_ra): Apply [zebra 9320] to fix "ipv6 nd
	send-ra" bug.
	(ipv6_nd_ra_lifetime): "ipv6 nd ra-lifetime 0" for default router
	availability.
	(ipv6_nd_managed_config_flag): "ipv6 nd managed-config-flag" is
	added.
	(ipv6_nd_other_config_flag): "ipv6 nd other-config-flag" is added.
	
2001-07-23  Jun-ichiro itojun Hagino <itojun@iijlab.net>

	* ioctl.c (if_ioctl): Change ioctl argument from int to u_long.

	* rt_ioctl.c: Likewise.

2001-07-23  Jun-ichiro itojun Hagino <itojun@iijlab.net>

	* kernel_socket.c (rtm_write): Only set RTF_CLONING when the
	interface is not p2p.

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

	* ioctl.c (if_prefix_add_ipv6): Fix argument type.

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

	* zserv.c (zsend_interface_delete): Use client->obuf instead of
	allocating new stream.

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

	* rt_netlink.c: Revert RTPROT_BOOT change.

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

	* rt_netlink.c (netlink_route_change): Skip RTPROT_BOOT route.
	(netlink_routing_table): Likewise.

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

	* zserv.c (zsend_ipv4_add_multipath): Send metric value to
	protocol daemons.

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

	* rt_netlink.c (netlink_routing_table): Do not return
	tb[RTA_GATEWAY] is NULL.  Reported by: "Michael O'Keefe"
	<mokeefe@qualcomm.com>.

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

	* if_ioctl.c (interface_list_ioctl): Call if_add_update().
	Suggested by: Chris Dunlop <chris@onthe.net.au>.

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

	* rib.c (nexthop_active_ipv4): When nexthop type is
	NEXTHOP_TYPE_IPV4_IFINDEX, propery set the ifindex to rifindex.

	* zserv.c: Initialize rtm_table_default with 0.

	* zebra-0.91 is released.

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

	* kernel_socket.c (rtm_read): Filter cloned route.  Suggested by:
	Jun-ichiro itojun Hagino <itojun@iijlab.net>

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

	* connected.c (connected_up_ipv6): When point-to-point destination
	address is ::, use local address for connected network.
	(connected_down_ipv6): Likewise.

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

	* zserv.c (zebra_serv): Add missing close() call.  Reported by:
	David Waitzman <djw@vineyard.net>.

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

	* rib.c (rib_lookup_ipv4): New function for checking exact match
	IGP route.

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

	* rib.c (show_ipv6_route_protocol): Fix bug of "show ip route
	route-type".

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

	* interface.c (zebra_interface): Do not call
	zebra_interface_add_update for inactive interface.

	* zserv.c (zsend_interface_address_add): Send interface address
	flag.
	(zsend_interface_address_delete): Likewise.

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

	* interface.c (if_addr_add):  Add flags.

	* connected.c (ifa_add_ipv4): Add new function for interface
	address handling.
	(ifa_delete_ipv4): Likewise.

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

	* rib.c (rib_update): Update IPv6 RIB.

	* kernel_socket.c (ifam_read): Call if_refresh() for update
	interface flag status.  This is for implicit interface up on *BSD.

	* interface.c (if_refresh): Add interface flag refresh function.

	* kernel_socket.c (rtm_read): Fetch link-local address interface
	index.
	(ifan_read): We need to fetch interface information.  Suggested
	by: Yasuhiro Ohara <yasu@sfc.wide.ad.jp>.

	* rib.c (static_ipv6_nexthop_same): Add check for
	NEXTHOP_TYPE_IPV6_IFNAME.

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

	* rib.h (NEW_RIB): Turn on NEW_RIB flag.  IPv6 new RIB code are
	taken into place.

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

	* rib.c (static_ipv6_write): Display STATIC_IPV6_GATEWAY_IFNAME
	configuration.
	(rib_delete_ipv6): Handle same route conter for IPv6 connected
	route.
	(show_ipv6_route_protocol): New command.
	(show_ipv6_route_addr): Likewise.
	(show_ipv6_route_prefix): Likewise.
	(rib_update): Sweep kernel route when it is cleaned up.

	* rt_socket.c (kernel_add_ipv6): Add NEXTHOP_IPV6_IFNAME
	treatmenet.

	* rt_netlink.c (kernel_init): Likewise.

	* rt_ioctl.c (kernel_ioctl_ipv6_multipath): Likewise.

	* rib.c (rib_add_ipv4): Cope with same connected route on a
	interface.  Suggested by: Matthew Grant <grantma@anathoth.gen.nz>.
	(nexthop_ipv6_ifname_add): Add NEXTHOP_IPV6_IFNAME treatmenet.

	* rib.h (struct new_rib): Add refcnt to keep track on the
	reference of same connected route.

	* ioctl.c (if_set_prefix): Add check for GNU_LINUX.

2001-01-13  Yasuhiro Ohara <yasu@sfc.wide.ad.jp>

	* kernel_socket.c (ifan_read, rtm_type_str): Add RTM_OIFINFO check.
	(rtm_type_str): Add RTM_IFANNOUNCE check.
	(ifan_read): New function.
	(kernel_read): Add case for RTM_IFANNOUNCE.

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

	* rt_ioctl.c (kernel_ioctl_ipv6_multipath): New function.

	* rt_netlink.c (netlink_route_multipath): IPv6 address ifindex
	treatment.

	* connected.c (connected_up_ipv6): Add dest value check.

	* rib.c (nexthop_active_ipv6): Do not touch IPv6 nexthop's
	ifindex.
	(rib_add_ipv4): Import rib_add_ipv6() same route check code.
	(nexthop_active_check): NEXTHOP_TYPE_IPV6_IFINDEX activity is only
	checked by ifindex.

	* rt_socket.c (kernel_rtm_ipv6_multipath): New function.

	* redistribute.c (redistribute_add): Use
	zsend_ipv6_add_multipath().
	(redistribute_delete_multipath): Use
	zsend_ipv6_delete_multipath().

	* interface.c (ip_address): Check current IP address to avoid
	duplicate.

	* rib.c (rib_delete_ipv4): When deleted route is connected route,
	check ifindex.
	(rib_add_ipv4): When connected route is added do not perform
	implicit withdraw.
	(rib_delete_ipv4): Check ifindex for connected route.

	* kernel_socket.c (rtm_read): When route has RTF_STATIC, set
	ZEBRA_FLAG_STATIC for indicate as persistent route.
	(ifam_read): Unset interface index from link-local address when
	IPv6 stack is KAME.

	* rib.c (rib_update): Do not delete persistent kernel route.

	* rib.h (struct new_rib): Integrate RIB_FLAG_* to ZEBRA_FLAG_*.

	* rt_socket.c (kernel_add_ipv6_multipath): Add placeholder.
	(kernel_delete_ipv6_multipath): Likewise.

	* rt_netlink.c (netlink_talk): Give struct nlsock to netlink_talk.

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

	* rib.c (rib_update): Revert Matthew Grant's patch
	zebra_cvs_newribfix.patch.  Use struct rib->ifindex for kernel
	interface index.  Introduce NEXTHOP_TYPE_IPV4_IFINDEX to support
	that.  Add support for address deletion situation.

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

	* interface.c: Remove HAVE_IF_PSEUDO part.

	* rib.h: Likewise.

	* rt_netlink.c (netlink_link_change): Likewise.

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

	* zserv.c: Remove OLD_RIB codes.

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

	* zebra-0.90 is released.

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

	* interface.c (if_new_intern_ifindex): Allocate a new internal
	interface index.
	(if_addr_refresh): Fix up ip addresses configured via zebra.
	(if_add_update): Handle an interface addition.
	(if_delete_update): Handle an interface delete event.

	* rib.c (nexthop_ipv4_add): Add kernel route deletion process when
	interface goes down.

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

	* interface.c (if_dump_vty): When HAVE_NET_RT_IFLIST is defined,
	NetBSD also use this function.  Suggested by Jasper Wallace
	<jasper@ivision.co.uk>.

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

	* rib.c (nexthop_active_ipv4): Move back to set methodo to old
	one.

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

	* rib.c (rib_add_ipv4): EBGP multihop set ZEBRA_FLAG_INTERNAL
	flag, so treat it.

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

	* rt_netlink.c (netlink_talk_ipv6): When IPv6 route message is
	sent from netlink_cmd, the same message comes from netlink.  To
	avoid confusion, temporary netlink_talk_ipv6 use netlink.sock
	instead of netlink_cmd.sock.

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

	* zserv.h (ZEBRA_SERV_PATH): Change "/tmp/zebra" to "/tmp/.zebra".
	Change "/tmp/zserv" to "/tmp/.zserv".
	
2000-12-29  Frank van Maarseveen <F.vanMaarseveen@inter.NL.net>

	* rt_netlink.c (struct nlsock): Divide kernel message into listen
	socket and command socket.
	(netlink_talk): Remove socket listen code.  Use netlink_parse_info
	for read kernel response.

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

	* rib.c (vty_show_ip_route): Show uptime of the RIP,OSPF,BGP
	routes.

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

	* rt_netlink.c (netlink_route_multipath): Metric value is
	reflected to kernel routing table.

	* rt_ioctl.c (kernel_ioctl_ipv4_multipath): Likewise.

	* kernel_socket.c (rtm_write): Likewise.

	* rib.c (nexthop_active_ipv4): Only iBGP route perform recursive
	nexthop lookup.

	* rt_ioctl.c (kernel_ioctl_ipv4_multipath): Add ioctl version of
	new RIB implementation.

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

	* rib.h: Remove MULTIPATH_NUM.  It is defined by configure script.

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

	* rib.c (rib_if_up): Call rib_fib_set instead of RIB_FIB_SET for
	proper redistribution.

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

	* rib.c (nexthop_active_ipv4): Add self lookup nexthop check.
	(show_ip_route_protocol): Support new RIB.

	* rt_netlink.c (netlink_route_change): Do not return when gate is
	NULL.

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

	* rib.c (rib_lookup_ipv4_nexthop): IBGP nexthop check function is
	updated.
	(rib_add_ipv4): Free implicit withdraw route's RIB.

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

	* rib.c (nexthop_active_ipv4): Check indirect nexthop.

	* redistribute.c (redistribute_add_multipath): Redistribution
	works with new rib code.

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

	* rt_netlink.c (netlink_route_multipath): Check useful nexthop
	number.
	(netlink_route_multipath): Clear rtnh_flags and rtnh_hops.

	* rib.c (nexthop_active_update): Set flag for the rib's nexthop
	activity is changed.
	(nexthop_active_check): Before checking interface is up, make it
	sure the interface exist.

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

	* rib.c (ip_route): New RIB prototype.

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

	* zserv.c (zsend_interface_add): Send hardware address when
	hw_addr_len is greater than 0.

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

	* connected.c (connected_up_ipv4): Fix ptop bug.  The destination
	network should be installed into routing table.
	(connected_down_ipv4): Likewise.
	(connected_add_ipv4): Change to use connected_up_ipv4.
	(connected_delete_ipv4): Likewise.

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

	* rt_netlink.c (netlink_interface_addr): Revert Harald Welte
	<laforge@gnumonks.org>'s ptop patch then back to original code to
	avoid duplicated connected route problem.  Suggested by Frank van
	Maarseveen <F.vanMaarseveen@inter.NL.net>.

	* kernel_socket.c (rtm_read): Make behavior consistent even #ifdef
	DEBUG is defined.  Reported by Jun-ichiro itojun Hagino
	<itojun@iijlab.net>.

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

	* main.c (main): Call zebra_snmp_init() when it is enabled.

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

	* zserv.c (zebra_serv_un): UNIX domain socket server of zebra
	protocol.

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

	* rib.c (rib_add_ipv4): Same check bug is fixed.

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

	* rib.c (rib_if_down): Remove kernel route when the interface goes
	down.

	* debug.c: New command "debug zebra kernel" is added.

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

	* zebra-0.89 is released.

2000-09-24  Harald Welte <laforge@gnumonks.org>

	* rt_netlink.c (netlink_interface_addr): Fix point-to-point address
	treatment in netlink interface.

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

	* rib.c (rib_if_down): Pull static route only.  Protocol daemon
	must withdraw routes when interface goes down.
	(rib_add_ipv4): Check nexthop when replace route.

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

	* if_ioctl.c (if_getaddrs): New function for looking up
	interface's address by getifaddrs().

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

	* connected.c (connected_delete_ipv4): Add check for connected
	address is found or not.
	(connected_add_ipv6): Reflect IPv6 connected address change to
	protocol daemons.
	(connected_delete_ipv6): Likewise.

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

	* rib.c (rib_delete_ipv4): Reverted the change from pseudo
	interface patch to original.  Because ospfd deletes routes using
	zero ifindex.

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

	* zebra-0.88 is released.

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

	* rib.c (show_ip_route_protocol): Help string correction.
	(show_ip_route_prefix): Check prefix mask.
	(show_ip_route_vty_detail): Display distance and metric.

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

	* zserv.c (zsend_interface_add): Change ifindex store size from
	two octet to four.
	(zsend_interface_delete): Likewise.
	(zsend_interface_address_add): Likewise.
	(zsend_interface_address_delete): Likewise.
	(zsend_interface_up): Likewise.
	(zsend_interface_down): Likewise.

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

	* rib.c (rib_add_ipv4): Do not install distance 255 route.

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

	* interface.c (bandwidth_if), (no_bandwidth_if):  Call
	zebra_interface_up_update () instead of using if_up() and if_down().

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

	* interface.c (bandwidth_if): Fix help string.

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

	* interface.c (if_dump_vty): Display bandwidth value.
	(bandwidth_if): New command "bandwidth <1-10000000>" is added.
	When interface is up, force protocol daemons to recalculate routes
	due to cost change.
	(no_bandwidth_if): Likewise.
	(if_config_write): Output bandwidth configuration.

	* zserv.c (zsend_interface_add): Send bandwidth value.
	(zsend_interface_up): Likewise.
	(zsend_interface_down): Likewise.


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

	* rib.c (show_ip_route_protocol): "show ip route
	(bgp|connected|kernel|ospf|rip|static)" is added.

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

	* rib.c (rib_lookup_ipv4_nexthop): Check parent node until IGP
	nexthop is found.
	(rib_add_ipv4_internal): Set fib ifindex to rib ifindex.

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

	* redistribute.c (redistribute_delete): Fix bug of default route
	redistribute treatment.

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

	* rib.c (rib_init): Install ip_node in rib.c instead of zserv.c.
	Change default distance value.

                    Old         New
	------------------------------------------
	system      10           0
	kernel      20           0
	connected   30           0
	static      40           1
	rip         50         120
	ripng       50         120
	ospf        60         110
	ospf6       49         110
	bgp         70         200(iBGP)  20(eBGP)
	------------------------------------------

	* zserv.c (client_lookup): Function removed.
	(zsend_interface_add): Use client's output buffer.  Check ifinfo
	flag.
	(zsend_interface_delete): Likewise.
	Delete ipv4_static_radix and ipv6_static_radix.

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

	* zserv.h (struct zebra_client): When client request interface
	information, ifinfo is set.

	* rib.c: Temporary Revert changes for pseudo interface.

	* rib.h: Likewise.

	* zserv.c: Likewise.

	* interface.c: Likewise.
	
2000-08-02  David Lipovkov <davidl@nbase.co.il>

	* interface.c (zebra_if_init): Install interface "pseudo"
	commands.

	* rib.c (rib_create): ifname argument is added.
	(rib_add_ipv4_pseudo): New function is added.
	(rib_delete_ipv4_pseudo): Likewise.

	* rib.h : Delete INTERFACE_UNKNOWN definition.  Add prototype for
	pseudo interface functions.

	* rt_netlink.c (netlink_link_change): Check for pseudo interface.

	* zserv.c (ip_route): When destination is pseudo interface, call
	rib_add_ipv4_pseudo().

	* zserv.c (no_ip_route): Trim "unknown" argument.

2000-07-26  kunitake@dti.ad.jp

	* if_ioctl.c (if_get_hwaddr): Fix hardware address length from 8
	to 6.

	* rtadv.c (rtadv_send_packet): Fix shift bug for hardware address.

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

	* interface.c: Use install_default() for common VTY commands.

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

	* if_ioctl.c (interface_list_ioctl): A interface list size is
	calculated from ifreq->if_addr.sa_len.  This is for OpenBSD.

	* ioctl.c (if_get_mtu): Remove codes for SIOCGIFDATA.

2000-07-09  Chris Dunlop <chris@onthe.net.au>

	* if_ioctl.c (if_get_index): Add check for HAVE_BROKEN_ALIASES.

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

	* zserv.c (zebra_client_read): Add ZEBRA_REDISTRIBUTE_{ADD,DELETE}
	message handling.

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

	* zserv.c: "ip route A.B.C.D/M unknown" command is added.

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

	* rib.c: Remove old kernel route when new route comes in.

2000-06-13  David Lipovkov <davidl@nbase.co.il>

	* rib.c (rib_if_up): Add check for unknown interface.

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

	* rib.h: Define INTERFACE_UNKNOWN.

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

	* Makefile.am (EXTRA_DIST): Move irdp.c until implementation is
	finished.

2000-06-05  David Lipovkov <davidl@nbase.co.il>

	* interface.c (if_zebra_delete_hook): Call rib_if_delete().

	* redistribute.c (zebra_interface_delete_update): New function.

	* redistribute.h (zebra_interface_delete_update): New function
	prototype.

	* rib.c (rib_if_delete): New function.  Walk down all routes and
	delete all on the interface.

	* rib.h: New function prototype.

	* rt_netlink.c (netlink_link_change): Call
	zebra_interface_delete_update ().

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

	* if_ioctl.c (interface_info_ioctl): Check interface's flag before
	checking interface's address.

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

	* GNOME-PRODUCT-ZEBRA-MIB: New file.

	* GNOME-SMI: New file.

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

	* irdp.c: New file from 1997 development code.
	* irdp.h: Likewise.

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

	* rtadv.c (rtadv_send_packet): Enclose router advertisement
	logging with IS_ZEBRA_DEBUG_PACKET.

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

	* zserv.c (zebra_client_close): Remove client structure from
	client_list when connection is terminated.

2000-03-21  David Lipovkov <davidl@nbase.co.il>

	* connected.c (connected_add_ipv4): Allows all necessary structure
	updates for connected route, but doesn't insert it into rib if
	it's interface is down.

2000-01-21  Hideto Yamakawa <hideto.yamakawa@soliton.co.jp>

	* rtread_getmsg.c: Set some definition for Solaris 2.5 and Solaris
	2.5.1.

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

	* rib.c (no_ipv6_route_ifname): Fix buf of cheking return value
	from str2prefix_ipv6().

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

	* rt_socket.c: Revert to use RTF_HOST for IPv4 with /32 route and
	IPv6 with /128 routes.
	(kernel_rtm_ipv4): In case of /32 route's gateway is interface. It
	should have mask for cloning.

1999-12-26  Jochen.Friedrich@genorz.de

	* interface.c (if_dump_vty): Fix a bug of missing VTY_NEWLINE.

1999-12-23  Alex Zinin <zinin@amt.ru>
	* interface.*: dynamic int up/down support

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

	* ipforward_proc.c (dropline): Move dropline() from lib/dropline.c

	* rtread_proc.c (proc_route_read): Don't use dropline().

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

	* kernel_socket.c (rtm_read): When message is RTM_GET, it has own
	process's pid.

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

	* main.c (main): Change to default log output to ZLOG_STDOUT.

	* zserv.c (zebra_serv): More detailed error print.

1999-11-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* kernel_socket.c (rtm_read): Check old pid for static route
	insertion check.

1999-11-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* interface.c (if_dump_vty): BSDI/OS uses 64bit for interface
	statistics counter.

	* mtu_kvm.c: New file added.

1999-11-27  Vladimir B. Grebenschikov <vova@express.ru>

	* kernel_socket.c (rtm_write): Set RTF_CLONING flag for
	route to the directly connected interface.

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

	* rt_socket.c: Delete USE_HOST_BIT definition.

1999-11-21  Michael Handler <handler@sub-rosa.com>

	* rtread_getmsg.c: Undef some definition to resolve conflict.

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

	* kernel_socket.c (rtm_write): Change to use pre stored struct_dl
	value for gateway specification.

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

	* rt_socket.c (kernel_rtm_ipv4): Even mask is 32 under IPv4 or
	128 under IPv6, don't use RTF_HOST.

1999-11-21  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* Makefile.am (EXTRA_DIST): Add rtread_getmsg.c.

1999-11-21  Michael Handler <handler@sub-rosa.com>

	* rtread_getmsg.c: Added for Solaris 2.6 support.

1999-11-18  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* rtread_sysctl.c (rtm_read_route): RTM_DELETE handling added.

	* rt_socket.c (kernel_read): Better BSD routing socket support.

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

	* client_main.c: Disable making obsolete zebra test `client'
	command.

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

	* zebra.c: Renamed to zserv.c.

	* zebra.h: Global definitions are moved to lib/zebra.h.  Then
	renamed to zserv.h.

1999-10-15  Jordan Mendelson <jordy@wserv.com>

	* if_ioctl.c: Add Linux 2.2.X's alias support and dynamic
	interface.  Remove ugly MAX_INTERFACE handling codes.

1999-09-17  Satosi KOBAYASI <kobayasi@north.ad.jp>

	* Fix serious bug of IPv6 route deletion.

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

	* ioctl.c (if_set_prefix): Properly set broadcast address.

1999-09-04  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* rib.c (rib_add_ipv6, rib_delete_ipv6): now protocol daemons
	can install connected route to kernel via zebra

1999-08-24  VOP <vop@unity.net>

	* rib.c: Include "sockunion.h"

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

	* ipforward.h: New file.

	* zebra.h: Obsolete message ZEBRA_GET_ALL_INTERFACE,
	ZEBRA_GET_ONE_INTERFACE, ZEBRA_GET_HOSTINFO are deleted.

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

	* zebra.h (ZEBRA_INTERFACE_ADDRESS_ADD):
	ZEBRA_INTERFACE_{ADD,DELETE} added.

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

	* rib.c: show ip route A.B.C.D works.

	* zebra.c (zebra_read_ipv4): Add ifindex to zebra messages.

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

	* zebra.h: New Zebra message ZEBRA_INTERFACE_{ADD,DELETE} added.

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

	* interface.h: New file.
	* Makefile.am: Add interface.h

1999-08-04  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* redistribute.c (zebra_redistribute): give ifindex to client.

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

	* main.c (longopts): -k, --keep_kernel option added.

1999-07-18  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* rt_socket.c (rtm_write): forgot closing socket bug fixed.

1999-07-17  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* rib.c (show_ipv6_cmd): if rib is link show interface name.

1999-07-17  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* rt_socket.c (rtm_write): use sockaddr_dl when null gateway.

1999-07-16  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* rt_socket.c (rtm_write): ipv6 route table bug fixed.

1999-07-15  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* zebra.c (zebra_read_ipv6): read link prefix from ospf6 support

1999-07-15  Yasuhiro Ohara  <yasu@sfc.wide.ad.jp>

	* rt_socket.c (kernel_rtm_ipv6): gate treatment bug fixed.

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

	* if_sysctl.c (ifm_read): Clear sockunion argument before fetching
	data.  Suggested by "Chris P. Ross" <cross@eng.us.uu.net>

1999-07-08  HEO SeonMeyong <seirios@Matrix.IRI.Co.Jp>

	* interface.c (if_tun_add): Add KAME's gif tunnel setting codes.

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

	* zebra.c (zebra_serv): Only accept loopback address connection.

1999-06-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* zebra.h (ZEBRA_ROUTE_EXTERNAL): Add zebra messages flags

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

	* ipforward_proc.c: ipforward_on () and ipforward_off () added.

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

	* ipforward_proc.c (ipforward_ipv6): Check for IPv6 forwarding
	using /proc file system is added.

1999-06-06  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if_ioctl.c (if_get_index): Interface index set bug is fixed by
	adding #else at the middle of function.  Suggested by David Luyer
	<luyer@ucs.uwa.edu.au>.

1999-05-29    <kunihiro@zebra.org>

	* rt_ioctl.c: Comment out #include <linux/ipv6_route.h>.

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

	* zebra.h (ZEBRA_ROUTE_MAX): Add new define for the max value of
	the sort of routes.

1999-05-25  Patrick Koppen <koppen@rhrk.uni-kl.de>

	* rt_netlink.c (netlink_socket): Make netlink socket non-blocking.
	(netlink_parse_info): If errno is EWOULDBLOCK then continue to
	parse the message.
	(netlink_talk): Likewise
	
1999-05-17    <kunihiro@zebra.org>

	* redistribute.c (zebra_check_addr): Added for loopback address
	check.

1999-05-15  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* rt_netlink.c (netlink_route_change): Tempolary bypass ipv6 route
	change treatment.

	* Makefile.am (noinst_HEADERS): redistribute.h added.

	* redistribute.h: New file.

1999-05-14  Stephen R. van den Berg <srb@cuci.nl>

	* zebra.c (show_table): Show all table configuration DEFUN.
	(config_table): Config table number DEFUN.

	* rt_netlink.c: Add support for multiple routing table.

	* rib.c (rib_weed_table): New function added for delete all
	routes from specified routing table.

	* main.c (signal_init): SIGTERM call sigint.
	(sigint): Loggging more better message.

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

	* rt_netlink.c: Change log () to zlog ().

1999-05-07    <kunihiro@zebra.org>

	* zebra.h (ZEBRA_ROUTE_OSPF6): Added for ospf6d route.

1999-04-20  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* interface.c: Add `no ip address' command.

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

	* rt_netlink.c (kernel_read): Function added for asynchronous
	zebra between kernel communication.

1999-03-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* rtread_sysctl.c (rtm_read): Fix address memcopy overrun bug.
	Reported by Achim Patzner <ap@bnc.net>.

1999-03-03  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* Makefile.am: Install configuration sample with 600 permission.

1999-03-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* Makefile.am: Add -I.. to INCLUDES.

1999-02-18  Peter Galbavy  <Peter.Galbavy@knowledge.com>

	* syslog support added

1999-02-17 Peter Galbavy <Peter.Galbavy@knowledge.com>

	* if_sysctl.c (interface_list): allocated memory free when unknown
	ifm_type is returned.

	* ioctl.c (if_get_mtu): added SIOCGIFDATA treatment.
	
1998-12-15  Magnus Ahltorp <map@stacken.kth.se>

	* interface.c: Header include added.

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

	* rt.h (kernel_delete_ipv6): change int index to unsigned int index.

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

	* if_ioctl.c (interface_list_ioctl): interface flag must be
	checked before check addresses of the interface.

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

	* Makefile.am (INCLUDES): add @INCLUDES@ for Linux IPv6.

1998-10-14  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ioctl.c: Linux version before 2.1.0 need interface route setup.

1998-09-15  HEO SeonMeyong  <seirios@matrix.iri.co.jp>

	* change HYDRANGEA to KAME

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

	* if_ioctl.c (if_addr_ioctl): set address family for getting
	interface's address.
	(if_get_index): silently return when can't get interface's index.

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

	* main.c (main): batch mode option '-b' added.

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

	* ioctl.c (if_set_prefix): add `ip address IPV4ADDR' command.
	* interface.c (shutdown_if): add interface shutdown and no
	shutdown command.

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

	* rib.c (rib_add_ipv6): delete rib_add_in6.

1998-07-27  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* main.c: retain flag is added.

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

	* rtable.[ch]: merged with rib.[ch]

1998-07-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* connected.h: renamed from ifa.h.

1998-06-09  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* rename if.c to interface.c
	* rename ifa.c to connected.c

	* Porting to Debian GNU/Linux 2.0 (hamm).

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

	* rt_netlink.c: renamed from krt_netlink.c
	
	* fib.c: deleted.
	* rt_kvm.c: deleted.
	* rtread_getmsg.c: deleted.

1998-06-07  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.c (multicast): add multicast flag [un]set fucntion.

1998-05-19  Yamshita TAKAO  <jargon@lares.dti.ne.jp>

	* rt_socket.c: Modify for compile on Solaris, but dont't work it.
	  rt_socket.c have some undefined function, so add directive "IMPLEMENT"

1998-05-18  Yamshita TAKAO  <jargon@lares.dti.ne.jp>

	* zebra.c: Modify for compile on Solaris.

1998-05-03  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* main.c: change CONFDIR to SYSCONFDIR.

1998-05-01  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* .cvsignore: added.

1998-04-02  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* client.c: moves to ../lib.

1998-03-30  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if_ioctl.c (if_get_addr): Change address copy from memcopy() to
	structure assignment.

1998-03-30  URA Hiroshi <ura@yamato.ibm.co.jp>

	* if_sysctl.c (ifm_interface_add): sdl->sdl_data copy bug fixed.

1998-02-23  "Hannes R. Boehm" <hannes@boehm.org>

	* if.c (if_init): add config_exit_cmd and config_help_cmd.

1998-01-24  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* rt_ioctl.c (route_ioctl): EPERM treatment added.

1998-01-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* rt_socket.c (kernel_read): communication port zebra between
	kernel is now handled by kernel_read.

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

	* main.c (main): zebra [-P port] can specify vty port number.

1997-12-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* zebra.c: change select will be block.

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

	* add static route treatment.

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

	* rt_netlink.c: add netlink support over GNU/Linux system.

1997-11-23  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* all inet_addr is changed to inet_aton.

	* zebra.c (ip_route): add ip route command for static routes.

1997-11-20  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.c (if_flag_dump): Linux port of if_flag_dump and _vty.

1997-11-19  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.c: add interface command.

1997-11-18  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* ipforward_proc.c : Now works on Linux.

1997-10-25  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* command.c : add completion feature.

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

	* vty.c (vty_command): add vty interface.

1997-10-13  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* zebra.c: add verbose mode.

1997-10-12 SonMyong Ho <s-ho@Matrix.IRI.Co.Jp>

	* Hydrangea for FreeBSD supported
	* in.h: add some prototype.

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

	* rt_socket.c and rtread.c completely rewritten.

1997-10-05  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* rt_socket.c: rename kernel_sock to routing_socket

1997-10-04  Kunihiro Ishiguro  <kunihiro@zebra.org>

	* if.c (if_new): interface structure change from linklist to vector.

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

	* vector.c (vector_init): create vector related function

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

	* Makefile.in: add tags target

	* start IPv6 support for INRIA FreeBSD.

