)]}'
{
  "log": [
    {
      "commit": "924b9229717b749e303f3fb161616bebf53b5cdc",
      "tree": "4788cd7cdc18bfc1cd12916ba506c091e9d73fb8",
      "parents": [
        "dc830cbfac8dd9633e070550359a5d6f8dac8fe5"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 16 17:11:24 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 16 17:11:24 2005 +0000"
      },
      "message": "2005-04-16 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* configure.ac: Added AC_ARG_ENABLE(time-check).  By default,\n\t  warning messages will now be printed for threads or commands that take\n\t  longer than 5 seconds, but this configure argument can be used\n\t  to disable the checks or change the threshold.\n\t* thread.h (thread_consumed_time): Declare new function to calculate\n\t  elapsed microseconds.\n\t* thread.c (thread_consumed_time): Must be global not static so we\n\t  can call it from lib/vty.c:vty_command.\n\t  (thread_should_yield): Surround with `#if 0\u0027 to make clear that this\n\t  function is not currently being used anywhere.\n\t  (thread_call): If CONSUMED_TIME_CHECK is defined, print a CPU HOG\n\t  warning message if the thread takes more than CONSUMED_TIME_CHECK\n\t  microseconds.\n\t* vty.c (vty_command): If CONSUMED_TIME_CHECK is defined, print a CPU\n\t  HOG warning message if the command takes more than CONSUMED_TIME_CHECK\n\t  microseconds.\n"
    },
    {
      "commit": "dc830cbfac8dd9633e070550359a5d6f8dac8fe5",
      "tree": "9b412c3e737868b0ef3917b97c5b62165ca6cf13",
      "parents": [
        "03ecfb6789c25d65a35e050661fa7f23f1e4e66e"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Apr 16 15:51:05 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Apr 16 15:51:05 2005 +0000"
      },
      "message": "2005-04-16 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* memtypes.c: the comment about use of comments in the comments\n\t  headers was causing comment within comment warnings from compiler\n\t* memtypes.awk: Add extensive comments on the file format for\n\t  memtypes.c.\n\t  tighten the pattern for the MTYPE matching action (suggestion from\n\t  Andrew) and tighten which field we try the match on.\n"
    },
    {
      "commit": "d45f1f1c3f85952651f27a8a98861ea45fd03789",
      "tree": "a3685403e9f78331e63b3032553d638289fa3aad",
      "parents": [
        "f482ed4d13e73c27424a45e4c8cfaaa363a35d89"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Apr 15 22:18:37 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Apr 15 22:18:37 2005 +0000"
      },
      "message": "2005-04-15 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * Makefile.am: memtypes.awk is gawk dependent, use the GAWK automake\n\t  var.\n\t* memtypes.h: New file, auto-generated, checked in for convenience.\n"
    },
    {
      "commit": "2fd2fd5d4c0e5a67f1b84abe18b54417237b20ab",
      "tree": "106e9f02a377c796ce41f3033beea2404c6e0e58",
      "parents": [
        "d98b74b504554d851d1281017724984069340cad"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Apr 15 11:47:15 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Apr 15 11:47:15 2005 +0000"
      },
      "message": "2005-04-15 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* memtypes.c: The new, unified location for memory type definitions.\n\t  The memtype enum and declarations for memory_lists are built from\n          this automatically and put into memtypes.h.\n        * memtypes.awk: New script to generate memtypes.h from memtypes.c\n        * memory.h: Finally, the enum can banished!\n        * memory.c: Finally, the seperate mtype memory_list definitions can\n          be banished!\n          (log_memstats) Increase width of fields\n          (show_memory_zebra_cmd) display zebra specific memory types.\n          Increase width of fields.\n        * Makefile.am: Add memtypes.{c,h}, add BUILT_SOURCES for memtypes.h\n          Add a rule to build memtypes.h using memtypes.awk.\n          Add memtypes.awk to EXTRA_DIST.\n"
    },
    {
      "commit": "634f9ea20fce82c94407cb677b5487b65bde1973",
      "tree": "32db82e4ae3b0f409d6d06a0fda401f9d5df5cc9",
      "parents": [
        "dfb9a545f8e3500e6a99518193872f526c1f56ba"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Apr 11 15:51:40 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Apr 11 15:51:40 2005 +0000"
      },
      "message": "2005-04-11 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\tImplement non-blocking zclient I/O with buffering.\n\t* zclient.h (struct zclient): Add two fields to support non-blocking\n\t  I/O: struct buffer *wb, and struct thread *t_write.\n\t  (zclient_free): Remove function.\n\t  (zebra_redistribute_send): Change 2nd arg from socket fd to\n\t  struct zclient * (needed to support non-blocking I/O and buffering).\n\t  (zclient_send_message): New function to send an arbitrary\n\t  message with non-blocking I/O.\n\t* zclient.c (zclient_new): Create write buffer.\n\t  (zclient_free): Remove unused function.\n\t  (zclient_stop): Must cancel new t_write thread.  Also, reset\n\t  all buffers: ibuf, obuf, and wb.\n\t  (zclient_failed): New helper function for typical error handling.\n\t  (zclient_flush_data): New thread to flush queued data.\n\t  (zclient_send_message): New function to send the message in\n\t  zclient-\u003eobuf to zebra using non-blocking I/O and buffering.\n\t  (zebra_message_send, zapi_ipv4_route, zapi_ipv6_route): Use\n\t  new zclient_send_message function instead of calling writen.\n\t  (zclient_start): Set socket non-blocking.  Also, change 2nd arg\n\t  to zebra_redistribute_send from zclient-\u003esock to zclient.\n\t  (zebra_redistribute_send): Change 2nd arg to struct zclient *.\n\t  Can now use zclient-\u003eobuf to assemble the message instead of\n\t  allocating a temporary stream.  And call zclient_send_message to\n\t  send the message instead of writen.\n\t  (zclient_read): Convert to support non-blocking I/O by using\n\t  stream_read_try instead of deprecated stream_read.\n\t  (zclient_redistribute): Change 2nd arg to zebra_redistribute_send\n\t  from zclient-\u003esock to zclient.\n\t* ospf6_zebra.c (ospf6_zebra_redistribute, ospf6_zebra_no_redistribute):\n\t  Change 2nd arg to zebra_redistribute_send from zclient-\u003esock\n\t  to zclient.\n\t* ospf_zebra.c (ospf_zebra_add): Call zclient_send_message instead\n\t  of writen.\n\t* rip_zebra.c (rip_redistribute_set, rip_redistribute_unset,\n\t  rip_redistribute_clean): Change 2nd arg to zebra_redistribute_send\n\t  from zclient-\u003esock to zclient.\n\t* ripng_zebra.c (ripng_redistribute_unset, ripng_redistribute_clean):\n\t  Change 2nd arg to zebra_redistribute_send from zclient-\u003esock\n\t  to zclient.\n\t* bgp_zebra.c (bgp_redistribute_set, bgp_redistribute_unset):\n\t  The 2nd arg to zebra_redistribute_send is now zclient instead of\n\t  zclient-\u003esock.\n\t* isis_zebra.h (isis_zebra_finish): Remove declaration of unused\n\t  function.\n\t* isis_zebra.c (isis_zebra_route_add_ipv4): Call zclient_send_message\n\t  to send the message to zebra instead of calling writen directly, since\n\t  zclient_send_message understands non-blocking I/O and will manage\n\t  the buffer queue appropriately.\n\t  (isis_zebra_finish): Remove unused function, particularly since\n\t  the zclient_free function has been removed.\n"
    },
    {
      "commit": "5bb4c1981a518315bf7f4fc81a85baf2061e32fa",
      "tree": "21c20e1b3dbd312049f92147792421c16f96677c",
      "parents": [
        "a8a80d532f3248567b6926b5dbd12509eadd6b43"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 13:27:50 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 13:27:50 2005 +0000"
      },
      "message": "\t* routemap.c: Show description in \"show route-map\" output.\n"
    },
    {
      "commit": "67bf16c0f8179af05bcff04d19226866a8b7e806",
      "tree": "4ff6db9b640602b6b99bd03b3405aeffcbf58850",
      "parents": [
        "926fe8f1fce88d0889e47a9f5c6d78c6bc11f3f6"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Apr 08 19:02:04 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Apr 08 19:02:04 2005 +0000"
      },
      "message": "2005-04-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* sigevent.c: On GNU_LINUX, check whether __USE_GNU is already defined.\n"
    },
    {
      "commit": "926fe8f1fce88d0889e47a9f5c6d78c6bc11f3f6",
      "tree": "78e9dc040253454b518a1a7bab6468a2cbceeb89",
      "parents": [
        "d66a7b56634f88181dd2dd23706c30bf23366424"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Apr 08 18:50:40 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Apr 08 18:50:40 2005 +0000"
      },
      "message": "2005-04-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* vty.c: (vty_log_fixed) Use casts to (void *) to try to eliminate\n\t  compiler warnings when assigning a (const char *) value to\n\t  struct iovec iov_base.\n"
    },
    {
      "commit": "d66a7b56634f88181dd2dd23706c30bf23366424",
      "tree": "42569fbc2de9016ad91db7669565e7b737ca3c11",
      "parents": [
        "6811845b67999861388cf00d3ca0ee8471d29876"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Apr 08 16:42:03 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Apr 08 16:42:03 2005 +0000"
      },
      "message": "2005-04-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: If GNU_LINUX is defined, then define _GNU_SOURCE.  This\n\t  fixes a problem where we were not getting the declaration of strnlen\n\t  in \u003cstring.h\u003e.\n"
    },
    {
      "commit": "4a8164e5b310094315e2c50d73aeea489766a48a",
      "tree": "683c5f04667486d29fc72a094957773ded6aea3b",
      "parents": [
        "3a2ce6a14e3e302c3fdca2ff99143cfd06b145e6"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Apr 08 14:20:18 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Apr 08 14:20:18 2005 +0000"
      },
      "message": "\t* routemap.[ch]: Added \"description ...\" command.\n\t  Closes Bugzilla #167.\n"
    },
    {
      "commit": "3a2ce6a14e3e302c3fdca2ff99143cfd06b145e6",
      "tree": "f27ec1418be4c3e9a123e67ef22ca090bca28906",
      "parents": [
        "528bed4a9a997216ba95e3ae445efa79436cc551"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Apr 08 01:30:51 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Apr 08 01:30:51 2005 +0000"
      },
      "message": "\t* prefix.[hc]: Pass argument to the inet6_ntoa by value making it more\n\t  inet_ntoa alike.\n\t* ripngd.[hc], ripng_interface.c, ripng_peer.c: inet6_ntoa() takes\n\t  argument now by value.\n"
    },
    {
      "commit": "1eb8ef2584833f18fb674e127d59cb5a7f771482",
      "tree": "f5b09d4781de9a9b08839fefb6530e64d2d2ec31",
      "parents": [
        "5920990fecba7e2430af3cfaa8bcbaed40d0ba1a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 07 07:30:20 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 07 07:30:20 2005 +0000"
      },
      "message": "2005-04-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global): Fix up list loops to match changes in lib/linklist,\n\t  and some basic auditing of usage.\n\t* configure.ac: define QUAGGA_NO_DEPRECATED_INTERFACES\n\t* HACKING: Add notes about deprecating interfaces and commands.\n\t* lib/linklist.h: Add usage comments.\n\t  Rename getdata macro to listgetdata.\n\t  Rename nextnode to listnextnode and fix its odd behaviour to be\n\t  less dangerous.\n\t  Make listgetdata macro assert node is not null, NULL list entries\n          should be bug condition.\n          ALL_LIST_ELEMENTS, new macro, forward-referencing macro for use\n          with for loop, Suggested by Jim Carlson of Sun.\n          Add ALL_LIST_ELEMENTS_RO for cases which obviously do not need the\n          \"safety\" of previous macro.\n\t  LISTNODE_ADD and DELETE macros renamed to ATTACH, DETACH, to\n\t  distinguish from the similarly named functions, and reflect their\n\t  effect better.\n\t  Add a QUAGGA_NO_DEPRECATED_INTERFACES define guarded section\n\t  with the old defines which were modified above,\n\t  for backwards compatibility - guarded to prevent Quagga using it..\n\t* lib/linklist.c: fix up for linklist.h changes.\n\t* ospf6d/ospf6_abr.c: (ospf6_abr_examin_brouter) change to a single\n\t  scan of the area list, rather than scanning all areas first for\n\t  INTER_ROUTER and then again for INTER_NETWORK. According to\n\t  16.2, the scan should be area specific anyway, and further\n\t  ospf6d does not seem to implement 16.3 anyway.\n"
    },
    {
      "commit": "5920990fecba7e2430af3cfaa8bcbaed40d0ba1a",
      "tree": "d91dd49e4ed2c03cd0c007660232716f11172a56",
      "parents": [
        "6a52470660000bb6ddba971dc5c40b3422ab49bc"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Apr 05 14:36:49 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Apr 05 14:36:49 2005 +0000"
      },
      "message": "\t* lib/prefix.[hc]: inet6_ntoa utility function copied from\n\t  ripngd/ripngd.c (inet6_ntop).\n\t* ripngd.[hc]: Remove inet6_ntop() and any usage of it. inet6_ntoa()\n\t  from lib is used now.\n\t* ripng_interface.c: inet6_ntop() -\u003e inet6_ntoa().\n\t* ripng_peer.c: inet6_ntop() -\u003e inet6_ntoa().\n"
    },
    {
      "commit": "3d1dc85765816a92f06e0b11f52411dac0f8abae",
      "tree": "d20333a4ddbc271e11998834a4fdbc0e3acd719d",
      "parents": [
        "5b0875287206a0ac1ebe1dca1f6235b8f3df1764"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Apr 05 00:45:23 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Apr 05 00:45:23 2005 +0000"
      },
      "message": "2004-04-05 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* lib/vty.c: Improve logging of failures to open vty socket(s).\n\t  See bugid #163.\n\t* zebra/zserv.c: print more helpful errors when we fail to successfully\n\t  bind and listen on zserv socket. Closes bugzilla #163.\n"
    },
    {
      "commit": "08dbfb691d8e03c7200138d55447fc29916e0362",
      "tree": "54d8718c7bdb035197cebcedef7d3de4f0038d55",
      "parents": [
        "e4319de388b748ba66551f33fecdf7446e754b80"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Apr 03 03:40:52 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Apr 03 03:40:52 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if_ioctl.c: (interface_list_ioctl) Use if_get_by_name_len.\n\t* if_proc.c: (ifaddr_proc_ipv6) Increase size of ifname buffer to\n\t  avoid overflow.\n\t* kernel_socket.c: (ifan_read) Use if_get_by_name_len.\n\t* if.h: Fix comments to reflect that if_lookup_by_name and\n\t  if_get_by_name now require the argument strings to be NUL-terminated.\n\t* if.c: (if_lookup_by_name) Compare using strcmp.\n\t  (if_get_by_name) Pass strlen(ifname) as 2nd arg to if_create.\n"
    },
    {
      "commit": "018546e9656b141eeecdf59f627fcdc9b7381840",
      "tree": "dda8f27fcde00ae6c7ab080224f97b9c9a29dabe",
      "parents": [
        "a349198fd3e4e5692cdc91223f8153cb53c086ce"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 23:05:56 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 23:05:56 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.c: (if_nametoindex) The man page is rather vague, but it seems\n\t  like the argument to if_nametoindex has an implicit maximum length\n\t  of IFNAMSIZ characters.\n"
    },
    {
      "commit": "a349198fd3e4e5692cdc91223f8153cb53c086ce",
      "tree": "e5b366a8ab7ab9ed1c9670faf1f18eef26877ade",
      "parents": [
        "f695b01ff8e9aebc46bdf41f104ad4abbb0ef59e"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 22:50:38 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 22:50:38 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (if_lookup_by_name_len, if_get_by_name_len) New functions.\n\t* if.c: (if_lookup_by_name_len, if_get_by_name_len) New functions.\n\t  (if_get_by_name) Tighten up code.\n\t  (interface) Use new function if_get_by_name_len.\n\t* zclient.c: (zebra_interface_add_read) Use new if_get_by_name_len\n\t  function.\n\t  (zebra_interface_state_read) Use new if_lookup_by_name_len function.\n\t* kernel_socket.c: (ifm_read) Use new if_lookup_by_name_len function\n\t  to save a memcpy.\n\t* if_ioctl_solaris.c: (interface_list_ioctl) Fix subtle bug with new\n\t  if_get_by_name_len function.\n\t* ospf_interface.c: (ospf_vl_new) Use strnlen to fix call to if_create.\n"
    },
    {
      "commit": "851adbd947692bab9985e08865330d75c56ff253",
      "tree": "3295c305da371df1c12398b7e68a9677ddc38b55",
      "parents": [
        "d2fc88962a9a494ecb34167871bb9e7273a25d33"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 18:48:39 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 18:48:39 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* str.c: Replace strlcpy and strlcat with actual working versions\n\t  copied from rsync-2.6.2/lib/compat.c.\n"
    },
    {
      "commit": "d2fc88962a9a494ecb34167871bb9e7273a25d33",
      "tree": "304a1c1a744972bc10b1f677a134907c404b361d",
      "parents": [
        "386e61502d391adb985ac1487825349ec85e6a8c"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 18:38:43 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 18:38:43 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\tFix problems when netlink interfaces are renamed (same ifindex used\n\tfor a new interface).  Start cleaning up some problems with the way\n\tinterface names are handled.\n\t* interface.c: (if_new_intern_ifindex) Remove obsolete function.\n\t  (if_delete_update) After distributing the interface deletion message,\n\t  set ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t  (if_dump_vty) Detect pseudo interface by checking if ifp-\u003eifindex is\n\t  IFINDEX_INTERNAL.\n\t  (zebra_interface) Check return code from interface_cmd.func.\n\t  Do not set internal ifindex values to if_new_intern_ifindex(),\n\t  since we now use IFINDEX_INTERNAL for all pseudo interfaces.\n\t* kernel_socket.c: (ifm_read) Fix code and comments to reflect that\n\t  all internal interfaces now have ifp-\u003eifindex set to IFINDEX_INTERNAL.\n        * rt_netlink.c: (set_ifindex) New function used to update ifp-\u003eifindex.\n\t  Detects interface rename events by checking if that ifindex is already\n\t  being used.  If it is, delete the old interface before assigning\n\t  the ifindex to the new interface.\n\t  (netlink_interface, netlink_link_change) Call set_ifindex to update\n\t  the ifindex.\n\t* if.h: Remove define for IFINDEX_INTERNBASE and add define\n\t  IFINDEX_INTERNAL 0, since all internal (i.e. non-kernel) pseudo-\n\t  interfaces should have ifindex set to 0.\n\t  (if_new) Remove function.\n\t  (if_delete_retain) New function to delete an interface without\n\t  removing from iflist and freeing the structure.\n\t  (ifname2ifindex) New function.\n\t* if.c: (if_new) Remove function (absorb into if_create).\n\t  (if_create) Replace function if_new with call to calloc.\n\t  Set ifp-\u003eifindex to IFINDEX_INTERNAL.  Fix off-by-one error\n\t  in assert to check length of interface name.  Add error message\n\t  if interface with this name already exists.\n\t  (if_delete_retain) New function to delete an interface without\n\t  removing from iflist and freeing the structure.\n\t  (if_delete) Implement with help of if_delete_retain.\n\t  (ifindex2ifname) Reimplement using if_lookup_by_index.\n\t  (ifname2ifindex) New function to complement ifindex2ifname.\n\t  (interface) The interface command should check the name length\n\t  and fail with a warning message if it is too long.\n\t  (no_interface) Fix spelling in warning message.\n\t  (if_nametoindex) Reimplement using if_lookup_by_name.\n\t  (if_indextoname, ifaddr_ipv4_lookup) Reimplement using\n\t  if_lookup_by_index.\n\t* bgp_zebra.c: (bgp_interface_delete) After deleting, set ifp-\u003eifindex\n\t  to IFINDEX_INTERNAL.\n\t* isis_zebra.c: (isis_zebra_if_del) Call if_delete_retain instead\n\t  of if_delete, since it is generally not safe to remove interface\n\t  structures.  After deleting, set ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t  (zebra_interface_if_lookup) Tighten up code.\n\t* ospf6_zebra.c: (ospf6_zebra_if_del) Previously, this whole function\n\t  was commented out.  But this is not safe: we should at least update\n\t  the ifindex when the interface is deleted.  So the new version\n\t  updates the interface status and sets ifp-\u003eifindex to\n\t  IFINDEX_INTERNAL.\n\t  (ospf6_zebra_route_update) Use if_indextoname properly.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) Show ifindex and interface\n\t  flags to help with debugging.\n\t* ospf_zebra.c: (ospf_interface_delete) After deleting, set ifp-\u003eifindex\n\t  to IFINDEX_INTERNAL.\n\t  (zebra_interface_if_lookup) Make function static.  Tighten up code.\n\t* rip_interface.c: (rip_interface_delete) After deleting, set\n\t  ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t* ripng_interface.c: (ripng_interface_delete) After deleting, set\n\t  ifp-\u003eifindex to IFINDEX_INTERNAL.\n"
    },
    {
      "commit": "3cb98dee9067372756964f461eb2c931a1c75138",
      "tree": "726827878765c01c45e5be08b909974ae54ce79f",
      "parents": [
        "47004ec501bd70d558c11af05d8bacd66a8c7c25"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 16:01:05 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 16:01:05 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* configure.ac: Add strnlen to AC_CHECK_FUNCS.\n\t* zebra.h: Should include str.h to pick up missing functions.\n\t* str.h: Declare strnlen if needed.\n\t* str.c: Do not include str.h since zebra.h now includes it.\n\t  (strnlen) New function.\n"
    },
    {
      "commit": "2d58228ecabb23b064e8a06e6241cf0d7e5ca785",
      "tree": "443509e8113598c7dadaa5e9cdbb153c147d0ffe",
      "parents": [
        "17eff7cb9010c0ba386ab801c220811ded4242b3"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Mar 28 15:29:07 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Mar 28 15:29:07 2005 +0000"
      },
      "message": "\t* configure.ac, */Makefile.am: Fix previous commit. SNMP includes\n\t  must be after lib/ includes in some systems. Introduce SNMP_INCLUDES\n\t  for that.\n"
    },
    {
      "commit": "44f8a757904a58bbff8b6a976722e1e21f439af2",
      "tree": "ce792140d5c9c4439d4e3d2e22a76506268690d5",
      "parents": [
        "a0fb71a5601bcaad4eba2ad16556b9cf36c57277"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Mar 26 14:13:40 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Mar 26 14:13:40 2005 +0000"
      },
      "message": "Trying to finish previous commit ...\n"
    },
    {
      "commit": "db8eaac6615dacf17eb3958b0f3b6ea58f8f1e1d",
      "tree": "24e261e3e5be531ed987d3e040ea731ca6a1016c",
      "parents": [
        "55468c86040081320f557b696e509b76ddfd6c83"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Mar 16 16:13:06 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Mar 16 16:13:06 2005 +0000"
      },
      "message": "2005-03-16 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: Must check whether __attribute__ should be defined before\n\t  including zassert.h.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "55468c86040081320f557b696e509b76ddfd6c83",
      "tree": "3ee726f155f8776d4a220997681d14c0b09addd0",
      "parents": [
        "909a215508fd42473fcbe4f5292a59404e5473af"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Mar 14 20:19:01 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Mar 14 20:19:01 2005 +0000"
      },
      "message": "2005-03-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) update all c files to match the lib/vector.h rename of\n\t  (struct vector).active to max, and vector_max macro to\n\t  vector_active.\n\t* lib/vector.h: Rename to (struct vector).max to slightly less\n\t  confusing active, for the number of active slots, distinct from\n\t  allocated or active-and-not-empty. Rename vector_max to\n\t  vector_active for same reason.\n"
    },
    {
      "commit": "909a215508fd42473fcbe4f5292a59404e5473af",
      "tree": "26b0977fb1b922565919a3e3b87c88d1ec9a8183",
      "parents": [
        "b89614766b083c83f6a84126a02c88311129e12d"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Mar 14 17:41:45 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Mar 14 17:41:45 2005 +0000"
      },
      "message": "2005-03-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (various) Fix indentation and other whitespace.\n"
    },
    {
      "commit": "b89614766b083c83f6a84126a02c88311129e12d",
      "tree": "51b3f37416bc394f70bb9b8b9e41690bbe1ac72e",
      "parents": [
        "9dbc797274ca5df614d61784658b8f809bbd8e2b"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Mar 14 17:35:52 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Mar 14 17:35:52 2005 +0000"
      },
      "message": "2005-03-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (sort_node) use vector_max instead of referencing\n\t  (struct vector *)-\u003emax directly. Test that vector_max is \u003e 0\n\t  before using it to calculate an index.\n\t  Fixup vector loop to make main body conditional on vector slot\n\t  not being empty.\n\t  (cmd_cmdsize) Fixup vector loop to make main body conditional on\n\t  vector slot not being empty.\n\t  (cmd_filter_by_completion) ditto\n\t  (cmd_filter_by_string) ditto\n\t  (is_cmd_ambiguous) ditto\n\t  (cmd_describe_command_real) Change index integers to unsigned.\n\t  Test that vector_max is \u003e 0 before using it to calculate an index.\n\t  Return immediately with CMD_ERR_NO_MATCH if vline has no\n\t  active slots.\n\t  Fixup vector loop to make main body conditional on vector slot\n\t  not being empty.\n\t  (cmd_complete_command_real) ditto.\n\t  (cmd_execute_command_strict) Fixup vector loop to be conditional\n\t  on non-null slot.\n"
    },
    {
      "commit": "4275b1de3a54650a81f82999c296b756ee5b5679",
      "tree": "34770ac1723285391c43a623028fd1e8e6c986ed",
      "parents": [
        "9e92eeab6cc40bc65ed9b1b7950e161fd1434d48"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Mar 09 13:42:23 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Mar 09 13:42:23 2005 +0000"
      },
      "message": "2005-03-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (config_list_cmd) Don\u0027t list hidden or deprecated\n\t  commands, hiding these from tab completion is still to be done.\n"
    },
    {
      "commit": "9e92eeab6cc40bc65ed9b1b7950e161fd1434d48",
      "tree": "40a277021d7dee4910cc9aa982680ac137f6e0dd",
      "parents": [
        "060d438cb1be51d2f7fb7954a8b7b1cd491f555f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Mar 09 13:39:26 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Mar 09 13:39:26 2005 +0000"
      },
      "message": "2005-03-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: Undo commit of sign warning fix and hidden command\n\t  in list_cmd. Sign warning is more subtle. list_cmd on its own\n\t  will be committed after.\n"
    },
    {
      "commit": "220851816a699d9977702ea2b2501d4ede76e898",
      "tree": "7c7b2a35e838ea6969258ce83f1f56f770972500",
      "parents": [
        "9c5d8562f8d24574ba1f43881d47cbc8ffc62027"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 08 16:00:12 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 08 16:00:12 2005 +0000"
      },
      "message": "2005-03-08 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (no_banner_motd_cmd) use XFREE.\n\t* vty.c: (vty_hello) fix the indentation and comment.\n"
    },
    {
      "commit": "9c5d8562f8d24574ba1f43881d47cbc8ffc62027",
      "tree": "816690e607e208aa66b257fb9ef01ae8bd80acb6",
      "parents": [
        "b45da6f01612e8ec1938cacfe0ea0ef34ad1afca"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 08 15:56:42 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 08 15:56:42 2005 +0000"
      },
      "message": "2005-03-08 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (cmd_describe_command_real) sign compile warning fix\n\t  (cmd_complete_command_real) ditto.\n\t  (config_list_cmd) Don\u0027t list hidden or deprecated commands,\n\t  hiding these from tab completion is still to be done.\n\t* command.h: cmd attr enum should start at 1.\n"
    },
    {
      "commit": "b45da6f01612e8ec1938cacfe0ea0ef34ad1afca",
      "tree": "670671d335524f7b44bee3e32bdba1a75aecc7df",
      "parents": [
        "3b0c5d9a56560cfbfb1a8f5b9e6cc71025eb5490"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 08 15:16:57 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 08 15:16:57 2005 +0000"
      },
      "message": "2005-03-08 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (banner_motd_file_cmd) use XSTRDUP/XFREE\n\t* vty.c: (vty_hello) suggestions from Andrew, read by line and\n\t  stub out trailling non-printable characters on each line thus\n\t  allowing us to specify VTY_NEWLINE to vty_out.\n"
    },
    {
      "commit": "3b0c5d9a56560cfbfb1a8f5b9e6cc71025eb5490",
      "tree": "a4b9c7506cb74223635135902e0479fda0b46fe2",
      "parents": [
        "c3d26c72982bc95906afb58fb46f1268bc915a3b"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 08 10:43:43 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 08 10:43:43 2005 +0000"
      },
      "message": "2005-03-08 Jeroen Massar \u003cjeroen@unfix.org\u003e\n\n\t* vty.c: (vty_hello) display motd file, if set\n\t* command.h: add char *motdfile to struct host\n\t* command.c: (config_write_host) write out motdfile config\n\t  (banner_motd_file_cmd) new command, allow motd to be read from\n\t  file.\n\t  (no_banner_motd_cmd) free motdfile string, if needs be.\n\t  (cmd_init) init (struct host).motdfile. Add new motd file\n\t  commands.\n"
    },
    {
      "commit": "12f6ea2300402c821595297ff0c2c75055e50031",
      "tree": "503bfaf41cd13b637d8ec21034d896347828a9d7",
      "parents": [
        "42a66d7c484f95615e0364c4aa109ce5d095776a"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Mar 07 08:35:39 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Mar 07 08:35:39 2005 +0000"
      },
      "message": "\t* command.c: host.name might be NULL.\n\t* vty.c: Fix fd leak.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "81fb32404c942432d2bea1e50a4d53bf75fd0f70",
      "tree": "107d5d94061c110773c5b2985e383d2075bc6044",
      "parents": [
        "0d7e9134d828d5aee8c83960bb706a726cdc2ec4"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 24 16:02:53 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 24 16:02:53 2005 +0000"
      },
      "message": "2005-02-24 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* stream.c: (stream_read_try) Log a warning message if a fatal\n\t  I/O error occurs.\n\t  (stream_fifo_new) Fix prototype.\n\t* stream.h: Fix prototype for stream_fifo_new (need void arg).\n"
    },
    {
      "commit": "cdb6ee94bc2b9d1b66cfa1adcc5acaccbd648e0f",
      "tree": "e2ddd54488f20a3402ce94fcc4fb337fb883f61c",
      "parents": [
        "5c33349b3efff36a6acd36c6600b61e7cc2dbffc"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 23 15:48:32 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 23 15:48:32 2005 +0000"
      },
      "message": "2005-02-23 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* {vty.h,vty.c}: Remove vty_finish (duplicate of vty_reset).\n\t* isis_main.c: (reload) Call vty_reset instead of vty_finish (both\n\t  functions were exactly the same).\n"
    },
    {
      "commit": "9fc7ebf10b7bb638ddf6d1b4b2d562dd417866fc",
      "tree": "e2e49aa4ea2530be5b86df581ed1adcd37822f3a",
      "parents": [
        "338b3424154af85b0762713796397d3f2345d54f"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 23 15:12:34 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 23 15:12:34 2005 +0000"
      },
      "message": "2005-02-23 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* buffer.h: Make the struct buffer and struct buffer_data structures\n\t  private by moving them inside buffer.c.  Add comments for all\n\t  functions.  Rename buffer_write as buffer_put (to be more consistent\n\t  with the buffer_putc and buffer_putstr functions).  Declare a new\n\t  buffer_write function that is used to write data to a file descriptor\n\t  and/or add it to the buffer queue.  Remove unused function\n\t  buffer_flush_vty_all.  Create a new enum typedef buffer_status_t\n\t  to be used as the return code for all buffer_flush* functions\n\t  and buffer_write.\n\t* buffer.c: The struct buffer and struct buffer_data declarations\n\t  are now private to this file.  In conjunction with that, remove\n\t  some unnecessary fields: struct buffer (alloc, unused_head,\n\t  unused_tail, length), struct buffer_data (prev).\n\t  (buffer_data_new) Removed: functionality incorporated into buffer_add.\n\t  (buffer_data_free) Removed: use a macro BUFFER_DATA_FREE instead.\n\t  (buffer_new) Use calloc instead of malloc + memset(zero).\n\t  Supply an appropriate default size if the specified size is 0.\n\t  (buffer_free) Eliminate code duplication by calling buffer_reset to\n\t  free the contents of the buffer (and remove unused code related\n\t  to unused_head).\n\t  (buffer_empty,buffer_putc,buffer_putstr) Aesthetic change (make more\n\t  compact).\n\t  (buffer_reset) Use macro BUFFER_DATA_FREE.  No need to set\n\t  alloc and length to 0 (these fields have been removed).\n\t  (buffer_add) Fix scope to be static.  Call XMALLOC directly instead\n\t  of calling removed buffer_data_new function.  Simplify the logic\n\t  (since it\u0027s now a singly-linked list instead of doubly-linked).\n\t  (buffer_write) Renamed to buffer_put.  Change to void, since return\n\t  code of 1 was meaningless.  No need to adjust length field, since\n\t  it has been removed.\n\t  (buffer_putw,buffer_flush,buffer_flush_vty_all,buffer_flush_vty)\n\t  Remove unused functions.\n\t  (buffer_flush_all) Rewrite using buffer_flush_available to eliminate\n\t  a possible failure mode if IOV_MAX is less than the number of buffers\n\t  on the queue.\n\t  (buffer_flush_window) Incorporate logic from buffer_flush_vty.\n\t  Log an error message if there is a writev error.\n\t  (buffer_flush_available) Be more paranoid: check for case where\n\t  buffer is already empty.  Use new ERRNO_IO_RETRY macro, and use\n\t  new enum for return codes.  Simplify deletion logic (since it\u0027s\n\t  now a singly-linked list).\n\t  (buffer_write) New function for use with non-blocking I/O.\n\t* vty.h: Replace the struct vty sb_buffer field with a fixed-size\n\t  (5-character) sb_buf field and an sb_len field, since using\n\t  a struct buffer was inappropriate for this task.  Add some useful\n\t  comments about telnet window size negotiation.\n\t* vty.c: Include \u003carpa/telnet.h\u003e (no longer included by zebra.h).\n\t  Remove VTY_OBUF_SIZE (instead use buffer_new default size).\n\t  Make telnet_backward_char and telnet_space_char static const.\n\t  (vty_out) Replace buffer_write with buffer_put.\n\t  (vty_log_out) Check for I/O errors.  If fatal, close the vty session.\n\t  Consolidate 3 separate writes into a single write call.\n\t  (vty_will_echo,vty_command,vty_next_line,vty_previous_line,\n\t  vty_end_config,vty_describe_fold,vty_clear_buf,vty_serv_sock_addrinfo,\n\t  vty_serv_sock_family,vty_serv_un,vty_use_backup_config,exec_timeout,\n\t  vty_config_write,vty_save_cwd) Fix scope to static.\n\t  (vty_new) Let buffer_new use its default buffer size.\n\t  (vty_write) Fix signature: 2nd arg should be const char *.\n\t  Replaced buffer_write with buffer_put.\n\t  (vty_telnet_option) Fix minor bug (window height or width greater than\n\t  255 was broken).  Use sb_buf and sb_len instead of removed sb_buffer\n\t  (which was being used improperly).\n\t  (vty_read) On error, use ERRNO_IO_RETRY to decide whether it\u0027s fatal.\n\t  If the error is fatal, call buffer_reset so vty_close does not attempt\n\t  to flush the data.  Use new sb_buf and sb_len instead of sb_buffer\n\t  to store the SB negotiation string.\n\t  (vty_flush) When vty-\u003elines is 0, call buffer_flush_available instead\n\t  of buffer_flush_window.  Look at the return code from buffer_flush\n\t  to detect I/O errors (and in that case, log an error message and\n\t  close the vty).\n\t  (vty_create) Fix scope to static.  Initialize sb_len to 0 instead\n\t  of creating sb_buffer.\n\t  (vty_accept) Set socket nonblocking.\n\t  (vtysh_accept) Use new set_nonblocking function instead of calling\n\t  fcntl directly.\n\t  (vtysh_flush) New function called from vtysh_read (after command\n\t  execution) and from vtysh_write.  This flushes the buffer\n\t  and reacts appropriately to the return code (by closing the vty\n\t  or scheduling further flushes).\n\t  (vtysh_read) Check whether error is fatal using ERRNO_IO_RETRY.\n\t  If not, just try again later.  Otherwise, call buffer_reset before\n\t  calling vty_close (to avoid trying to flush the buffer in vty_close).\n\t  Fix logic to allow case where a command does not arrive atomically\n\t  in a single read call by checking for the terminating NUL char.\n\t  (vtysh_write) Use new vtysh_flush helper function.\n\t  (vty_close) No need to call buffer_empty, just call buffer_flush_all\n\t  in any case (it will check whether the buffer is empty).\n\t  Do not free sb_buffer (since it has been removed).\n\t  (vty_log_fixed) Use writev instead of write.\n\t* zebra.h: Do not include \u003carpa/telnet.h\u003e, since this is used only\n\t  by lib/vty.c.\n"
    },
    {
      "commit": "c3c07f28dcd226975b5ed0c1f8842f51968a3288",
      "tree": "417176baf15d9f9528c7ef6fc65171fcfa68583d",
      "parents": [
        "e40dcce1f5966d4129b5ecadd905dc2952ac5b30"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Feb 21 18:17:52 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Feb 21 18:17:52 2005 +0000"
      },
      "message": "\t* pqueue.[ch]: Introduce \"update\" function to meet ospf spf needs. It\n\t  will allow to update node when:\n\t  i) a node is inserted into the priority queue;\n\t  ii) a node position is modified in the priority queue;\n\t* pqueue.h: Export trickle_down() function.\n"
    },
    {
      "commit": "109ac96f0296fd66d5a1d37def44db3cef7ca0fb",
      "tree": "aa6e12891391dd9d0a890b2a89c39222ad6409e6",
      "parents": [
        "518cde8d6ce0434b02bd5d7cf7e9627d57af6952"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 19 01:17:07 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 19 01:17:07 2005 +0000"
      },
      "message": "2005-02-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.c: (stream_new) fix dumb mistake.\n"
    },
    {
      "commit": "53270116df3f54b1f9411f0832567e9effa87593",
      "tree": "08fab8ea890f84694a0f9fcaaf55a13fbf698ef3",
      "parents": [
        "d7e2a8188f6e9eaccb5e1c1bd7b9d5af79429c0c"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 17 20:07:22 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 17 20:07:22 2005 +0000"
      },
      "message": "2005-02-17 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* stream.c: (stream_read_try) Use new ERRNO_IO_RETRY macro.\n"
    },
    {
      "commit": "d7e2a8188f6e9eaccb5e1c1bd7b9d5af79429c0c",
      "tree": "6abb03907d0eeaa5f343e3927ef6d9e619e6f079",
      "parents": [
        "038163fa87d5b41503c721bb097faea6b25661c9"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 17 20:02:49 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 17 20:02:49 2005 +0000"
      },
      "message": "2005-02-17 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* network.h: Define a new ERRNO_IO_RETRY macro to test whether an I/O\n\t  operation should be retried.  This eliminates the need to duplicate\n\t  the same logic testing for EAGAIN or EINTR in multiple places.\n"
    },
    {
      "commit": "262feb1ad0838bb585955b6ada5acbe106dbc9bf",
      "tree": "392f66d5d71bcfdd87e5db32e89325ed9ef06c44",
      "parents": [
        "42218e71256cb86b5078c99c931030c7b0ce9bab"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 16 20:35:47 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 16 20:35:47 2005 +0000"
      },
      "message": "2005-02-16 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* stream.h: Declare new function stream_read_try suitable for use\n\t  with non-blocking file descriptors.  Indicate that stream_read\n\t  and stream_read_unblock are deprecated.\n\t* stream.c: (stream_read_try) New function for use with non-blocking\n\t  I/O.\n\t  (stream_recvmsg) Should return -1 if the stream is too small to\n\t  contain the data.\n"
    },
    {
      "commit": "42218e71256cb86b5078c99c931030c7b0ce9bab",
      "tree": "32331f692e292f258b295727d2f2467617fe80ba",
      "parents": [
        "a269d613fe0536a01eb86367a545e337e51d1309"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 16 16:25:39 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 16 16:25:39 2005 +0000"
      },
      "message": "2005-02-16 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* network.c: (set_nonblocking) Should check return code from\n\t  fcntl(F_GETFL).\n"
    },
    {
      "commit": "a269d613fe0536a01eb86367a545e337e51d1309",
      "tree": "21e648eaac2a1569af79dcbc75a962481b6cbc75",
      "parents": [
        "6ea7cdc593f7637e26da54192ef67245185994f3"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 16 00:45:37 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 16 00:45:37 2005 +0000"
      },
      "message": "2005-02-15 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* network.h: Declare new function set_nonblocking.  Indicate that\n\t  readn and writen are deprecated.\n\t* network.c: (set_nonblocking) New function to make a file descriptor\n\t  non-blocking, since it seems silly to have fcntl calls sprinkled\n\t  throughout the code.\n"
    },
    {
      "commit": "1dd13d41d09487c3d595b13a087b2ec87b7f4ce8",
      "tree": "981310e2b5a5a30b955f4dd2eca094b01a1b93e1",
      "parents": [
        "bfdc44af118e235e6979be42d4e4f2c1353f7bf0"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:49:09 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:49:09 2005 +0000"
      },
      "message": "- oops, date was wrong in actual ChangeLog\n"
    },
    {
      "commit": "050c013ac35337d86b03f140fb17d2e8e33a8baa",
      "tree": "7241e3972e2116f67b762a37305c31ee7d8d9671",
      "parents": [
        "f2e6c429375adf0d3c5deaa409734d5d41ac15ce"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:47:47 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:47:47 2005 +0000"
      },
      "message": "2005-02-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.h: Unsigned long updated to size_t\n\t* stream.c: ditto\n\t* stream.h: Add stream_copy, stream_dup, stream_recvmsg.\n\t  Add comment describing struct stream abstraction, and various\n\t  other comments.\n\t  Deprecate several unsafe/ambigious macros.\n\t  Add STREAM_WRITEABLE and STREAM_READABLE.\n\t  Add (stream_getl_from) for symmetry.\n\t  Update stream_forward_{endp,getp} to use size_t offset.\n\t  Make stream data a 0 length array, rather than a seperate malloc.\n\t* stream.c: Add consistency checks. Update to follow stream.h\n\t  changes.\n\t  (stream_new) Alloc stream+data in one go.\n\t  (stream_copy) new function, copy a stream.\n\t  (stream_dup) new function, dup a stream.\n\t  (stream_recvmsg) new function, recvmsg data into a stream.\n\t  (stream_empty) no need to check getp \u003d\u003d 0.\n"
    },
    {
      "commit": "f2e6c429375adf0d3c5deaa409734d5d41ac15ce",
      "tree": "73c056492bff8eb06eb7350909d0b2fa8baba772",
      "parents": [
        "082253f5d08577e2c7b61ed2302be88295b459eb"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 12 14:35:49 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 12 14:35:49 2005 +0000"
      },
      "message": "2005-02-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.h: Unsigned long updated to size_t\n\t* stream.c: ditto\n"
    },
    {
      "commit": "9985f83ce7102f64b15f744b60320f8d14a8a5ff",
      "tree": "344629bdc2b4a7d53b8d7ca1705c9be2ca282d18",
      "parents": [
        "083ee9d9cdbf72a452b9af96e62d0625ea712cd9"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Feb 09 15:51:56 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Feb 09 15:51:56 2005 +0000"
      },
      "message": "2005-02-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) Update code to match stream.h changes.\n\t  stream_get_putp effectively replaced with stream_get_endp.\n\t  stream_forward renamed to stream_forward_getp.\n\t  stream_forward_endp introduced to replace some previous\n\t  setting/manual twiddling of putp by daemons.\n\t* lib/stream.h: Remove putp. Update reference to putp with endp.\n\t  Add stream_forward_endp, which daemons were doing manually.\n\t  Rename stream_forward to stream_forward_getp.\n\t  lib/stream.c: Remove/update references to putp.\n\t  introduce stream_forward_endp.\n"
    },
    {
      "commit": "548e6f7d58a08e28132936431bba75428412857f",
      "tree": "4d168f4ea30a0fedc496ec158ac6fb58b2cd14cd",
      "parents": [
        "ba6454ec1fd1ca7266b10eba07d016becb22db74"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Feb 08 15:57:25 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Feb 08 15:57:25 2005 +0000"
      },
      "message": "2005-02-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: Change macro definitions SET_FLAG and UNSET_FLAG\n\t  to use compound assignment operators (aesthetic change).\n"
    },
    {
      "commit": "c4c7d0c48b1219d7ed9ed1377cea1be239c45d5d",
      "tree": "2dda4470cf7a5b0a5277edc06484f0065ef7bcc1",
      "parents": [
        "c70257d0afa4df7c838dc7c8f5948baca5f12657"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 03 19:22:05 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 03 19:22:05 2005 +0000"
      },
      "message": "2005-02-03 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c: (zlog_signal,zlog_backtrace_sigsafe) Eliminate use of fileno()\n\t  since it is not async-signal-safe.\n\t  (_zlog_assert_failed) Rewrite crashlog logic more compactly.\n\t  (zlog_set_file,zlog_reset_file,zlog_rotate) Update logfile_fd\n\t  for use in signal handler.\n"
    },
    {
      "commit": "1e2213541bbda26c49667b699a333d87bcc0f2e6",
      "tree": "23ed10aeadeb22a4f3e40c794a829604cc25cb7e",
      "parents": [
        "847947f20b152f0b64057a7115e118b44d238b5c"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 03 16:42:40 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 03 16:42:40 2005 +0000"
      },
      "message": "2005-02-03 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c: (syslog_sigsafe) Reduce scope of syslog_fd: it is accessed\n\t  inside this function only.\n\t  (open_crashlog) New function to open /var/tmp/quagga.\u003cdaemon\u003e.crashlog\n\t  with flags O_WRONLY|O_CREAT|O_EXCL to save some crash info.\n\t  (zlog_signal,_zlog_assert_failed) Increase logging priority from\n\t  LOG_ERR to LOG_CRIT.  If no file logging is configured, try to use\n\t  open_crashlog to create a crash logfile.\n\t  (zlog_backtrace_sigsafe) If a crashlog file descriptor is open,\n\t  dump a backtrace to that file.\n"
    },
    {
      "commit": "847947f20b152f0b64057a7115e118b44d238b5c",
      "tree": "68f726878177a594e258ce5312b7937951d3b421",
      "parents": [
        "dd4c593fb88b7c6cf5f27aa8a8286644743ed58a"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 02 18:38:48 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 02 18:38:48 2005 +0000"
      },
      "message": "2005-02-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* ospf_packet.c: (ospf_read) Fix bug: must check for state ISM_Down,\n\t  not for event ISM_InterfaceDown.  And improve the message by\n\t  adding the interface flags.\n\t* if.h: Declare if_flag_dump.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "6a52d0d155fc8b892e30cdb5e3fbe4c2779bd4cd",
      "tree": "d4bfab8286e497e30c5ebfed099c317a9397c623",
      "parents": [
        "656b4eeec1fb30402ad2001976c05c6f44fafb34"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Jan 30 18:49:28 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Jan 30 18:49:28 2005 +0000"
      },
      "message": "2005-01-30 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* daemon.c: (daemon) Replace perror with zlog_err.\n\t* vty.c: (vty_serv_un) Replace perror with zlog_err.\n\t* ripd.c: (rip_create_socket) Replace perror with zlog_err.\n\t* ioctl.c: (if_ioctl,if_ioctl_ipv6,if_get_flags) Replace perror with\n\t  zlog_err.\n\t* ioctl_solaris.c: (if_ioctl,if_ioctl_ipv6) Replace perror with\n\t  zlog_err.\n"
    },
    {
      "commit": "3b8b1855038afde448993e5a56955e9b7a4d99c2",
      "tree": "5378ad7cc9d2fdb42558044833036e347ca1277e",
      "parents": [
        "4460e7a4cf3dadcd9f06e4b519ba7be2cc936c0a"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 18:19:13 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 18:19:13 2005 +0000"
      },
      "message": "2005-01-29 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* buffer.h: Fix comment on buffer_getstr to reflect that it now\n\t  uses XMALLOC.\n\t* buffer.c: (buffer_getstr) Use XMALLOC(MTYPE_TMP) instead of malloc.\n\t* filter.c: (access_list_remark,ipv6_access_list_remark) Use\n\t  argv_concat instead of buffer_getstr.\n\t* if.c: (interface_desc) Use argv_concat instead of buffer_getstr.\n\t* plist.c: (ip_prefix_list_description,ipv6_prefix_list_description)\n\t  Use argv_concat instead of buffer_getstr.\n\t* bgp_filter.c: (ip_as_path,no_ip_as_path) Use argv_concat instead\n\t  of buffer_getstr.\n\t* bgp_route.c: (bgp_show_regexp) Fix memory leak: need to free string\n\t  returned by buffer_getstr.\n\t  (bgp_show_community) Must use XFREE instead of free on string\n\t  returned by buffer_getstr.\n\t* bgp_routemap.c: (set_community) Must use XFREE instead of free\n\t  on string returned by buffer_getstr.\n\t* bgp_vty.c: (neighbor_description) Use argv_concat instead of\n\t  buffer_getstr.\n"
    },
    {
      "commit": "afb8b6055c5e54be762e220cf9b7b65a22266733",
      "tree": "8434d1316d56805368e2ce2dc13a095fdb3a8c91",
      "parents": [
        "f6834d4c4031276361465dd19ef1918e239566c8"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Jan 28 20:41:07 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Jan 28 20:41:07 2005 +0000"
      },
      "message": "2005-01-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* lib/buffer.h: Document behavior of buffer_getstr function.\n\t* lib/buffer.c: (buffer_getstr) Fix bug: must handle case where\n\t  the string extends beyond the head struct buffer_data.\n"
    },
    {
      "commit": "f6834d4c4031276361465dd19ef1918e239566c8",
      "tree": "67e9eb194ce4cef74654a888c0e165febc0010d2",
      "parents": [
        "8bfb0cba005b37c7b125fe2a34f1819e85d9f59c"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Jan 28 20:28:35 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Jan 28 20:28:35 2005 +0000"
      },
      "message": "2005-01-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* lib/command.h: Document behavior of argv_concat function.\n\t* lib/command.c: (argv_concat) Calculate total string length first so\n\t  we can call malloc just once (instead of realloc\u0027ing to add each\n\t  string element).\n\t  (do_echo,config_logmsg) Allow for possible NULL return value from\n\t  argv_concat.\n"
    },
    {
      "commit": "13bfca7a1059a73a836f4813170f296a82266211",
      "tree": "b22e29cb43472038769502685209badf3302e7dd",
      "parents": [
        "90b4214727b4e109a87bc99f9dfb4686e0c0a8b2"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jan 23 21:42:25 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jan 23 21:42:25 2005 +0000"
      },
      "message": "        * lib/command.[ch]: Make node_parent() function nonstatic. vtyh.c will\n          use it as well.\n        * vtysh/vtysh.c: Implement walkup in node tree for vtysh as it already\n          works in vty.\n"
    },
    {
      "commit": "31364274ddd1da6b77dd99e1d5d164b5c643732b",
      "tree": "4f0ae083583fb605508ef981e96fb230d7110c41",
      "parents": [
        "92365889d1f856f323af452bad76f54c15ccdf45"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Jan 18 22:18:59 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Jan 18 22:18:59 2005 +0000"
      },
      "message": "2005-01-18 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.h: Test for SA_SIGINFO to see whether zlog_signal takes final\n\t  two args (siginfo and program_counter).\n\t* log.c: (hex_append) Include this function only if SA_SIGINFO or\n\t  HAVE_GLIBC_BACKTRACE is defined.\n\t  (zlog_signal) Final two args (siginfo and program_counter) now\n\t  depend on whether SA_SIGINFO is defined on this platform.\n\t* sigevent.c: (program_counter) Do not include this function if\n\t  SA_SIGINFO is not defined on this platform.\n\t  (exit_handler,core_handler) Test for SA_SIGINFO to decide whether\n\t  2nd \u0026 3rd arguments are present and to decide how to invoke\n\t  zlog_signal.\n\t  (trap_default_signals) Test for SA_SIGINFO and invoke sigaction\n\t  appropriately.\n"
    },
    {
      "commit": "239c26fdeae4dbccb43da359f9ea034041440831",
      "tree": "aefdb215d2e9ad88afe04d105c07cb9d8550bf96",
      "parents": [
        "f127165de02a66934082f23810fab37d7efbce8b"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Jan 17 15:22:28 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Jan 17 15:22:28 2005 +0000"
      },
      "message": "2005-01-17 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.h: Change prototype for zlog_backtrace_sigsafe to take additional\n\t  program_counter argument.\n\t* log.c: (zlog_backtrace_sigsafe) Add additional program_counter\n\t  argument.  If it is non-NULL, use backtrace_symbols_fd to resolve\n\t  the address.\n\t  (zlog_signal) Call zlog_backtrace_sigsafe with additional\n\t  program_counter argument.\n\n\t[pullup candidate]\n"
    },
    {
      "commit": "87d683b071dc7abfb30b666960ec480e64e19ce4",
      "tree": "ec56b3ce34f6871c4b3687681df2b97aa38da57a",
      "parents": [
        "b854038bd03e6c54b46d35bf4e40d0f39e30dfde"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jan 16 23:31:54 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jan 16 23:31:54 2005 +0000"
      },
      "message": "\t* command.[ch], vty.c: cmd_execute_command() function must not attempt\n\t  to walk up in the node tree if called from vtysh. Different daemons\n\t  might have commands with same syntax in different nodes (for example\n\t  \"router-id x.x.x.x\" commands in zebra/ospfd/ospf6d daemons).\n\n\t* vtysh.c: Reflect changes in lib. cmd_execute_command() should know\n\t  now that it\u0027s called from vtysh and must not attempt to walk up in\n\t  the node tree.\n\n\t[pullup candidate]\n"
    },
    {
      "commit": "cb585b65d1a513fd62449cc031e273245a8fd6c0",
      "tree": "076602b4fae8d47e3b82c353898de5260ac91007",
      "parents": [
        "f867d32c4a0d6a18c5f7c042b9dd5798dce93e10"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Jan 14 17:09:38 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Jan 14 17:09:38 2005 +0000"
      },
      "message": "2005-01-14 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* command.c (print_version): Do not bother even to examine host.name,\n\t  since it is always NULL when this function is called from main.\n"
    },
    {
      "commit": "f867d32c4a0d6a18c5f7c042b9dd5798dce93e10",
      "tree": "03ae33b1e867d97d74afbe80b8a840bfbdfb5868",
      "parents": [
        "24e3287986f17b87e9e424f05c83ec4876ec9b24"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Fri Jan 14 15:47:33 2005 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Fri Jan 14 15:47:33 2005 +0000"
      },
      "message": "2005-01-14  Greg Troxel  \u003cgdt@fnord.ir.bbn.com\u003e\n\n        * command.c (print_version): Don\u0027t print host.name if it is NULL.\n        Fixes segfault on Solaris reported by Goetz von Escher \u003cgoetz@open.ch\u003e\n\n(pullup candidate)\n"
    },
    {
      "commit": "40abf2392ba9f14935dab556f43e674cb5c47cf3",
      "tree": "3c5ff5794940f408b411c5d0204e27dac1014378",
      "parents": [
        "6cf9df088e10baefe04139897f8745a42ea0c772"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Jan 12 17:27:27 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Jan 12 17:27:27 2005 +0000"
      },
      "message": "2005-01-12 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* configure.ac: Test for header file \u003cucontext.h\u003e (for use in\n\t  signal processing).\n\t* sigevent.c: (trap_default_signals) Use the SA_SIGINFO flag to\n\t  pass additional siginfo_t and ucontext_t arguments to core_handler\n\t  and exit_handler.\n\t  (core_handler,exit_handler) Now invoked with 3 arguments (using\n\t  SA_SIGINFO).  Pass additional info to zlog_signal.\n\t  (program_counter) New function to find program counter in ucontext_t,\n\t  needs to be enhanced to support more platforms (currently works only\n\t  on Linux/x86).\n\t* log.h: Change the zlog_signal prototype to add new arguments\n\t  siginfo_t * and program_counter.\n\t* log.c: (zlog_signal) Add new arguments siginfo and program_counter.\n\t  Include si_addr and program counter (if non-NULL) in message.\n\t  And remove #ifdef HAVE_GLIBC_BACKTRACE around hex_append, since\n\t  that is now used to render the si_addr and PC pointers.\n"
    },
    {
      "commit": "e22f5516b3e1431b7716632b76e257b84e7e0ff4",
      "tree": "16ee1046948d1b8099c476a2450bdd605eca03e5",
      "parents": [
        "afc1e2ddf29fffe996f44d0f8eca99522e75d0ba"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Jan 12 16:18:17 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Jan 12 16:18:17 2005 +0000"
      },
      "message": "2005-01-12 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: If not C99 and no va_copy macro available, fall back to\n\t  memcpy (solves a build problem on FreeBSD 4.x).\n"
    },
    {
      "commit": "b99760ab51abf8c4c9a1f89dab0c1630a6768ff7",
      "tree": "daaf8cabb567c5ff1a01368fa1382d8257b56854",
      "parents": [
        "73a7dea305b146febb8e57176295689d6a900f1d"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Jan 04 16:24:43 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Jan 04 16:24:43 2005 +0000"
      },
      "message": "2005-01-04 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* configure.ac: Added test for broken CMSG_FIRSTHDR macro\n\t  (relevant for Solaris 8 and unpatched Solaris 9, don\u0027t know\n\t  whether other platforms are affected).\n\t* zebra.h: Define ZCMSG_FIRSTHDR appropriately based on whether\n\t  config.h indicates HAVE_BROKEN_CMSG_FIRSTHDR (as determined\n\t  by the configure test program).\n\t* sockopt.c: (getsockopt_cmsg_data) Use ZCMSG_FIRSTHDR instead\n\t  of CMSG_FIRSTHDR.\n\t* rtadv.c: (rtadv_recv_packet,rtadv_send_packet) Use ZCMSG_FIRSTHDR\n\t  instead of CMSG_FIRSTHDR.\n\t* ripd.c: (rip_recvmsg) Use ZCMSG_FIRSTHDR instead of CMSG_FIRSTHDR.\n\t* ripngd.c: (ripng_recv_packet) Use ZCMSG_FIRSTHDR instead of\n\t  CMSG_FIRSTHDR.\n"
    },
    {
      "commit": "cba8a60639aa83659ce551e91266dcee8408fc23",
      "tree": "4b1b9a943481b46d07889350f5842e9af726d38e",
      "parents": [
        "cee66491371403453dc1c2a2424683976d22e640"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jan 02 18:51:01 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jan 02 18:51:01 2005 +0000"
      },
      "message": "Reverting some int -\u003e unsigned int fixes in command.c for now. Fixes crash\ndescribed in [quagga-dev 2292].\n"
    },
    {
      "commit": "cc49eb5a5f970b7405762d3f8a2def179e0022b4",
      "tree": "dbd4d9278b3c2dad27f1908662fab533568a2504",
      "parents": [
        "17eaa728aae282e373b98a8d193c5c48c24e1a0f"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 30 13:50:32 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 30 13:50:32 2004 +0000"
      },
      "message": "Add comment explaining about limit of 20 joined groups on a socket.\n"
    },
    {
      "commit": "d44debedf53b85c989b72fe7c6924ffc1e7e625b",
      "tree": "4c527145158b49674cffb714fb571fd7d9a92b24",
      "parents": [
        "4660687a38034d60296fbc9e82aae772011c407f"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Wed Dec 29 20:06:23 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Wed Dec 29 20:06:23 2004 +0000"
      },
      "message": "2004-12-29  Greg Troxel  \u003cgdt@poblano.ir.bbn.com\u003e\n\n\t* sockopt.c (getsockopt_ipv4_ifindex): Document calling\n\tconvention.  Beef up comments.  Handle the case where the cmsghdr\n\thas a zero controllen, or more specifically when the wanted option\n\tis not present.  This is needed for Solaris 8, and in general for\n\tany platform for which configure finds a method and it can fail.\n\tMark some changes with XXX to be cleaned up post 0.98.\n"
    },
    {
      "commit": "1d69fdf645d8434e8e1488f8bf0c73613df09da9",
      "tree": "c3612df88e349556c1570d7d2ce0b37ce590ea5d",
      "parents": [
        "3cade26fea2febf99780288d31d0bfe7e1b16ef1"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Wed Dec 29 18:53:30 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Wed Dec 29 18:53:30 2004 +0000"
      },
      "message": "2004-12-29  Greg Troxel  \u003cgdt@poblano.ir.bbn.com\u003e\n\n\t* sockopt.c (getsockopt_ipv4_ifindex): Return 0 when passed a NULL\n\t  cmsghdr pointer.\n\nI believe this will avoid ospfd crashing on Solaris 8, which seems to\ndefine IP_RECVIF but not actually implement it.\n"
    },
    {
      "commit": "1d75c8c3b28db50bc53771d5fac37b809d37b614",
      "tree": "530ea967460e0f9978572b85e15666617a4b3f45",
      "parents": [
        "af04bd7c102c3fc1a9c2e98337b0ab1fa824d080"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 28 21:43:17 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 28 21:43:17 2004 +0000"
      },
      "message": "2004-12-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* sockopt.c: (setsockopt_ipv4_ifindex) Improve error message.\n\t  When neither IP_PKTINFO nor IP_RECVIF is defined, make return value\n\t  deterministic (-1).\n"
    },
    {
      "commit": "af04bd7c102c3fc1a9c2e98337b0ab1fa824d080",
      "tree": "f0a71ed52fa703ed6d1bccc84faa90aeb0943a62",
      "parents": [
        "c6487d61a9b7766f69718edbc484a6ad989bdef4"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 28 17:00:12 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 28 17:00:12 2004 +0000"
      },
      "message": "2004-12-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* thread.c: (funcname_thread_add_timer_msec) Reduce overflow risk.\n"
    },
    {
      "commit": "0e43a2bcc0b044ec8e92108811c1341076938af9",
      "tree": "b57ec33d9184ddbd0bfcd5d41344300440428c69",
      "parents": [
        "4ba9b9247222a6031a8060ddd39bfb19d90624e8"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Dec 22 00:15:34 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Dec 22 00:15:34 2004 +0000"
      },
      "message": "2004-12-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.c: Dont allocate streams with 0 sized data buffers\n"
    },
    {
      "commit": "4ba9b9247222a6031a8060ddd39bfb19d90624e8",
      "tree": "4a738bb9239bd171135e61e81d17df833c07fd66",
      "parents": [
        "b8adec1f98b155c6bf5e54067c8e31ae1de3c133"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Dec 21 22:34:58 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Dec 21 22:34:58 2004 +0000"
      },
      "message": "2004-12-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* if.h: Add more \u0027non-generic\u0027 IFF_ flags.\n\t* if.c: IFF_NOXMIT/IFF_VIRTUAL interfaces are \u0027loopback like\u0027\n"
    },
    {
      "commit": "2885f72d546a9d4673e4b9a607f8e30ab2e88cc9",
      "tree": "47029b9cfbc3a3da505e7d43395b1a19714f0d74",
      "parents": [
        "202d08cab9ef110dcbf6202cd0223d8877c7f0b6"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 17 23:16:33 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 17 23:16:33 2004 +0000"
      },
      "message": "2004-12-17 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* command.c: (do_echo) Added new \"echo\" command, useful for\n\t  watchdog pinging to make sure the daemon is responsive.\n"
    },
    {
      "commit": "202d08cab9ef110dcbf6202cd0223d8877c7f0b6",
      "tree": "50fabfbb3e4567c9f4fd91d08c3ec72529158545",
      "parents": [
        "fa40f65874ca21bb9cca59ab5ddc8dbaf046f3c8"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 17 20:50:00 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 17 20:50:00 2004 +0000"
      },
      "message": "2004-12-17 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* pid_output.c: (pid_output_lock) Eliminate static function, and just\n\t  use the #ifdef to decide which version of the function to include.\n\t  This eliminates a compilation problem with gcc4.  And fix the\n\t  non-fcntl version so that it actually compiles.  Exit with\n\t  status 1 instead of -1 on error.\n"
    },
    {
      "commit": "81fc57ca0d743a6abe577c4f0b316bfb570e45be",
      "tree": "846f58014c25a74449c1ea19e075f6f0a23cc723",
      "parents": [
        "bc18d616ad7d1d580e1e04c28eab2cd9afb67fad"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 15 17:41:14 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 15 17:41:14 2004 +0000"
      },
      "message": "2004-12-15 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* sigevent.c: (trap_default_signals) Ignore SIGPIPE instead of exiting.\n"
    },
    {
      "commit": "3378d2099440cb3a14dc7531a3221d4140e186e2",
      "tree": "098f20625c9a7cd329c68865502da0d1a23ccd79",
      "parents": [
        "c3324c63b5f6b39c5f63329a679628b80b63e1bc"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 10 22:43:17 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 10 22:43:17 2004 +0000"
      },
      "message": "2004-12-10 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c: (zlog_signal,_zlog_assert_failed) Change logging level back to\n\t  LOG_ERR instead of LOG_EMERG.\n"
    },
    {
      "commit": "c3324c63b5f6b39c5f63329a679628b80b63e1bc",
      "tree": "ee3350541aab91dc957007c31d95b3b11cfd31f6",
      "parents": [
        "3fb9de74bbd3de3a264c20b1b486f9853f908c79"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Dec 09 17:26:31 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Dec 09 17:26:31 2004 +0000"
      },
      "message": "2004-12-09 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c: (hex_append) No need to include this function if\n\t  HAVE_GLIBC_BACKTRACE is not defined.\n"
    },
    {
      "commit": "ad572396fc8306cee92af37d1099e317856a99d0",
      "tree": "6f402b91c6099a62247ef788359b52b4b602ede4",
      "parents": [
        "91f3e525a95d6a86f916872116af162eb3bdae5d"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 09 14:53:32 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 09 14:53:32 2004 +0000"
      },
      "message": "add XXX comment about hex_append being unused.\n(only used if HAVE_GLIBC_BACKTRACE, so perhaps ifdef it?)\n"
    },
    {
      "commit": "b9e7028fb2f626e1d345c6d52ace0567a410647f",
      "tree": "5a17a8485604b8f860ccabb43f1f6bbab82069d1",
      "parents": [
        "b6178002270192fe3ab2403dafac12e5babe11e6"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 17:14:45 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 17:14:45 2004 +0000"
      },
      "message": "2004-12-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* prefix.c: (prefix_copy) Error message before abort should\n\t  have severity LOG_ERR, not LOG_INFO.\n\t* memory.c: (mtype_log) Log level should be LOG_DEBUG, not LOG_INFO.\n"
    },
    {
      "commit": "8ddca7040da413cd283a4beba4634744f4e61ac8",
      "tree": "b0ff51f03f511a6c882c59272dff5134bf6b360f",
      "parents": [
        "82146b88915ca614ee1c28659478d6e310d84110"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 18:53:52 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 18:53:52 2004 +0000"
      },
      "message": "2004-12-07 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* {smux.c,zclient.c}: Change level of debug messages to LOG_DEBUG.\n"
    },
    {
      "commit": "82146b88915ca614ee1c28659478d6e310d84110",
      "tree": "f0dc71770433f2bb458f38595790a0b2b34ff9ec",
      "parents": [
        "274a4a4447b13f89f8237156a887d05a24a73cc6"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 17:15:55 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 17:15:55 2004 +0000"
      },
      "message": "2004-12-07 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* command.c: (config_write_host) Note that \"log trap\" is deprecated\n\t  when writing out the config.\n"
    },
    {
      "commit": "274a4a4447b13f89f8237156a887d05a24a73cc6",
      "tree": "d5c2c6ee94bb77ef4346bcc07834808a75210bfd",
      "parents": [
        "5e76477456ce8bc4a1eeaccb5c5e1d3d99ab1300"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 15:39:31 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 15:39:31 2004 +0000"
      },
      "message": "2004-12-07 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* bgp_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* isis_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.\n\t  Note that stdout logging will no longer be enabled by default when\n\t  not running as a daemon.\n\t* ospf_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* rip_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* ripng_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* main.c: (main) The 2nd argument to openzlog has been removed.\n\t  So stdout logging will no longer be enabled by default.\n\t* irdp_main.c: (irdp_finish) Reduce severity of shutdown message\n\t  from LOG_WARNING to LOG_INFO.\n\t* vtysh.c: Make several functions static instead of global.\n\t  Added several commands to support destination-specific logging levels.\n\t  (vtysh_completion) This function is unused, so comment it out.\n\t* basic.texi: Document new logging features.  Separate basic config\n\t  commands from basic VTY commands.\n\t* log.h: Replace struct zlog flags and maskpri fields with maxlvl\n\t  array to support individual logging levels for each destination.\n\t  Remove the 2nd argument to openzlog since the default logging config\n\t  should be standardized inside the library.  Replaced the\n\t  zlog_set_flag and zlog_reset_flag functions with zlog_set_level.\n\t  And zlog_set_file now requires an additional log_level argument.\n\t  Declare zlog_proto_names for use inside command.c in the\n\t  \"show logging\" command.  Added defines useful for command\n\t  construction.\n\t* log.c: (vzlog) Decide where to send the message based on the\n\t  individual logging levels configured for each destination.\n\t  Remove support for ZLOG_STDERR since it was never actually used.\n\t  Support record-priority for terminal monitors.\n\t  (zlog_signal,zlog_backtrace_sigsafe) Support destination-specific\n\t  logging levels.  Remove stderr support (was never used).  Added\n\t  support for terminal monitor logging.\n\t  (_zlog_assert_failed) Increase message severity to LOG_EMERG.\n\t  (openzlog) Remove 2nd argument since default config should be\n\t  standardized in library.  By default, terminal monitoring\n\t  is set to debug, and all other logging is disabled.\n\t  (zlog_set_flag,zlog_reset_flag) Removed.\n\t  (zlog_set_level) New function to replace zlog_set_flag and\n\t  zlog_reset_flag.  Supports destination-specific logging levels.\n\t  (zlog_set_file,zlog_reset_file) Support file-specific logging level.\n\t  (zlog_rotate) Log an error message if fopen fails, and support\n\t  new file-specific logging level.\n\t* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that\n\t  command functions will be static instead of global.  Remove\n\t  declarations for config_exit and config_help.  Define new macros\n\t  DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can\n\t  have deprecated commands in vtysh.  Similarly, for completeness,\n\t  define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.\n\t  Also, fix bug in ALIAS_ATTR macro (didn\u0027t matter because it\n\t  was never used).\n\t* command.c: Make many functions static instead of global.\n\t  (facility_name,facility_match,level_match) New functions\n\t  to support enhanced destination-specific logging levels.\n\t  (config_write_host) Support new destination-specific logging levels.\n\t  (config_logmsg) Added new \"logmsg\" command to help test logging\n\t  system.\n\t  (show_logging) Added \"show logging\" command to show the current\n\t  configuration of the logging system.\n\t  (config_log_stdout_level) Support explicit stdout logging level.\n\t  (no_config_log_stdout) Now takes optional LEVEL arg.\n\t  (config_log_monitor,config_log_monitor_level,no_config_log_monitor)\n\t  New commands creating new \"log monitor\" commands to set terminal\n\t  monitoring log level.\n\t  (config_log_file_level) Support explicit file logging level.\n\t  (config_log_syslog_level) Support explicit syslog logging level.\n\t  (config_log_facility,no_config_log_facility) Implement new\n\t  \"log facility\" command.\n\t  (cmd_init) Add hooks for new commands: \"show logging\", \"logmsg\",\n\t  \"log stdout \u003clevel\u003e\", \"log monitor\", \"log monitor \u003clevel\u003e\",\n\t  \"no log monitor\", \"log file \u003cfilename\u003e \u003clevel\u003e\",\n\t  \"no log file \u003cfilename\u003e \u003clevel\u003e\", \"log syslog \u003clevel\u003e\",\n\t  \"log facility\", and \"no log facility\".\n\t* vty.h: Added a \"level\" argument to vty_log so it can support\n\t  \"log record-priority\".  Declare new function vty_log_fixed for\n\t  use in signal handlers.\n\t* vty.c: (vty_log,vty_log_out) Added a \"level\" argument to support\n\t  \"log record-priority\" for vty terminal monitors.\n\t  (vty_down_level) Use config_exit_cmd.func instead of calling\n\t  config_exit directly (since command functions will now be static\n\t  instead of global).\n\t  (vty_log_fixed) New function to send terminal monitor messages\n\t  from inside a signal handler.\n"
    },
    {
      "commit": "5e76477456ce8bc4a1eeaccb5c5e1d3d99ab1300",
      "tree": "6a05e47a55e4afce73b653e00f9abfd34f860511",
      "parents": [
        "2cac10935b6e2aabeb480d6769be01d9eec7101f"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 19:03:33 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 19:03:33 2004 +0000"
      },
      "message": "2004-12-03 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* HACKING: Indicate that header files should be consulted for\n\t  documentation, particularly logging levels in lib/log.h.\n\t* log.h: Document appropriate use of syslog logging priorities\n\t  inside quagga.\n"
    },
    {
      "commit": "2cac10935b6e2aabeb480d6769be01d9eec7101f",
      "tree": "bfcbd7d167305749d4abed6833499da0c1353f67",
      "parents": [
        "56f2069a03a1be9bfd7605e43aa0d899b0d5ed60"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 18:01:04 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 18:01:04 2004 +0000"
      },
      "message": "Need RCS Id keyword.\n"
    },
    {
      "commit": "56f2069a03a1be9bfd7605e43aa0d899b0d5ed60",
      "tree": "f039affbe88bb557260802a2913915cc8ee73f5c",
      "parents": [
        "1210fa6674e36a6acbd44e571e681842c5838501"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 17:40:31 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 17:40:31 2004 +0000"
      },
      "message": "2004-12-03 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* command.h: Remove fields log_stdout and log_syslog from struct host,\n\t  since they are just trying to duplicate information in the\n\t  zlog_default structure.  Note that this fixes a bug since those\n\t  fields were not registering any logging that was established\n\t  in the initial call to openzlog (this affects only the zebra and\n\t  ospf6d daemons).  It is probably a bug to turn on any logging by\n\t  default in the call to openzlog.\n\t* command.c: (config_write_host) Get logging info from zlog_default\n\t  instead of now-removed fields host.log_stdout and host.log_syslog.\n\t  (config_log_stdout,no_config_log_stdout) Do not set now-removed field\n\t  host.log_stdout, since this info is recorded in zlog_default.\n\t  (config_log_file) Use XSTRDUP (instead of strdup) to set host.logfile.\n\t  (config_log_syslog,config_log_syslog_facility,no_config_log_syslog)\n\t  Do not set now-removed field host.log_syslog, since this info is\n\t  recorded in zlog_default.\n"
    },
    {
      "commit": "887c44a4f3d8219dc5b1c52b5dcde1f31d52b73d",
      "tree": "5c0ef5fe1d3948c56e6abf2ffd3c9811e92f0f2e",
      "parents": [
        "bec595ada58ebfa98ad49220f29ab28b58549094"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 16:36:46 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 16:36:46 2004 +0000"
      },
      "message": "2004-12-03 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* bgp_main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Use zlog_notice for startup announcement.\n\t* isis_main.c: (sigint,sigterm) Use zlog_notice for termination message.\n\t  (terminate) This function should be static, not global.\n\t  (main) Use zlog_notice for startup announcement, and remove\n\t  ifdef ZEBRA_VERSION.\n\t* version.h.in: Remove declaration for pid_output_lock, this function\n\t  is now static, not global.\n\t* pid_output.c: (pid_output_lock) This function should be static, not\n\t  global.  And remove \"old umask\" error message, since it was really\n\t  an unimportant debug message, not an error.\n\t  (pid_output) Need to declare static function pid_output_lock.\n\t* ospf6_main.c: (sigint,sigterm) Use zlog_notice for termination\n\t  message.\n\t  (main) Remove commented-out call to pid_output_lock (which should\n\t  never be called other than from inside pid_output).  And use\n\t  zlog_notice to print the startup message, which now includes\n\t  the vty port.\n\t* ospf_main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Issue a startup announcement using zlog_notice.\n\t* rip_main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Add a startup announcement using zlog_notice.\n\t* ripng_main.c: (sighup) Remove spurious terminating message.\n\t  (sigint) Use zlog_notice for termination message.\n\t  (main) Issue a startup announcement using zlog_notice.\n\t* main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Add a startup announcement using zlog_notice.\n"
    },
    {
      "commit": "b9c35001dfa81e6cddfac0b36549b1ed4b84b5e7",
      "tree": "77c13bdb04f79c96653f62662b1fb791d32540cb",
      "parents": [
        "7d149b8e48ef72021aefddf44f400bccaf391870"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Nov 28 23:04:51 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Nov 28 23:04:51 2004 +0000"
      },
      "message": "Fix comment for zlog_backtrace_sigsafe: it now supports syslog logging\non systems where /dev/log is a unix datagram socket.\n"
    },
    {
      "commit": "7d149b8e48ef72021aefddf44f400bccaf391870",
      "tree": "67a7aeda5a2d98aabcafabe9e936a5711076ad41",
      "parents": [
        "2557aed16aa98f90d70a14ad4546742c79af7668"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Nov 28 23:00:01 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sun Nov 28 23:00:01 2004 +0000"
      },
      "message": "2004-11-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.h: Remove several unused fields from struct zlog.  Add comments\n\t  for other fields, and add one new field syslog_options that is\n\t  used in the new syslog_sigsafe implementation.\n\t* log.c: (syslog_sigsafe) New function to send syslog messages in\n\t  an async-signal safe way that can be used inside a signal handler.\n\t  (syslog_connect) New function to connect to syslog daemon inside a\n\t  signal handler.  This function supports only systems where /dev/log\n\t  is a unix datagram socket (e.g. not Solaris).\n\t  (zlog_signal) Call syslog_sigsafe if syslog logging is enabled.\n\t  (zlog_backtrace_sigsafe) Call syslog_sigsafe if syslog logging is\n\t  enabled.\n\t  (openzlog) Save syslog_options for use in syslog_sigsafe.\n\t  (num_append) Fix bug: handle 0 properly.\n\t  (hex_append) New function to print a u_long in hex format.\n"
    },
    {
      "commit": "2557aed16aa98f90d70a14ad4546742c79af7668",
      "tree": "d3d6d892c9ff06653333a5bca1627da078b63930",
      "parents": [
        "48d6c69b345096425644b7796a7bc6b36bf0e974"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Nov 28 21:16:20 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Nov 28 21:16:20 2004 +0000"
      },
      "message": "DEFUN_DEPRECATED passes attribute to DEFUN as well.\n"
    },
    {
      "commit": "48d6c69b345096425644b7796a7bc6b36bf0e974",
      "tree": "ad132074b26d440c8db8e3558361b144c187595e",
      "parents": [
        "5b85facc638d219a7281b75bec8a08dcf79a46ce"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 20:52:59 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 20:52:59 2004 +0000"
      },
      "message": "2004-11-26 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c, log.h, memory.c: Change function name from zlog_backtrace_safe\n\t  to the more self-explanatory zlog_backtrace_sigsafe.\n"
    },
    {
      "commit": "5b85facc638d219a7281b75bec8a08dcf79a46ce",
      "tree": "3f12c2b86c5ea322c72511304af81596bb89cdae",
      "parents": [
        "063ee52af64472474af2fa4b3cb2ba9ced746b9f"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 19:36:42 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 19:36:42 2004 +0000"
      },
      "message": "2004-11-26 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* debug.[ch]: Remove unused files.\n\t* Makefile.am: Remove references to debug.c and debug.h\n\t* ospf_main.c: Remove #include \"debug.h\" (was not being used, and\n\t  lib/debug.h has now been deleted).\n"
    },
    {
      "commit": "063ee52af64472474af2fa4b3cb2ba9ced746b9f",
      "tree": "d9d0f9dac723159cefd21d350195fabe286032e5",
      "parents": [
        "d1c51d7c27a1c5f5c838ef5f09e98e33527bfddc"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 18:11:14 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 18:11:14 2004 +0000"
      },
      "message": "2004-11-26 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c: (zlog_backtrace) New function to log a backtrace.\n\t  (zlog_backtrace_safe) Log a backtrace in an async-signal-safe way.\n\t  Unfortunately, this function does not support syslog logging yet.\n\t  (zlog_signal) Move backtrace code into separate function\n\t  zlog_backtrace_safe.\n\t  (_zlog_assert_failed) Call zlog_backtrace before aborting.\n\t* log.h: Declare new functions zlog_backtrace and zlog_backtrace_safe.\n\t* memory.c: (zerror) Call zlog_backtrace before aborting.\n"
    },
    {
      "commit": "d1c51d7c27a1c5f5c838ef5f09e98e33527bfddc",
      "tree": "445bf17ab157f7f5d0ed52cc1873cc15d5737256",
      "parents": [
        "546e20d6754a0a4c6bc48d642b5bfb4a3db6d7c3"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 14:14:30 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 14:14:30 2004 +0000"
      },
      "message": "2004-11-26 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* Makefile.am: Need to add zassert.h to pkginclude_HEADERS.\n"
    },
    {
      "commit": "546e20d6754a0a4c6bc48d642b5bfb4a3db6d7c3",
      "tree": "3bd96758136cff028812ede48132ae052d4a55cd",
      "parents": [
        "b3c8c4650216e128189d26755b93f711b5be9327"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 13:22:38 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 26 13:22:38 2004 +0000"
      },
      "message": "Remove unused va_list variable that was introduced by mistake in the last patch\nto stdarg handling.\n"
    },
    {
      "commit": "4cf0d0df23f7a35a3c1570c94ba08fa96d47bfc1",
      "tree": "9894529e896b82cf957cb60c03be04f4fe9d91ea",
      "parents": [
        "e5879ca1d8ea26870dbf74f330f5e6f5a9c93bfa"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Nov 25 17:14:34 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Nov 25 17:14:34 2004 +0000"
      },
      "message": "2004-11-25 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: If not C99 and there\u0027s no va_copy macro and there is\n\t  a __va_copy macro, define va_copy as __va_copy.\n"
    },
    {
      "commit": "e5879ca1d8ea26870dbf74f330f5e6f5a9c93bfa",
      "tree": "890045008a54c7b046395417f7ece40c9426ef3f",
      "parents": [
        "ad4d974d06ba3344e2e0df3277f7e0c42f018a4e"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Nov 25 16:07:53 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Nov 25 16:07:53 2004 +0000"
      },
      "message": "2004-11-25 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* pid_output.c: (pid_output_lock) Fix 2 bugs: when locking, should\n\t  set l_whence to SEEK_SET, not SEEK_END.  And after writing new\n\t  pid to file, must ftruncate to eliminate any extraneous bytes left\n\t  over from the last time a pid was written.\n"
    },
    {
      "commit": "ad4d974d06ba3344e2e0df3277f7e0c42f018a4e",
      "tree": "17f417d142dda46926dcd8ce7fdc259572315cef",
      "parents": [
        "101ec7099a0c725f8836f51e2f9ad2138eb43502"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Nov 24 18:20:30 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Nov 24 18:20:30 2004 +0000"
      },
      "message": "In zlog_signal, should probably check the return code from backtrace, just\nto be safe.\n"
    },
    {
      "commit": "101ec7099a0c725f8836f51e2f9ad2138eb43502",
      "tree": "8cb6731e527174866b31b97fabaa615fc2e82bad",
      "parents": [
        "cee3df1e4b1b8103bf81e5281a46aab7881f93df"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Nov 24 18:05:15 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Nov 24 18:05:15 2004 +0000"
      },
      "message": "In zlog_signal, change type of size since backtrace actually returns an int.\n"
    },
    {
      "commit": "cee3df1e4b1b8103bf81e5281a46aab7881f93df",
      "tree": "40d7cc8c22da9634739256a9d577b140b41730b8",
      "parents": [
        "b9e0ee31864c94c729fb6b6f6b2ccbc79dbcd474"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Nov 24 17:14:49 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Nov 24 17:14:49 2004 +0000"
      },
      "message": "2004-11-24 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zassert.h: New header file to declare a quagga-specific assert macro.\n\t* log.c: (_zlog_assert_failed) New function called when assert fails\n\t  to log the error and abort.\n\t* zebra.h: Include \"zassert.h\" instead of \u003cassert.h\u003e.\n\t* regex.c: Include \"zassert.h\" instead of \u003cassert.h\u003e.\n\t* dict.c: Include \"zassert.h\" instead of \u003cassert.h\u003e.\n"
    },
    {
      "commit": "59a06a915da9129a4e756c2b4d42449aa71a0ee4",
      "tree": "44090f696cbec97cab5e5b090b22c7431a5d6490",
      "parents": [
        "d246bd965898f0ba6781f2b2048af9a5eba079d3"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Nov 23 18:19:14 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Nov 23 18:19:14 2004 +0000"
      },
      "message": "2004-11-23 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* sigevent.c: (signal_init) Set up some default signal handlers\n\t  so that processes will issue an error message before terminating\n\t  or dumping core.\n\t  (trap_default_signals) New function to set up signal handlers\n\t  for various signals that may kill the process.\n\t  (exit_handler) Call zlog_signal, then _exit.\n\t  (core_handler) Call zlog_signal, then abort.\n\t* log.h: Declare new function zlog_signal.\n\t* log.c: (zlog_signal) New function to log information about\n\t  a received signal before the process dies.  Try to log a\n\t  backtrace also.\n\t  (quagga_signal_handler,signal_set) Should be static.\n"
    }
  ],
  "next": "d246bd965898f0ba6781f2b2048af9a5eba079d3"
}
