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