)]}'
{
  "log": [
    {
      "commit": "3d52bb8085c32b54fa21d88588310716245291d4",
      "tree": "8d47a7c92cafb9df895ba32b705e19386e0944e9",
      "parents": [
        "032928091c558d3b0940be079049009f47652711"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:42:07 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:42:07 2008 +0000"
      },
      "message": "[lib] trivial: add const qualifier to stream_put/write\n\n2008-06-07 Paul Jakma \u003cpaul@jakma.org\u003e\n\n\t* stream.{c,h}: (stream_{put,write}) add const qualifier to source\n\t  argument. Change u_char to void *.\n"
    },
    {
      "commit": "e96f92034dad1a70c92ad4ad863a5259c122cecb",
      "tree": "c3b9bebef0fe2059182b31b43243289b5c7248e3",
      "parents": [
        "a15cfd16fcdec39588ce2f780671ba7c6de0b919"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "message": "+ initial edition of meta-queue for RIB updates processing (bug #431)\n"
    },
    {
      "commit": "768a27ea7ba25257c79689af83ab37945dc1cc3c",
      "tree": "d3d9b822a29090a8cfee41b4ae3f74248e5950fa",
      "parents": [
        "311064ddc5c52f6859cf1e6e8636c19a2e705147"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:23:08 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:23:08 2008 +0000"
      },
      "message": "[zebra/linux] Use BPF to filter out responses, to try avoid netlink overruns\n\n2008-05-29 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* rt_netlink.c: (netlink_install_filter) BPF filter to catch and\n\t  drop responses to zebra\u0027s own route messages.\n\t  (kernel_init) add BPF filter on the netlink socket.\n"
    },
    {
      "commit": "11486b5265b2e0e2cf8b140018c47bd9a35cba93",
      "tree": "ccc5dfb967b156d43cb6d8ffda1816224dcf118a",
      "parents": [
        "5f56808431778fe8878ea8ea94225cca08884b48"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 23:26:02 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 23:26:02 2008 +0000"
      },
      "message": "[lib] Fix the struct message LOOKUP function to be more robust\n\n2008-02-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* log.c: (mes_lookup) Sowmini Varadhan diagnosed a problem where\n\t  this function can cause a NULL dereference, on lookups for unknown\n\t  indices, or messages with NULL strings. Can occur, e.g., debug\n\t  logging code when processing received messages. Fixed to accept a\n\t  pointer to a default string to be used if there is no match.\n\t* log.h: LOOKUP adjusted to match\n"
    },
    {
      "commit": "5f56808431778fe8878ea8ea94225cca08884b48",
      "tree": "41027ecf7a18a787ea3109a76d5ec83ebf49a45e",
      "parents": [
        "20e5ff0a8893ffad6d31739d68d224931c4a7992"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 00:09:04 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 00:09:04 2008 +0000"
      },
      "message": "[lib/linklist] Enforce \"nodes must have data\" invariant more rigorously\n\n2008-02-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* linklist.c: This implementation expects that the data pointer not\n\t  be null, e.g. listgetdata() asserts this. The list add methods\n\t  don\u0027t apply the same sanity check.\n\n\t  Noted by Jim Carlson in bug #437.\n"
    },
    {
      "commit": "dea04441fb51f74dc25f6ab4bd756b4159d961b6",
      "tree": "95a4578d95f20dd0dc168d07a90ea9cf71d6047f",
      "parents": [
        "d38e8d63fdfc0aefb78d0a51ffdf06d8b47993fd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 26 09:16:09 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 26 09:16:09 2008 +0000"
      },
      "message": "[c++] remove/rename some names in headers that clash with C++ reserved words\n\n2008-01-30 Peter Szilagyi \u003csp615@hszk.bme.hu\u003e\n\n\t* lib/stream.h: Remove named \u0027new\u0027 parameter in prototype\n\t  for c++ header compatibility.\n\t* ospfd/ospf_opaque.h: ditto\n\t* ospfd/ospfd.h: Renamed struct export to _export for c++\n\t  header compatibility.\n\t* ospf6d/ospf6_area.h: ditto\n"
    },
    {
      "commit": "55edb0d446a272907715b0825ff008557174d34a",
      "tree": "17d46ab705b0b229b8795d0d809fddd18e1d9078",
      "parents": [
        "c543a1737173fb438f1d8c06f650b2d0d479f45c"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jan 11 15:57:13 2008 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jan 11 15:57:13 2008 +0000"
      },
      "message": "[link-detect] Improve BSD support.\n2008-01-11 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* lib/zebra.h: Revert previous change, no need to include\n\t  \u003cnet/if_media.h\u003e here.\n\t* zebra/ioctl.c: If HAVE_BSD_LINK_DETECT is defined, include\n\t  \u003cnet/if_media.h\u003e\n\t  (if_get_flags) Remove debug messages about BSD link state.\n\t* zebra/kernel_socket.c: (bsd_linkdetect_translate) If link state\n\t  is unknown, we should set the IFF_RUNNING flag.\n"
    },
    {
      "commit": "c543a1737173fb438f1d8c06f650b2d0d479f45c",
      "tree": "ba940242e22f7e6798e6fd24b19864b5702474db",
      "parents": [
        "3f087670efa606021cde2f6a9615ac7e07aec2a5"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Jan 10 15:24:32 2008 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Jan 10 15:24:32 2008 +0000"
      },
      "message": "[link-detect] Try to get BSD link-detect to work properly.\n\n2008-01-10 Ingo Flaschberger \u003cif@xip.at\u003e\n\n\t* configure.ac: Define HAVE_BSD_LINK_DETECT if \u003cnet/if_media.h\u003e is\n\t  present.\n\t* lib/zebra.h: If HAVE_BSD_LINK_DETECT is defined,\n\t  include \u003cnet/if_media.h\u003e.\n\t* zebra/ioctl.c: (if_get_flags) If HAVE_BSD_LINK_DETECT, use the\n\t  SIOCGIFMEDIA ioctl to ascertain link state.\n\t* zebra/kernel_socket.c: (bsd_linkdetect_translate) New function to\n\t  map the ifm_data.ifi_link_state value into the IFF_RUNNING flag.\n\t  (ifm_read) Call bsd_linkdetect_translate to fix the IFF_RUNNING\n\t  flag before calling if_flags_update.\n"
    },
    {
      "commit": "912df1e8ab61962c29eb4faff17a7d75c4905b84",
      "tree": "5c9f8aebdb7fd2b79edb3dd1034ef21ba0b9da4e",
      "parents": [
        "370b64a2ad38e43b4bed028960481bbf4192becd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jan 08 13:50:11 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jan 08 13:50:11 2008 +0000"
      },
      "message": "[lib] add mising UL qualifier to numerical constant\n\n2008-01-08 Pavol Rusnak \u003cprusnak@suse.cz\u003e\n\n\t* memory.c: (mtype_memstr) Fix accidental shift past width of type,\n\t  constant should have been forced to UL, rather than being left to\n\t  default to int.\n"
    },
    {
      "commit": "6ce80bdb2523ad82cef813f6d8a7e0d4daa8cfae",
      "tree": "d0b0fc8725c9f120cdcc16fa7f711d8104051815",
      "parents": [
        "3a02d1f7fb778a1ea4f45d037f13dfcd126e2337"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Nov 12 14:55:01 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Nov 12 14:55:01 2007 +0000"
      },
      "message": "+ fixed bug #418 (changing address on an existing interface doesn\u0027t cause existing static routes to be revalidated)\n"
    },
    {
      "commit": "a56ef88348be9f019631d6bc92801aae647be05b",
      "tree": "12051517321d29fda1116654af59fab501c5b217",
      "parents": [
        "9c1deac7d6f68b14a130ad99d8a7e3329f570f11"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Oct 22 15:53:17 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Oct 22 15:53:17 2007 +0000"
      },
      "message": "[snmp-smux] Fix problems if \u0027smux peer ...\u0027 is issued multiple times\n\n2007-10-22 Lorenzo Colitti \u003clorenzo@colitti.com\u003e\n\n\t* smux.c: (smux_stop) Avoid cancelling a defunct thread pointer\n\t  (smux_start) Stop smux before trying to start it, possibly again.\n"
    },
    {
      "commit": "7593fddfa1558d086e3142ad96cf2790007f5d84",
      "tree": "c0eacd4abe36cfe0e62c2a8faf5ac300b9d661e7",
      "parents": [
        "a3aaf5b0ceb8c5b3821793333b4057df872fbedd"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Thu Oct 04 15:09:19 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Thu Oct 04 15:09:19 2007 +0000"
      },
      "message": "+ pidfiles are now always created with 0644 perms instead if LOGFILE_MASK (0600)\n"
    },
    {
      "commit": "6b148faa291f68dd43bba37fbc0e6b75a2e1e078",
      "tree": "7e9f1d21114da9be1587047adef75a373aeae6a8",
      "parents": [
        "e08286bcf8a73d1922b0464bef52c1b27eda7c43"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Sep 18 18:07:18 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Sep 18 18:07:18 2007 +0000"
      },
      "message": "[privs/Solaris] Quagga should work in zones with IP instances\n\n2007-09-18  Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* privs.c: definition of ZCAP_NET_ADMIN on Solaris should\n\t  be PRIV_SYS_IP_CONFIG, when that\u0027s available. Thus allowing\n\t  Quagga to work with in Solaris zones with exclusive IP\n\t  instances.\n"
    },
    {
      "commit": "b7fe4141123c6fc26fffec68d0db62ecf474c074",
      "tree": "78f2cde951e92198b00dea6ed048d41a499f71fb",
      "parents": [
        "1ba27564f3852083839bfa1f91889cb46c780f2f"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Aug 21 16:32:56 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Aug 21 16:32:56 2007 +0000"
      },
      "message": "Bug #362 is fixed now.\n"
    },
    {
      "commit": "dc95824ae13d65156dd873a6e784d9a0eed2f39f",
      "tree": "fa53aa99e517d9cfe5c56474051afdaa1bc9a666",
      "parents": [
        "068fd77cff0ce09b6390641abd84fc09a89c49db"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Aug 13 16:03:06 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Aug 13 16:03:06 2007 +0000"
      },
      "message": "Merged own patch for the bug #391 (debugging and comments mostly).\n"
    },
    {
      "commit": "7591d8b862439dfae8b4b16d148ce567b6ff8cb7",
      "tree": "b9d24293663be04e4c80bcd78f8d1f5e86c2c3f1",
      "parents": [
        "fc787e873dff0091069742b34fb3631ac529c92a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 18:52:45 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 18:52:45 2007 +0000"
      },
      "message": "[ospfd] Fix bad SPF calculation on some topologies - incorrect sorting\n\n2007-08-07 Atis Elsts \u003catis@mikrotik.com\u003e\n\n\t* ospf_spf.c: (ospf_spf_next) Sort heap in correct direction\n\t  after vertex cost is changed, thus fixing incorrect SPF\n\t  calculation on certain topologies.\n\t* lib/pqueue.{c,h}: Export trickle_up\n"
    },
    {
      "commit": "6d58272b4cf96f0daa846210dd2104877900f921",
      "tree": "a97f2c9c797bd96b298aa64f03ed69115d63e78b",
      "parents": [
        "dfdb8f18c008e7ad306588c86b12fbef337427ca"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:21:45 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:21:45 2007 +0000"
      },
      "message": "[bgpd] cleanup, compact and consolidate capability parsing code\n\n2007-07-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Clean up and compact capability parsing slightly.\n\t  Consolidate validation of length and logging of generic TLV, and\n\t  memcpy of capability data, thus removing such from cap specifc\n\t  code (not always present or correct).\n\t* bgp_open.h: Add structures for the generic capability TLV header\n\t  and for the data formats of the various specific capabilities we\n\t  support.  Hence remove the badly named, or else misdefined, struct\n\t  capability.\n\t* bgp_open.c: (bgp_capability_vty_out) Use struct capability_mp_data.\n\t  Do the length checks *before* memcpy()\u0027ing based on that length\n\t  (stored capability - should have been validated anyway on input,\n\t  but..).\n\t  (bgp_afi_safi_valid_indices) new function to validate (afi,safi)\n\t  which is about to be used as index into arrays, consolidates\n\t  several instances of same, at least one of which appeared to be\n\t  incomplete..\n\t  (bgp_capability_mp) Much condensed.\n\t  (bgp_capability_orf_entry) New, process one ORF entry\n\t  (bgp_capability_orf) Condensed. Fixed to process all ORF entries.\n\t  (bgp_capability_restart) Condensed, and fixed to use a\n\t  cap-specific type, rather than abusing capability_mp.\n\t  (struct message capcode_str) added to aid generic logging.\n\t  (size_t cap_minsizes[]) added to aid generic validation of\n\t  capability length field.\n\t  (bgp_capability_parse) Generic logging and validation of TLV\n\t  consolidated here. Code compacted as much as possible.\n\t* bgp_packet.c: (bgp_open_receive) Capability parsers now use\n\t  streams, so no more need here to manually fudge the input stream\n\t  getp.\n\t  (bgp_capability_msg_parse) use struct capability_mp_data. Validate\n\t  lengths /before/ memcpy. Use bgp_afi_safi_valid_indices.\n\t  (bgp_capability_receive) Exported for use by test harness.\n\t* bgp_vty.c: (bgp_show_summary) fix conversion warning\n\t  (bgp_show_peer) ditto\n\t* bgp_debug.h: Fix storage \u0027extern\u0027 after type \u0027const\u0027.\n        * lib/log.c: (mes_lookup) warning about code not being in\n          same-number array slot should be debug, not warning. E.g. BGP\n          has several discontigious number spaces, allocating from\n          different parts of a space is not uncommon (e.g. IANA\n          assigned versus vendor-assigned code points in some number\n          space).\n"
    },
    {
      "commit": "97cabcf760b8343512b5646e60cc228b8dc1350a",
      "tree": "4aab9c935540e5eafb6f8fba8c4163e305cb809c",
      "parents": [
        "0b8c4f1d811170224e467b305137ac94861daee6"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jul 06 17:00:24 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jul 06 17:00:24 2007 +0000"
      },
      "message": "[lib] Add comments regarding setsockopt_multicast_ipv4 arguments.\n\n2007-07-06 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* sockopt.{c,h}: (setsockopt_multicast_ipv4) Add some comments about\n\t  the arguments.\n"
    },
    {
      "commit": "0dc0b7080227df8aca6cc2f7961c3c55cb73c509",
      "tree": "6e812cc69de4171c069d341fac39372a2c8259fc",
      "parents": [
        "093033144658c5d914429fad5b0a6cf952f20943"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jun 01 13:21:20 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jun 01 13:21:20 2007 +0000"
      },
      "message": "[linux] Fix strange compilation problem by explicitly including \u003clinux/types.h\u003e\n\n2007-06-01 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: On linux, we seem to need to include \u003clinux/types.h\u003e before\n\t  \u003csys/sysctl.h\u003e, otherwise we get isisd compilation errors about\n\t  __be16 not being defined.\n"
    },
    {
      "commit": "d46d2a24e997883d9e2623b4de36aa4a08ffc89c",
      "tree": "31f05936514cb4125c39fee731631e0571d7cdd6",
      "parents": [
        "6bd1a7bab32b6b077bee687161c43dc0fe82076f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 16:53:04 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 16:53:04 2007 +0000"
      },
      "message": "[autoconf] GNU_SOURCE can be defined twice, through AC_FUNC_STRNLEN\n\n2007-05-10 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: Use AC_GNU_SOURCE to define _GNU_SOURCE, rather\n\t  than having lib/zebra.h do it.\n\t  AC_FUNC_STRNLEN has side-effects with latest autoconf, use\n\t  AC_CHECK_FUNC on strnlen instead.\n\t* lib/zebra.h: Don\u0027t try define _GNU_SOURCE, autoconf should do it.\n"
    },
    {
      "commit": "6f0e3f6e17687eb25b7b77c4fdc8324837d4700f",
      "tree": "8a94d9212060f0f2ee7cbd0079c2687eed7348dc",
      "parents": [
        "08d3d5b398ae81de7659509f159e814d1bbd4375"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 02:38:51 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 02:38:51 2007 +0000"
      },
      "message": "[autoconf] bugs 162,303,178: Fix \u0027present but can not be compiled\u0027 warnings\n\n2007-05-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: sys/conf.h depends on sys/param.h, at least on\n\t  FBSD 6.2.\n\t  (bug #363) Should check for in_pktinfo for IRDP\n\n2006-05-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: General cleanup of header and type checks, introducing\n\t  an internal define, QUAGGA_INCLUDES, to build up a list of\n\t  stuff to include so as to avoid \u0027present but cant be compiled\u0027\n\t  warnings.\n\t  Misc additional checks of things missing according to autoscan.\n\t  Add LIBM, for bgpd\u0027s use of libm, so as to avoid burdening\n\t  LIBS, and all the binaries, with libm linkage.\n\t  Remove the bad practice of using m4 changequote(), just\n\t  quote the []\u0027s in the case statements properly.\n\t  This should fix bugs 162, 303 and 178.\n\t* */*.{c,h}: Update all HAVE_* to the standard autoconf namespaced\n\t  HAVE_* defines. I.e. HAVE_SA_LEN -\u003e HAVE_STRUCT_SOCKADDR_SA_LEN,\n\t* bgpd/Makefile.am: Add LIBM to bgpd\u0027s LDADD, for pow().\n"
    },
    {
      "commit": "fb982c25aa771b7c7425a3c3cce0a2cda0a715de",
      "tree": "74aa4dc86b04365d90a1030682796421b0eff011",
      "parents": [
        "5921ef9aae3b5d6ff8663298f649fb9d76594acd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 04 20:15:47 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 04 20:15:47 2007 +0000"
      },
      "message": "[bgpd] Trim memory usage of BGP routes\n\n2007-05-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.h: (struct info) Move less frequently used\n\t  fields to a lazily allocated struct info_extra.\n\t  Export bgp_info_extra_get\n\t* bgp_route.c: (bgp_info_extra_new) allocate extra\n\t  (bgp_info_extra_free) Free damp info and the info_extra.\n\t  (bgp_info_extra_get) Retrieve the info_extra of a struct\n\t  info, allocating as required.\n\t  (generally) adjust to use info-\u003eextra\n\t* bgp_damp.c: (generally) use bgp_info_extra_get to access\n\t  dampinfo\n\t* bgp_attr.h: Move rarely allocated attributes from struct attr\n\t  to a struct attr_extra, for a substantial saving in size of\n\t  struct attr.\n\t* bgp_attr.c: (bgp_attr_extra_{new,free}), new, self-explanatory.\n\t  (bgp_attr_extra_get) Get the attr_extra for a given struct\n\t  attr, allocating it if needs be.\n\t  (bgp_attr_dup) Shallow copy the struct attr and its attr_extra.\n\t  (generally) adjust to know about attr-\u003eextra.\n\t* bgp_debug.c: (bgp_dump_attr) ditto\n\t* bgp_vty.c: (show_bgp_memory) print attr and info extra sizes.\n\t* bgp_nexthop.c: (generally) adjust to know about attr-\u003eextra\n\t  and info-\u003eextra.\n\t* bgp_{packet,routemap,snmp,zebra}.c: ditto\n\t* lib/memtypes.c: Add MTYPE_ATTR_EXTRA and MTYPE_BGP_ROUTE_EXTRA\n"
    },
    {
      "commit": "7514fb7739f74311830e9ddd1381d0d228224f61",
      "tree": "4d4b9a4fdfcea4cb6fa496085327f1aae9a9a380",
      "parents": [
        "5fa05099567bbe42aae87a9bef8fd630b3666a4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed May 02 16:05:35 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed May 02 16:05:35 2007 +0000"
      },
      "message": "[zebra] Routemap support on received routes, with \u0027set src\u0027 command (linux)\n\n2007-05-01 David L Stevens \u003cdlstevens@us.ibm.com\u003e\n\n\t* (general) These changes collectively add route-map and\n\t  prefix-list support to zebra and fix a bug in \"show\n\t  route-map\" (with no argument).\n\t* doc/main.texi: added route-map, prefix-list, ip protocol\n\t  and set src documentation\n\t* lib/command.h: added PROTOCOL_NODE type\n\t* lib/log.c: (proto_name2num) new function, protocol name to\n\t  number translation.\n\t* lib/routemap.c: (vty_show_route_map) fixed \"show route-map\"\n\t  without route-map name\n\t* lib/routemap.h: added RMAP_ZEBRA type\n\t* lib/zebra.h: added proto_name2num() prototype\n\t* vtysh/extract.pl.in: added VTYSH_ZEBRA flag for route-map and\n\t  plist\n\t* vtysh/Makefile.am: added zebra_routemap.c\n\t* vtysh/vtysh.h: added VTYSH_ZEBRA flag to VTYSH_RMAP\n\t* zebra/connected.c: (connected_up_ipv4) added src preference argument\n\t  to rib_add_ipv4()\n\t* zebra/kernel_socket.c: (rtm_read) ditto\n\t* zebra/main.c: added prefix list initialization\n\t* zebra/Makefile.am: added zebra_routemap.c source file\n\t* zebra/rib.h: added generic address union \"g_addr\" and use in\n\t  existing places that had an explicit union.\n\t  Added \"src\" to struct nexthop.\n\t  Added preferred src arg to nexthop_ipv4_add and rib_add_ipv4.\n\t* zebra/rt_netlink.c: (netlink_routing_table) set preferred source on\n\t  netlink messages.\n\t  (netlink_route_change) ditto\n\t  (netlink_route_multipath) ditto.\n\t* zebra/rtread_getmsg.c: (handle_route_entry) added (NULL) src to\n\t  rib_add_ipv4() call.\n\t* zebra/rtread_proc.c: (proc_route_read) ditto\n\t* zebra/zebra_rib.c: (nexthop_ipv4_add) add src argument.\n\t  (nexthop_ipv4_ifindex_add) ditto\n\t  (rib_add_ipv4) ditto\n\t  (nexthop_active_check) Add route-map processing.\n\t* zebra/zebra_routemap.c: new file for zebra route-map commands.\n\t* zebra/zebra_vty.c: (ip_protocol_cmd) Apply route-map to protocol\n\t  (vty_show_ip_route_detail) added \"src\" printing\n\t  (vty_show_ip_route) ditto\n\t  (show_ip_protocol_cmd) new command, list routemaps.\n\t  (config_write_protocol) write out routemap protocl config.\n\t  (zebra_vty_init) Install the new routemap protocol commands.\n\t* zebra/zserv.c: (zread_ipv4_add) added (NULL) src arg\n\t  (zebra_init) init zebra route-maps.\n\t* zebra/zserv.h: add zebra_route_map_init\n"
    },
    {
      "commit": "bcdda30bae1fef67d998211c54c06270ba42864c",
      "tree": "e4daad51d00adb3188154d9961f908aa7f204b90",
      "parents": [
        "d3d7e237fdc661d1d1d00a8b43657d1d719410e6"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun Apr 29 15:48:22 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun Apr 29 15:48:22 2007 +0000"
      },
      "message": "[logging] Minor performance tweak\n\n2007-04-29 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c: (quagga_timestamp) Optimize the subsecond timestamp generation.\n"
    },
    {
      "commit": "1ed72e0b3a643fa1be6f1efa904965798a575cd1",
      "tree": "052341ede20e44b6aa23b1cd799d08f9b762c1c2",
      "parents": [
        "eda9ba743c1eb7c32b2ae9b8989d3555f1890758"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sat Apr 28 22:14:10 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sat Apr 28 22:14:10 2007 +0000"
      },
      "message": "[logging] Add new \"log timestamp precision\" command for subsecond timestamps\n\n2007-04-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* command.c: (config_write_host) Save \"log timestamp precision\"\n\t  if not default value.\n\t  (show_logging) Show configured timestamp precision.\n\t  (config_log_timestamp_precision) Enable configuration of timestamp\n\t  precision.\n\t  (no_config_log_timestamp_precision) Restore default timestamp\n\t  precision.\n\t  (cmd_init) Install new timestamp precision commands.\n\t* log.h: (struct zlog) New timestamp_precision field.\n\t  (quagga_timestamp) New function to generate a timestamp with the\n\t  desired precision.\n\t  (struct timestamp_control) Declare a structure for use in avoiding\n\t  repeated duplicate calls to quagga_timestamp.\n\t* log.c: (quagga_timestamp) New function to generate a timestamp\n\t  of the desired precision.\n\t  (time_print) Call quagga_timestamp if the time hasn\u0027t already been\n\t  calculated.\n\t  (vzlog) Initialize a timestamp_control structure and pass it to\n\t  time_print and vty_log.\n\t  (zlog_backtrace) Fix 64-bit problem: cannot print size_t with %u.\n\t* vty.h: Must now include \"log.h\".\n\t  (vty_log) Takes an additional struct timestamp_control argument.\n\t* vty.c: (vty_log_out) Use new struct timestamp_control and new\n\t  quagga_timestamp function to print timestamps of the desired\n\t  precision.\n\t  (vty_time_print) Use new quagga_timestamp function.\n\t  (vty_log) Accept new struct timestamp_control argument and pass it\n\t  down to vty_log_out.\n"
    },
    {
      "commit": "eda9ba743c1eb7c32b2ae9b8989d3555f1890758",
      "tree": "f135b84aff5b76bf82d7fa0f00a1726674661164",
      "parents": [
        "33672eddf14c5b619fc38975d4c1f2888189cbc8"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Apr 27 18:13:15 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Apr 27 18:13:15 2007 +0000"
      },
      "message": "[64-bit] Fix 4 problems with printf formats and 64-bit size_t\n\n2007-04-27 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* lib/smux.c: (smux_trap) Fix printf format to work with 64-bit size_t.\n\t* ospf6d/ospf6_snmp.c: (ospfv3AreaEntry, ospfv3AreaLsdbEntry) Fix some\n\t  zlog_debug printf formats to work with 64-bit size_t.\n"
    },
    {
      "commit": "6dc686a29ecdfa8f8011eee17e4e6276ab175a0d",
      "tree": "bd4a1f7b1c32318584bec6b4f420089aadc81b07",
      "parents": [
        "37a217a59bfd32381034a0ce0adbac1c34cbec37"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:24:45 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:24:45 2007 +0000"
      },
      "message": "[zebra] Bug #351: Don\u0027t redistribute routes to ipv4 link-local prefixes\n\n2007-04-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/prefix.h: Add define to match IPv4 Link-Local addresses\n\t* zebra/redistribute.c: (zebra_check_addr) Don\u0027t redistribute routes\n\t  to IPv4 link-local prefixes, fixes bug #351.\n\t* zebra/redistribute.h: Export zebra_check_addr.\n\t* zebra/router-id.c: (router_id_bad_address) re-use zebra_check_addr\n\t  rather than implementing similar logic.\n"
    },
    {
      "commit": "afb88a669167358ea2be64aa0d10c8c42fa7509c",
      "tree": "2439441fa56db6ecbae310473af7f1e1808916f2",
      "parents": [
        "ad81f8cc2e77275cdeef1267d1ff4173eb89e093"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Mar 20 20:48:27 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Mar 20 20:48:27 2007 +0000"
      },
      "message": "[lib] Make message lookup function more robust.\n\n2007-03-20 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c: (mes_lookup) Make the function more robust: check for\n\t  cases where the index does not match the key value at that position.\n\t  If so, give a warning and fall back to a linear search.\n\t  And improve the error message in cases where even that fails.\n"
    },
    {
      "commit": "e4529636b77124285cca96a62799d0ff6a7addeb",
      "tree": "a8a50de7413833d5277ed7309248e03719e9efd3",
      "parents": [
        "43cd33a44e010f818633b7f144b5a0be352b41e7"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Dec 12 19:18:21 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Dec 12 19:18:21 2006 +0000"
      },
      "message": "[PtP over ethernet] New peer flag allows much more addressing flexibility\n\n2006-12-12 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (struct connected) Add new ZEBRA_IFA_PEER flag indicating\n\t  whether a peer address has been configured.  Comment now shows\n\t  the new interpretation of the destination addr: if ZEBRA_IFA_PEER\n\t  is set, then it must contain the destination address, otherwise\n\t  it may contain the broadcast address or be NULL.\n\t  (CONNECTED_DEST_HOST,CONNECTED_POINTOPOINT_HOST) Remove obsolete\n\t  macros that were specific to IPv4 and not fully general.\n\t  (CONNECTED_PEER) New macro to check ZEBRA_IFA_PEER flag.\n\t  (CONNECTED_PREFIX) New macro giving the prefix to insert into\n\t  the RIB: if CONNECTED_PEER, then use the destination (peer) address,\n\t  else use the address field.\n\t  (CONNECTED_ID) New macro to come up with an identifying address\n\t  for the struct connected.\n\t* if.c: (if_lookup_address, connected_lookup_address) Streamline\n\t  logic with new CONNECTED_PREFIX macro.\n\t* prefix.h: (PREFIX_COPY_IPV4, PREFIX_COPY_IPV6) New macros\n\t  for better performance than the general prefix_copy function.\n\t* zclient.c: (zebra_interface_address_read) For non-null destination\n\t  addresses, set prefixlen to equal the address prefixlen.  This\n\t  is needed to get the new CONNECTED_PREFIX macro to work properly.\n\t* connected.c: (connected_up_ipv4, connected_down_ipv4,\n\t  connected_up_ipv6, connected_down_ipv6) Simplify logic using the\n\t  new CONNECTED_PREFIX macro.\n\t  (connected_add_ipv4) Set prefixlen in destination addresses (required\n\t  by the CONNECTED_PREFIX macro).  Use CONNECTED_PEER macro instead\n\t  of testing for IFF_POINTOPOINT.  Delete invalid warning message.\n\t  Warn about cases where the ZEBRA_IFA_PEER is set but no\n\t  destination address has been supplied (and turn off the flag).\n\t  (connected_add_ipv6) Add new flags argument so callers may set\n\t  the ZEBRA_IFA_PEER flag.  If peer/broadcast address satisfies\n\t  IN6_IS_ADDR_UNSPECIFIED, then reject it with a warning.\n\t  Set prefixlen in destination address so CONNECTED_PREFIX will work.\n\t* connected.h: (connected_add_ipv6) Add new flags argument so\n\t  callers may set the ZEBRA_IFA_PEER flag.\n\t* interface.c: (connected_dump_vty) Use CONNECTED_PEER macro\n\t  to decide whether the destination address is a peer or broadcast\n\t  address (instead of checking IFF_BROADCAST and IFF_POINTOPOINT).\n\t* if_ioctl.c: (if_getaddrs) Instead of setting a peer address\n\t  only when the IFF_POINTOPOINT is set, we now accept a peer\n\t  address whenever it is available and not the same as the local\n\t  address.  Otherwise (no peer address assigned), we check\n\t  for a broadcast address (regardless of the IFF_BROADCAST flag).\n\t  And must now pass a flags value of ZEBRA_IFA_PEER to\n\t  connected_add_ipv4 when a peer address is assigned.\n\t  The same new logic is used with the IPv6 code as well (and we\n\t  pass the new flags argument to connected_add_ipv6).\n\t  (if_get_addr) Do not bother to check IFF_POINTOPOINT: just\n\t  issue the SIOCGIFDSTADDR ioctl and see if we get back\n\t  a peer address not matching the local address (and set\n\t  the ZEBRA_IFA_PEER in that case).  If there\u0027s no peer address,\n\t  try to grab SIOCGIFBRDADDR regardless of whether IFF_BROADCAST is set.\n\t* if_ioctl_solaris.c: (if_get_addr) Just try the SIOCGLIFDSTADDR ioctl\n\t  without bothering to check the IFF_POINTOPOINT flag.  And if\n\t  no peer address was found, just try the SIOCGLIFBRDADDR ioctl\n\t  without checking the IFF_BROADCAST flag.  Call connected_add_ipv4\n\t  and connected_add_ipv6 with appropriate flags.\n\t* if_proc.c: (ifaddr_proc_ipv6) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* kernel_socket.c: (ifam_read) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* rt_netlink.c: (netlink_interface_addr) Copy logic from iproute2\n\t  to determine local and possible peer address (so there\u0027s no longer\n\t  a test for IFF_POINTOPOINT).  Set ZEBRA_IFA_PEER flag appropriately.\n\t  Pass new flags argument to connected_add_ipv6.\n\t  (netlink_address) Test !CONNECTED_PEER instead of if_is_broadcast\n\t  to determine whether the connected destination address is a\n\t  broadcast address.\n\t* bgp_nexthop.c: (bgp_connected_add, bgp_connected_delete)\n\t  Simplify logic by using new CONNECTED_PREFIX macro.\n\t* ospf_interface.c: (ospf_if_is_configured, ospf_if_lookup_by_prefix,\n\t  ospf_if_lookup_recv_if) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_lsa.c: (lsa_link_ptop_set) Using the new CONNECTED_PREFIX\n\t  macro, both options collapse into the same code.\n\t* ospf_snmp.c: (ospf_snmp_if_update) Simplify logic using new\n\t  CONNECTED_ID macro.\n\t  (ospf_snmp_is_if_have_addr) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) Use new CONNECTED_PEER macro\n\t  instead of testing the IFF_POINTOPOINT flag.\n\t* ospfd.c: (ospf_network_match_iface) Use new CONNECTED_PEER macro\n\t  instead of testing with if_is_pointopoint.  And add commented-out\n\t  code to implement alternative (in my opinion) more elegant behavior\n\t  that has no special-case treatment for PtP addresses.\n\t  (ospf_network_run) Use new CONNECTED_ID macro to simplify logic.\n\t* rip_interface.c: (rip_interface_multicast_set) Use new CONNECTED_ID\n\t  macro to simplify logic.\n\t  (rip_request_interface_send) Fix minor bug: ipv4_broadcast_addr does\n\t  not give a useful result if prefixlen is 32 (we require a peer\n\t  address in such cases).\n\t* ripd.c: (rip_update_interface) Fix same bug as above.\n"
    },
    {
      "commit": "98954844ae56d142e96341d5dff959ec5518111e",
      "tree": "8f411f4fec908605fb4e5ea423874c6a08d82b54",
      "parents": [
        "965b83f9cc287ca36f5a4152c2ac39007c5bc6d8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:33:50 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:33:50 2006 +0000"
      },
      "message": "[lib] Handle upgrade from SUNWzebra to Quagga for \u0027interface fooX:Y\u0027 commands\n\n2006-10-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* if.c: (general) Handle upgrades from SUNWzebra, which tried\n\t  to track each logical interface as a seperate struct\n\t  interface, to Quagga, which assigns only one struct interface\n\t  per ifindex.\n\t  (if_sunwzebra_get) Try decompose a logical interface name\n          (fooX:Y) to the \u0027primary\u0027 name (fooX), for Solaris.\n          (interface_cmd) Use if_sunwzebra_get on Solaris.\n"
    },
    {
      "commit": "965b83f9cc287ca36f5a4152c2ac39007c5bc6d8",
      "tree": "1cfc447235d86ce273d37078d44da82ead4fd39d",
      "parents": [
        "08c8367197cb847eb88942e5d7273cf3352d967f"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Sep 26 15:30:43 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Sep 26 15:30:43 2006 +0000"
      },
      "message": "[snmp] Fix asn_build calls to pass correct variable sizes (fixes 64-bit issues)\n\n2006-09-26 Pierre-Yves Ritschard \u003cpierre-yves@spootnik.org\u003e\n\n\t* smux.c: (smux_open,smux_trap,smux_register) Fix various\n\t  asn_build_* calls to pass the proper length in the final\n\t  argument: use sizeof(\u003cvariable\u003e) instead of sizeof(\u003ctype\u003e),\n\t  since there were several inconsistencies between the actual\n\t  variable type and the size that was passed.  This should\n\t  fix some problems on 64-bit architectures where sizeof(int)\n\t  !\u003d sizeof(long).\n"
    },
    {
      "commit": "db9c0df934e62835bc09604a7ae7932693b4254a",
      "tree": "7e382d6012701e345492756f7716d4f62030e9f8",
      "parents": [
        "f0894cf8c323a25053e1f5e82be3ea5d88c2aacb"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 27 06:44:02 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 27 06:44:02 2006 +0000"
      },
      "message": "[lib] Bug #134: threads should be more robust against backward time jumps\n\n2006-08-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* thread.c: (general) Add support for monotonic clock, it may still\n\t  jump forward by huge amounts, but should be immune to going\n\t  backwards. Fixes bug #134.\n\t  (quagga_gettimeofday_relative_adjust) helper, does what name\n\t  says - adjusts gettimeofday based relative timer.\n\t  (quagga_gettimeofday) helper to keep recent_time up to date.\n\t  (quagga_get_relative) helper, update and getch the relative\n\t  timer using gettimeofday(). POSIX CLOCK_MONOTONIC is also\n\t  supported, but the code is not enabled yet nor tested.\n\t  (quagga_real_stabilised) helper, retrieve absolute time but\n\t  stabilised so as to never decrease.\n\t  (quagga_gettime) Exported interface, analogous to POSIX\n\t  clock_gettime() in interface, supporting several clocks.\n\t  (quagga_time) Exported interface, analogous to traditional\n\t  time(), will never decrease.\n\t  (recent_relative_time) Convenience function to retrieve\n\t  relative_time timeval, similar to existing recent_time absolute\n\t  timeval, for when an approximately recent value will do.\n\t  (remainder) Update to use above helpers.\n\t  (thread_getrusage) Previously was a macro, but needs to be\n\t  a function to twiddle with thread.c private stuff.\n\t* thread.c: Point the GETRUSAGE macro at previous function.\n\t  Export quagga_gettime, quagga_time and recent_relative_time for\n\t  general use.\n"
    },
    {
      "commit": "fbcba805143038af0ae0318b7ec4905708fb0949",
      "tree": "bc3cf8a5c69c17d2eb8ea35edca3598856092a33",
      "parents": [
        "1670008b5401eca13456f914bba7331c3b7b2893"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 22:52:17 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 22:52:17 2006 +0000"
      },
      "message": "[lib] remove autogenerated file, update .cvsignore\n"
    },
    {
      "commit": "cc8b13a00bfe7083ae68755e547a39cd762f2963",
      "tree": "9729858115e6862a6bc65a5454f41ce01e059306",
      "parents": [
        "90c33177f53ae36a8765f5f27bf34a90663806d3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 25 20:40:40 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 25 20:40:40 2006 +0000"
      },
      "message": "[lib] Optimise thread_call by caching pointer to thread history in the thread\n\n2006-07-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* thread.h: (struct thread) Add a cache pointer to the struct\n\t  cpu_thread_history, if it is known - saving hash lookup on\n\t  each thread_call.\n\t* thread.c: (thread_call) Cache the pointer to the\n          cpu_thread_history, so that future thread_calls of same\n          thread can avoid the hash_lookup.\n"
    },
    {
      "commit": "9d0a3260b2d1b57b7edfd3f72885d861883d4621",
      "tree": "019901060c5b0b34154b084e9ae551af33319a6d",
      "parents": [
        "74542d730198a37a872b7114643e29e99c551bcf"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Jul 11 00:06:49 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Jul 11 00:06:49 2006 +0000"
      },
      "message": "[lib] Do not call vty_close in vty_log_out to avoid possible free memory access\n\n2006-07-10 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* vty.c: (vty_log_out) Do not call vty_close, because this could\n\t  result in a parent function\u0027s accessing the freed memory.\n\t  Instead, set status VTY_CLOSE and call shutdown(vty-\u003efd, SHUT_RDWR).\n\t  And add a comment on vty_close.\n"
    },
    {
      "commit": "74542d730198a37a872b7114643e29e99c551bcf",
      "tree": "0b224588a9579f45cda632ac9e33c783405824a3",
      "parents": [
        "1f2c2743ac188b909114a1bf054a9a41a0cd5635"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Mon Jul 10 18:09:42 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Mon Jul 10 18:09:42 2006 +0000"
      },
      "message": "[lib] Fix infinite recursion for errors on vtys with terminal monitor enabled\n\n2006-07-10 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* vty.c: (vty_log_out, vty_read, vty_flush, vtysh_flush, vtysh_read)\n\t  After an I/O error, must set vty-\u003emonitor to 0 before calling\n\t  zlog_warn, otherwise an infinite recursion could occur\n\t  (since zlog_warn triggers a message to be written to the vty,\n\t  and that in turn triggers another error message when it fails, etc.).\n"
    },
    {
      "commit": "08942da588b78f41916ebd6c75fa668b18160ee7",
      "tree": "bca0de6933e8146751a88870e3b0798983837b4e",
      "parents": [
        "27b472533bc8bb0fdb37dcda7596c385d3b9f414"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Mon Jul 03 20:58:29 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Mon Jul 03 20:58:29 2006 +0000"
      },
      "message": "[debug] Debug messages to terminal vty sessions should include timestamps\n\n2006-07-03 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* vty.c: (vty_log_out) Debug messages to terminal vty sessions\n\t  should include timestamps.\n"
    },
    {
      "commit": "adf6221437073f4d427c9c973e4c95381b13fc73",
      "tree": "bd51d5f5bc649068c9082e5569421995a3984ab1",
      "parents": [
        "1c066bfe62951fa1e2f90f02b528342d60fcd6f9"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 30 16:55:41 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 30 16:55:41 2006 +0000"
      },
      "message": "[lib] Fix merge error in ChangeLog\n\n- entry was left in wrong order, according to date.\n"
    },
    {
      "commit": "74176d220ba6fb019a18ebea3e3245a46f33dce1",
      "tree": "3cd34e04c9574900973006eaac13994e3d76386a",
      "parents": [
        "7694787c190e3737d6fc3e15b7e098ce76ed61a2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 30 16:49:02 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 30 16:49:02 2006 +0000"
      },
      "message": "[lib] Fix typo in cpp conditional for malloc.h include\n\n2006-06-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memory.c: Fix typo in cpp conditional around malloc.h, from\n\t  comment in bug #269.\n"
    },
    {
      "commit": "5f41e90e49b8ced6b5adac3933736067d2b24584",
      "tree": "4fab3a3596e75f5ec3959c614f921de5773bdc4a",
      "parents": [
        "95509e64e3d0fc8b01045b497b7077225d9997f0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 10:42:18 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 10:42:18 2006 +0000"
      },
      "message": "[lib] Remove bare routes in route_types: fix mistake in commmit\n\n2006-06-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* route_types.awk: Fix previous commit. Forgot to remove the\n\t  printf of the bare/numeric route-type help string (empty string)\n"
    },
    {
      "commit": "95509e64e3d0fc8b01045b497b7077225d9997f0",
      "tree": "844c81daf0c0ff9d6d3c3169fa84aaaab75cbe93",
      "parents": [
        "d1c65c211ce6259b95ec8922f3f3127dc74e118f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 08:26:07 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 08:26:07 2006 +0000"
      },
      "message": "[lib] Remove numeric route-type argument in redistribute arg strings\n\n2006-06-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* route_types.awk: Remove setting the \u0027bare\u0027 numeric route type\n\t  in redist strings.\n"
    },
    {
      "commit": "9c42a6ebbc103a0a4be6af782388ad26e6c03556",
      "tree": "fcbdec3f26cb36539b9d66e1b8f4e63cfe1c3799",
      "parents": [
        "466c96562c6e39596dc441c30420b335f83f01ea"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 07:52:03 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 07:52:03 2006 +0000"
      },
      "message": "[lib] Centralise Zserv route type information, auto-generate redist strings\n\n2006-05-23 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* route_types.txt: New file, table of ZEBRA_ROUTE definitions.\n\t* route_types.awk: New script, to parse previous and generate\n\t  (for now) redistribute string defines.\n\t* Makefile.am: build route_types.h using previous two, ala\n\t  memtypes.h, include the script and table file in EXTRA_DIST.\n\t* command.h: pull in route_types.h, add a REDIST_STR define.\n"
    },
    {
      "commit": "630c97ce0f87a719f678a24bd84945d4f145fdc5",
      "tree": "1b87b2247617af51556f24a45b6735674d7f948d",
      "parents": [
        "c024fd0c76bc305cd6b6bab0989226bd9ec5e763"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:48:17 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:48:17 2006 +0000"
      },
      "message": "[zebra] remove internal if_flag_dump, use libzebras version.\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/if.c: (if_flag_dump) remove the whitespace indentation, callers\n\t  should provide.\n\t* zebra/interface.c: (if_flag_dump_vty) redundant code, remove.\n\t  (if_dump_vty) use libzebra if_flag_dump.\n"
    },
    {
      "commit": "c024fd0c76bc305cd6b6bab0989226bd9ec5e763",
      "tree": "fabd937784fd330d046244a8febb418ca8663b5c",
      "parents": [
        "8ce5cfd13eb7f8474b3129a57c160273889c2573"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:43:09 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:43:09 2006 +0000"
      },
      "message": "[lib] list_delete shouldn\u0027t duplicate list_delete_all_node\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* linklist.c: (list_delete) call list_delete_all_node, don\u0027t\n\t  duplicate it.\n"
    },
    {
      "commit": "8ce5cfd13eb7f8474b3129a57c160273889c2573",
      "tree": "314dba4d94fe3a47fe188a700adbb73fee0ab4d8",
      "parents": [
        "e5cd706c1a4b8138e9b78933e03460f0b032c77e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:41:02 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:41:02 2006 +0000"
      },
      "message": "[lib] Experimental: have XFREE NULL out the freed pointer\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memory.h: Experimental, have XFREE macro NULL out the freed\n\t  pointer.\n"
    },
    {
      "commit": "e5cd706c1a4b8138e9b78933e03460f0b032c77e",
      "tree": "4233e178ed021ff69f035f0ed1c1a989a4bbf9e9",
      "parents": [
        "ac904dec03ce6b1bbd1bab1718085a366d485bd8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:25:55 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:25:55 2006 +0000"
      },
      "message": "[lib] Fix vector leak in error path in command.c, CID #38\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (cmd_describe_command_real) Fix leak, CID #38.\n"
    },
    {
      "commit": "fb66b29c6701129f0222275eaa206f7ac8ab30cc",
      "tree": "b9a3d53d867ead2e9f8dbb8c1add9c2eb63b1943",
      "parents": [
        "a4b303038363185f60dfef7023cb02715a9a4315"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:26:15 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:26:15 2006 +0000"
      },
      "message": "[lib] Add support for Sun libc printstack to zlog_backtrace_sigsafe\n\n2006-05-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac:\n\t  Check for Sun libc printstack(), add a general HAVE_STACK_TRACE\n\t  define for lib/log.c, if any supported stack symbol dumping\n\t  function is found (glibc backtrace/sun libc printstack).\n\t* log.c: (general) Add support for Sun libc printstack().\n\t  (hex_append) make the cpp conditional on general HAVE_STACK_TRACE\n\t  define.\n\t  (zlog_backtrace_sigsafe) Ditto. Add printstack() version of the\n\t  the DUMP macro in this function.\n"
    },
    {
      "commit": "a4b303038363185f60dfef7023cb02715a9a4315",
      "tree": "1eea12d93c580da94af435666428a7a02e67da8e",
      "parents": [
        "d09552d0c7d389f83c3833bf82f7a97da37007da"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:18:38 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:18:38 2006 +0000"
      },
      "message": "[lib] vty_log shouldn\u0027t crash if called when vty isn\u0027t initiliased\n\n2006-05-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* vty.c: (vty_log/vty_log_fixed) dont crash if called when vty\n\t  hasn\u0027t been initiliased.\n"
    },
    {
      "commit": "d09552d0c7d389f83c3833bf82f7a97da37007da",
      "tree": "0e6d58e813515d408b5f04099f0b5f7e12e2aedd",
      "parents": [
        "35cfc90cce32b19c71d2f40aab06d36eb6bfdc44"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:15:46 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:15:46 2006 +0000"
      },
      "message": "[lib] malloc.h is deprecated, try not to include it anymore\n\n2006-05-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memory.c: malloc.h is deprecated in favour of stdlib.h, however\n\t  we still need it on GNU Libc for mallinfo().\n"
    },
    {
      "commit": "35cfc90cce32b19c71d2f40aab06d36eb6bfdc44",
      "tree": "91b9e00379fb444b98f62f04632809996d2a8186",
      "parents": [
        "105b8239f1d98156c82900d636391f94b787e541"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:08:24 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:08:24 2006 +0000"
      },
      "message": "[lib] include inttypes.h rather than stdint.h, provide defines where missing\n\n2006-05-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra.h: Include inttypes.h rather than stdint.h, best practice\n\t  according to the autoconf manual.\n\t  Add UINT*_MAX defines for older platforms lacking these (FBSD 4)\n"
    },
    {
      "commit": "9c37851eac4e75cda515761cae7c63309add30ea",
      "tree": "3fcf98573c83f117f1e0219fcab8e160af70e56a",
      "parents": [
        "0f38dc4d4729b562551f8f53e7343f5a53b2dbf5"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun May 21 04:04:49 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun May 21 04:04:49 2006 +0000"
      },
      "message": "[interface configuration] Try to avoid losing address info after shutdown.\n2006-05-21 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (struct connected) Document the meaning of the\n\t  ZEBRA_IFC_REAL and ZEBRA_IFC_CONFIGURED flags.\n\t* connected.c: (connected_withdraw) Do not delete the connected\n\t  address if the ZEBRA_IFC_CONFIGURED flag is set.\n\t  (connected_add_ipv4,connected_add_ipv6) Before calling\n\t  connected_withdraw, unset the ZEBRA_IFC_CONFIGURED flag\n\t  on the superseded connected structure.\n"
    },
    {
      "commit": "d6d672aaf930661f502a623d18d7a4abb4f184f2",
      "tree": "fc85e80d1a268dfc420ab5f4f6a306b8e246fc46",
      "parents": [
        "d16e04335968ea05fda60cec01b48df8c345a8ce"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 15 16:56:51 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 15 16:56:51 2006 +0000"
      },
      "message": "[lib] Add string mapping table for Zserv commands\n\n2006-05-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* log.c: (general) Generalise struct zebra_route_desc into\n\t  struct zebra_desc_table and, similar to route_types, add a\n\t  command_types table to describe Zserv protocol commands.\n\t  (route_types[]) use a macro to use designated initialisers\n\t  while avoiding tedious duplication.\n\t  (zserv_command_string) lookup string from zebra_desc_table,\n\t  similar to zebra_route_string\n\t* zebra.h: Add declaration for zserv_command_string, adjust the\n\t  comments to reflect zebra_desc_table.\n"
    },
    {
      "commit": "d16e04335968ea05fda60cec01b48df8c345a8ce",
      "tree": "9ae64651811fa1dfbaba9dc4d114c0a72ace2a55",
      "parents": [
        "0b26f81bf9e81be0f65787c48061709427c70d10"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 15 10:56:46 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 15 10:56:46 2006 +0000"
      },
      "message": "[lib] CID #39, Fix the vty completion leak-fix to only free when desired\n\n2006-05-13 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* vty.c: (vty_describe_command) CID #39 fix was too hasty, just\n\t  cause it /can/ leak doesn\u0027t mean it always will have, check\n\t  first.\n"
    },
    {
      "commit": "5fc60519ede0d34688832e353c35bf1832a4330d",
      "tree": "e934b6a2730d3dfdc877f097b7c896ec9a97fcf4",
      "parents": [
        "2fe8aba3a09b3e2a64ee1861d8eeb389efaf1eb0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:24:09 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:24:09 2006 +0000"
      },
      "message": "[lib] CID #55, fix return of freed pointer, cmd_describe_command_real\n\n2006-05-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (cmd_describe_command_real) Fix return of freed\n\t  pointer when no-match, CID #55.\n"
    },
    {
      "commit": "2fe8aba3a09b3e2a64ee1861d8eeb389efaf1eb0",
      "tree": "f2c18e4f6c17430fccf12efdc76a9e9e6041e2ef",
      "parents": [
        "d2519962b71b512eb5fd55a378f8ef748d17c30f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:22:01 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:22:01 2006 +0000"
      },
      "message": "[lib] CID #39, fix leak in error path, vty_describe_command\n\n2006-05-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* vty.c: (vty_describe_command) fix leak of describe vector in\n\t  error path, CID #39.\n"
    },
    {
      "commit": "d2519962b71b512eb5fd55a378f8ef748d17c30f",
      "tree": "fae01ade69fc4e516f76d045939437482983021a",
      "parents": [
        "9376c3421ae9ccc37e51ed742c5d0bed333f8d20"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:19:37 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:19:37 2006 +0000"
      },
      "message": "[lib] CID #37, fix error case leak, cmd_complete_command_real\n\n2006-05-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (cmd_complete_command_real) Fix leak of cmd_vector\n\t  in error case, Coverity CID #37.\n"
    },
    {
      "commit": "9376c3421ae9ccc37e51ed742c5d0bed333f8d20",
      "tree": "fdcaf6f4a896a0ba80b0b4fc83325e55f65897e2",
      "parents": [
        "ae128056e9bb1b52e3b6c3263f5f7fd83efa5c3a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:17:38 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:17:38 2006 +0000"
      },
      "message": "[lib] CID #3, fix forward-null errors in vty_prefix_list_uninstall\n\n2006-05-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* plist.c: (vty_prefix_list_uninstall) Fix potential NULL deref\n\t  of prefix and typestr strings, Coverity CID #3.\n"
    },
    {
      "commit": "86228fde807f4a13313e9828b8438f18a045a6ba",
      "tree": "a601ae20a73d4a1645a40ee15a28cfe595c31aee",
      "parents": [
        "213d8dadcae5edd424ef98bf0657874a4c44faf2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 15:00:30 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 15:00:30 2006 +0000"
      },
      "message": "[lib] command.c exports host global, add it to header.\n\n2006-03-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* privs.c: (zprivs_caps_init) Change user IDs before lowering\n\t  privileges, while this seems to work on Linux, on Solaris\n\t  it rightfully refuses due to PRIV_PROC_SETID having been\n\t  dropped.\n\t* command.h: Add the struct host global exported from command.c\n"
    },
    {
      "commit": "213d8dadcae5edd424ef98bf0657874a4c44faf2",
      "tree": "15a6a1ddcae662f3a4183a6dbb386adaa731d15e",
      "parents": [
        "6cf0cf0ca400062a03c10a92d60ec3013569a383"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:45:47 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:45:47 2006 +0000"
      },
      "message": "[lib] Trivial: fix line lengths of a comment in workqueu.c\n\n2006-03-30 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* workqueue.c: (work_queue_run) fix line length of comment\n"
    },
    {
      "commit": "6cf0cf0ca400062a03c10a92d60ec3013569a383",
      "tree": "d5a12023011770ccd6ef6b2ef8ea432c5c4f9eb3",
      "parents": [
        "15aa6a1a732eef1049dbc64d7ede9236772cafcf"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:43:17 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:43:17 2006 +0000"
      },
      "message": "[lib] Mark most arguments in DEFUN_CMD_FUNC_TEXT as potentially unused\n\n2006-03-30 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.h: (DEFUN_CMD_FUNC_TEXT) Annotate arguments as\n\t  potentially being unused.\n"
    },
    {
      "commit": "d4ce4f681e04bdd11f5bc7ab30bc6e9048fdf6d2",
      "tree": "6e51e1b5dfc4972c1bda1e78bf7efca0695ce512",
      "parents": [
        "6878453548971f7c2c22a8bcb5d6a9b4e9d73d0d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:30:19 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:30:19 2006 +0000"
      },
      "message": "[lib] fix gensub call in memtypes.awk to pass \"g\", not g.\n\n2006-03-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memtypes.awk: Fix gensub call, g should be a string..\n"
    },
    {
      "commit": "6878453548971f7c2c22a8bcb5d6a9b4e9d73d0d",
      "tree": "9c91ec9f6de4acdfb5beb2b9108411b7f378e8a2",
      "parents": [
        "1a8ee0ec18ac280fda9362259d362805ce62be7d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:25:24 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:25:24 2006 +0000"
      },
      "message": "[lib] status field/flags no longer used in struct workqueue\n\n2006-03-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* workqueue.h: (struct work_queue) Remove status field and\n\t  state flag, no longer used.\n"
    },
    {
      "commit": "b51f126edee1c170e69951f92033e3e5aec2862d",
      "tree": "ff637d3f5909fd777aa8e8fe0740349258485e6f",
      "parents": [
        "4bf6a3621c828ea9f2c62298b525a2c1a191a45e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:09:38 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:09:38 2006 +0000"
      },
      "message": "[bgpd] trivial: use a distinct memtype for struct bgp_synchronize\n\n2006-03-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memtypes.c: Add MTYPE_BGP_SYNCHRONISE.\n\t* bgp_advertise.c: Use a distinct memory type for struct\n\t  bgp_synchronize.\n"
    },
    {
      "commit": "cec0c4fb1beb024e54d134a419893e2ad4389254",
      "tree": "769e13753bfc06427e626f74c1635e8856d05aca",
      "parents": [
        "41be32bfe6d0d6ed0058babdcbc3aac18988dbec"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:58:05 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:58:05 2006 +0000"
      },
      "message": "[lib] fix libtool version argument in Makefile.am\n\n2006-03-16 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* Makefile.am: Fix -version-info argument.\n"
    },
    {
      "commit": "41be32bfe6d0d6ed0058babdcbc3aac18988dbec",
      "tree": "f0b516abae4a83abf0a5daa41eb4fb7afb266695",
      "parents": [
        "b5b628c1fa132c1ac57fc1b102ad0605831649ef"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:53:59 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:53:59 2006 +0000"
      },
      "message": "[lib/memory] Add mallinfo support\n\n2006-02-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: Check for mallinfo, being careful to link test\n\t  so we can detect things like umem being used (which doesn\u0027t\n\t  provide a mallinfo).\n\t* lib/memory.c: (mtype_memstr) new helper function to\n\t  return human friendly string for a byte count.\n\t  (mtype_stats_alloc) new function, for users to retrieve\n\t  number of objects allocated.\n\t  (show_memory_mallinfo) New function, show mallinfo statistics\n\t  if available.\n\t  (show_memory_all_cmd) Call show_memory_mallinfo, if mallinfo\n\t  is available.\n\t* lib/memory.h: Export mtype_memstr and mtype_stats_alloc.\n\t  Provide a define for a reasonable buffer size for\n\t  mtype_memstr.\n"
    },
    {
      "commit": "924f9d32d9c42d6861f19bae795c48b48c83af23",
      "tree": "e0fe7af931c30d337c1dec84bff8dfb97fa146bf",
      "parents": [
        "cbdfbaa51b600c7b217968b99a9b5a8fbf04bec4"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:25:52 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:25:52 2006 +0000"
      },
      "message": "[lib/privs] Changing user IDs should be done before dropping privileges\n\n2006-03-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* privs.c: (zprivs_caps_init) Change user IDs before lowering\n\t  privileges, while this seems to work on Linux, on Solaris\n\t  it rightfully refuses due to PRIV_PROC_SETID having been\n\t  dropped.\n"
    },
    {
      "commit": "478ccfd61bd61fd6925c84811c2c0e893a38a38b",
      "tree": "0babd52f1f13b4de28d29836f5e4f3f0cdc4802b",
      "parents": [
        "3e0c78ef8a8fb80f52a36dab99d76a5913281e4c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Mar 06 18:18:37 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Mar 06 18:18:37 2006 +0000"
      },
      "message": "[lib] export show_address_cmd debug command in if.h\n\n2006-03-06 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* if.h: export show_address_cmd, for anyone who wishes to use\n\t  it.\n"
    },
    {
      "commit": "5a54df971e7da8aacddbf54afa33bd81b6c01f13",
      "tree": "37af9d8264eb91ef6c2da346c5eab4f2357f3a5c",
      "parents": [
        "6a419733c5fba17b246b5cce4af73828f8c346ef"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 21 01:37:14 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 21 01:37:14 2006 +0000"
      },
      "message": "[lib/sockunion] trivial: use XSTRDUP.\n\n2006-02-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* sockunion.c: (sockunion_{su2str,log}) Use XSTRDUP.\n\t  Particularly with _su2str, as that string gets XFREEd,\n\t  which can be annoying if run debug code in memory.c.\n"
    },
    {
      "commit": "306d8890439cdb9128d063ee2f77700a11e6843c",
      "tree": "fa5c8e035891cc83e9f5cfa80343df4bcac40fb7",
      "parents": [
        "3a570c8b7b56b5a3042fbc035a01c753440b927c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Feb 02 17:50:19 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Feb 02 17:50:19 2006 +0000"
      },
      "message": "[lib/workqueue] remove the useless \u0027delay\u0027 factor.\n\n2006-02-02 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* workqueue.h: (struct work_queue) Remove the delay field.\n\t  It served no purpose and just introduced bad behaviour.\n\t  Should be excised before its allowed to escape into 1.0.\n\t  This removes need for the \u0027flood\u0027 and runs_since_clear\n\t  fields.\n\t* workqueue.c: (general) excise delay factor between queue\n\t  runs, hence the \u0027flood\u0027 crap too.. See above.\n\t* bgp_route.c: (bgp_{clear_node,process}_queue_init) delay\n\t  field is removed from workqueue spec.\n"
    },
    {
      "commit": "581a02a9f71f43012c67217fe12d97808875c352",
      "tree": "4d04c1fe0d3195ba54b7fb126176a09c370dfea3",
      "parents": [
        "e8e1946edf6ba87ef53832cdceccc39d7f0c3f26"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:22:16 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:22:16 2006 +0000"
      },
      "message": "[lib/stream] small compile fix, use uint64_t, not u_int64_t.\n\n2006-01-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.c: (stream_getq_from) should use POSIX uint64_t\n\t  not u_int64_t. Latter is neither a traditional BSD type, nor\n\t  a POSIX type.\n"
    },
    {
      "commit": "eac314c7c49f6c0ec502be08e244f91bfc778739",
      "tree": "eeb4d011b921101b05a054068d7ed8091fd235bc",
      "parents": [
        "d34b8991b4c156ff3281558dd8252d3787ae8d8b"
      ],
      "author": {
        "name": "vincent",
        "email": "vincent",
        "time": "Tue Jan 17 23:39:04 2006 +0000"
      },
      "committer": {
        "name": "vincent",
        "email": "vincent",
        "time": "Tue Jan 17 23:39:04 2006 +0000"
      },
      "message": "2006-01-17 Vincent Jardin \u003cvincent.jardin@6wind.com\u003e\n\n        * md5.c: Don\u0027t forget to keep const.\n        * regex.c: Cleanup code and remove warnings.\n"
    },
    {
      "commit": "d211086aefd45e0b7c113a43ed5eb620626b8681",
      "tree": "353b32a059c864a748d1f52f90e8a57c8adc7b6f",
      "parents": [
        "789f78ac5a5bf1c22c9c053c883f60d45761e89b"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:43:18 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:43:18 2006 +0000"
      },
      "message": "[lib/zclient] Export zclient_create_header\n\n2006-01-17 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zclient.{c,h}: (zclient_create_header) export this, seems others\n\t  could use it (in lieu of more complete zserv helpers).\n"
    },
    {
      "commit": "789f78ac5a5bf1c22c9c053c883f60d45761e89b",
      "tree": "ff7e4a00e6ff72fc3f15c8cd648a34f9c0160f34",
      "parents": [
        "7d0b0c4b7f510178a8960b0e00368be017ed5a08"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:42:03 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:42:03 2006 +0000"
      },
      "message": "[lib/vty] Add \u0027no terminal monitor\u0027 alias\n\n2006-01-17 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* vty.c: (no_terminal_monitor_cmd) New ALIAS for\n\t  terminal_no_monitor, in the more normal negating format,\n\t  to be kind to my fingers.\n\t  (vty_init) install new ALIAS.\n"
    },
    {
      "commit": "7d0b0c4b7f510178a8960b0e00368be017ed5a08",
      "tree": "4657272b687af5f85235ce85db9ed77dbfac4142",
      "parents": [
        "d3092e7f226c48f7caeac22ad62f39e8d71d9e12"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:40:45 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:40:45 2006 +0000"
      },
      "message": "[lib/md5] md5_loop should take void pointer for more useful caller warnings.\n\n2006-01-17 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* md5.{c,h}: (md5_loop) Is better off taking a void * and doing\n\t  cast to byte wise type internally, avoids needs for casts\n\t  in users.\n"
    },
    {
      "commit": "c1b9800a60f073c7d57f6232f9af7ae39bc3353a",
      "tree": "94fc0006fcf73d4ab4733bef23689cb8f36772ee",
      "parents": [
        "c77d4546619f9d3e0ccfac5acbc0ebb42658a61f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 01:54:02 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 01:54:02 2006 +0000"
      },
      "message": "[zserv] Extend Zserv header with version information and marker field\n\n2006-01-16 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/zclient.h: Update the Zserv protocol header with a version\n\t  field.  Define the old command field to be a \u0027marker\u0027, to\n\t  allow old Zserv and updated Zserv to be differentiated.\n\t  Future updates will bump the version field obviously. New\n\t  command field is made wider.  Try to stop using the\n\t  \u0027zebra_size_t\u0027 typedef in the callbacks.\n\t* lib/zclient.c: Update to read/write new format header.\n\t* zebra/zserv.c: Ditto\n"
    },
    {
      "commit": "c77d4546619f9d3e0ccfac5acbc0ebb42658a61f",
      "tree": "007f6c4e2c85e4df115c39011aa7ad3fb379f434",
      "parents": [
        "44316fef4d93b3d94cf45663ce35797d32acce71"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 11 01:59:04 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 11 01:59:04 2006 +0000"
      },
      "message": "[zserv] Update interface flags to 8 bytes wide.\n\n2006-01-11 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* if.h: (struct interface) expand flags to 8 bytes.\n\t* zclient.c: (zebra_interface_{add,state}_read) stream read of\n\t  interface flags now need to use stream_getq.\n\t  (zebra_interface_if_set_value) ditto\n\n2006-01-11 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zserv.c: (zsend_interface_{add,delete,update}) if flags are\n\t  8 bytes now, update to write out with stream_putq.\n"
    },
    {
      "commit": "4b201d46348b81bd9d59aa626c81f7457ea6ef38",
      "tree": "b841d11214e5ec8ff4904d193c5e0b7c4e741a50",
      "parents": [
        "e14b7fca6279fe9dc41c8aa9816b5685952c4b19"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 10 14:35:19 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 10 14:35:19 2006 +0000"
      },
      "message": "[stream] Add quad-word support and stream_resize\n\n2006-01-10 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.c: (stream_new) Allocate stream data as seperate object.\n\t  (stream_free) free the data.\n\t  (stream_resize) new function, resize stream to new size.\n\t  (stream_{get,put}q*) new functions to get/put quad word size\n\t  types.\n\t* stream.h: (struct stream) make data seperate from the stream.\n\t  Export new stream_resize and quad-word get/put functions.\n"
    },
    {
      "commit": "f80a016fbd5ba51dc08412d7fd0794b51223c978",
      "tree": "6be9f97cfb52681d692c2c40fb3e4ffe47e1ac23",
      "parents": [
        "6083e1f82ce3a33d9929dea8c64cbc5ffe486000"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 29 16:03:32 2005 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 29 16:03:32 2005 +0000"
      },
      "message": "2005-12-29  Greg Troxel  \u003cgdt@fnord.ir.bbn.com\u003e\n\n        * vty.c (vty_hello): add cast to quiet lint (from David Young)\n\n(patch-lint)\n"
    },
    {
      "commit": "00c290e02edd6c906b669de9f31a45d14ed8bec0",
      "tree": "5d81084291d38b18144e6f53847026d24587b400",
      "parents": [
        "89368d9f8b70fef5c196db9055bd6a7e7aaa4f36"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Nov 26 09:21:43 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Nov 26 09:21:43 2005 +0000"
      },
      "message": "[c99] change gcc zero-length array to C99 flexible array declaration\n\n2005-11-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* buffer.c: (struct buffer_data) change gcc zero array\n\t  declaration to C99 incomplete array.\n\t* stream.h: (struct stream) same\n\t* ospf_api.c: (struct opaque_lsa) same\n"
    },
    {
      "commit": "b6026073584b855d47a8e2033d2aa3413a3394e9",
      "tree": "acc8812673bc85302da33007549e7828e2a23877",
      "parents": [
        "6e0f1b940dc281863ef9d9f3bd57676927b8603f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 24 12:51:24 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 24 12:51:24 2005 +0000"
      },
      "message": "[lib/zebra.h] fix Linux compile error\n\n2005-11-24 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra.h: s/u_int/unsigned int/, u_int is a BSD type, defining\n\t  __USE_BSD on Linux pulls in further things from netinet/ip.h\n\t  which dont preprocess for some reason. There is no C99\n\t  shorthand type directly equivalent to u_int afaict, so don\u0027t\n\t  use it.\n"
    },
    {
      "commit": "6e0f1b940dc281863ef9d9f3bd57676927b8603f",
      "tree": "d6b5bdc6518a4ca4ac8c9d6df0ffd4bab21b369b",
      "parents": [
        "a0ace1e8f2331f497ccea3d840a4051f75341fdf"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 24 12:47:17 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 24 12:47:17 2005 +0000"
      },
      "message": "[privs/solaris] Fix unused variable and incorrect format string.\n\n2005-11-24 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* privs.c: (zcaps2sys/solaris) remove unused variable.\n\t  (zprivs_state_caps/solaris) Format string missing a\n\t  specifier.\n"
    },
    {
      "commit": "889e9311e5c900ce24eecf00fcb5b8b9d51bb020",
      "tree": "d5f3ebd53e4185157027becf01d67ace5400e24d",
      "parents": [
        "0fb58d5d7993b638fc46085944d17d3a54d66046"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:46:35 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:46:35 2005 +0000"
      },
      "message": "[workqueue] Update workqueue users callbacks to additional arguments\n\n2005-11-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) pass struct work-queue to callback functions.\n\t* workqueue.h: (struct work_queue) move the state flag\n\t  variables to end.\n\t  Add an opaque pointer to spec, for user-data global to the\n\t  queue.\n\t  Pass reference to work_queue to all callbacks.\n\t* workqueue.c: (work_queue_item_remove) pass ref to workqueue\n\t  to user callbacks.\n\t  (work_queue_run) ditto.\n"
    },
    {
      "commit": "76367ea9753aa9cef7cf5d3c954f55b5725f31da",
      "tree": "d3b6dc5bd84fb5db7db89cef1d5c1f0bc302f9ca",
      "parents": [
        "190880dc790007a14911ef8c170af33a50a7a674"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:05:35 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:05:35 2005 +0000"
      },
      "message": "[bug #231] check and include stdint.h, also add std\u003dc99 to gcc CFLAGS\n\n2005-11-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: Tell gcc we like C99.\n\t  [bug #231] Check and test for stdint.h.\n\t* lib/zebra.h: [bug #231] include stdint, if its there.\n"
    },
    {
      "commit": "190880dc790007a14911ef8c170af33a50a7a674",
      "tree": "8de89e02883f522cd5d730a416ce771fd2f23ed2",
      "parents": [
        "31a5976bb99f1875ebcfc29a6359f3a7ae81a795"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 12:07:47 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 12:07:47 2005 +0000"
      },
      "message": "2005-11-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Add state to detect queue floods.  There\u0027s no sense\n\t  trying to be sparing of CPU resources, if the queue is\n\t  flooding and using ever more memory resources. we should just\n\t  get on with clearing the queue.\n\t  The sense of delay and hold were wrong way around, fix.\n\t* workqueue.h: (struct work_queue) Add status bitfield.  Add\n\t  \u0027flood\u0027 integer to workqueue spec.  Add runs_since_clear\n\t  counter to workqueue.\n\t* workqueue.c: (work_queue_new) set defaults for delay, hold\n\t  and flood.\n\t  (work_queue_add) initial schedule should use delay, not hold.\n\t  (show_work_queues) Print flood field, conserve whitespace.\n\t  (work_queue_unplug) use delay, not hold.\n\t  (work_queue_run) consecutive runs should be seperated by hold\n\t  time, not delay.\n\t  Keep track of number of consecutive runs, go into \u0027overdrive\u0027\n\t  if queue is being flooded, we can\u0027t avoid making heavy use of\n\t  resources, better to use CPU than ever more RAM.\n"
    },
    {
      "commit": "db29ae5fcaee1d2de371415e351afe6c3df19874",
      "tree": "616eb06aa27c650c064d07d84dbebb95485ec258",
      "parents": [
        "58e1befe5fbd6eade52a1536acb49ea4b4fc5837"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Nov 12 22:36:41 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Nov 12 22:36:41 2005 +0000"
      },
      "message": "[lib] \u0027show route-map\u0027 should print call action seperate from exit policy\n\n2005-11-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* routemap.c: (vty_show_route_map_entry) call action is\n\t  seperate from exit action, latter should still be printed\n\t  regardless of whether a call is specified.\n"
    },
    {
      "commit": "a49ad236da5cff707bdb54e14e7852d63ee3c9ea",
      "tree": "7012778d844e3e0fcea3b04e6ed7daff8817ea69",
      "parents": [
        "412008568bddbc9475eafba224d1a1703d6cca97"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 13:00:54 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 13:00:54 2005 +0000"
      },
      "message": "2005-11-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memtypes.h: Update auto-built file.\n"
    },
    {
      "commit": "9c4f1c6f10d4770933c0558528a0e59557b96230",
      "tree": "3e5d6c73e9e78b0aa6ed2cc8ffe276f2b19f3548",
      "parents": [
        "484315fd274b3782f72abc95c9796c604e53bcc9"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 11:04:07 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 11:04:07 2005 +0000"
      },
      "message": "2005-11-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* if.c: (connected_free) use MTYPE for connected label.\n\t  memtypes.c: Add MTYPE_CONNECTED_LABEL\n"
    },
    {
      "commit": "34204aac424f8c29317d863d64f1c3bb4d241a50",
      "tree": "a7ad861d7b3454dbe96b6e7a31d7dbacc4ad24e3",
      "parents": [
        "35a60c2d3c217e3b835821a7f6ea458e2eff44cf"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 09:00:23 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 09:00:23 2005 +0000"
      },
      "message": "2005-11-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra.h: BSD BYTE_ORDER define isn\u0027t available everywhere,\n\t  define if needs be.\n\t* checksum.h: new file. checksum.c exports in_cksum, provide\n\t  a header for it.\n\t* checksum.c: (in_cksum) callers shouldn\u0027t have to know it uses\n\t  a u_short internally, change to void *.\n\t* Makefile.am: Add checksum.h\n\t* command.h: remove bogus trailling slash.\n\t* md5.c: (general) Update it for the twentieth century. ANSI\n\t  declarations are widely supported now.. Don\u0027t include system\n\t  headers, only include zebra.h. Use POSIX types (the\n\t  alternative is to define u_int64_t in a portable way - rest\n\t  of Quagga needs same cleanup).\n\t  Make endian-conditional code be compiler conditional rather\n\t  than preprocessor conditional, so that breakage gets noticed\n\t  quicker.\n\t* md5.h: POSIX types. Get rid of the odd __P() non-ANSI capable\n\t  compiler compatibility hack.\n"
    },
    {
      "commit": "05865c90ab0bc95b8ca1a54c794809891666cdce",
      "tree": "885eb032e62c4acd4706e27c24c7bc49aa259899",
      "parents": [
        "0241684ea77e8aa20ad2cb3903589559f4a7b009"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 26 05:49:54 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 26 05:49:54 2005 +0000"
      },
      "message": "2005-10-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: Use MTYPE_HOST, MTYPE_STRVEC. Some other fixups,\n\t  including fixing some likely leaks in config_write_file.\n\t* vty.c: memory macro usage fixes.\n\t  (vty_read_config) fix leak where relative config file is\n\t  specified.\n"
    },
    {
      "commit": "0241684ea77e8aa20ad2cb3903589559f4a7b009",
      "tree": "2bb64a53f5d8c1091839be9e1afb6e4625828f38",
      "parents": [
        "216565ab68148d3161422c0d73730614bfeccd7c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 26 05:05:16 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 26 05:05:16 2005 +0000"
      },
      "message": "2005-10-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Cleanup a some calls to XFREE,strdup, etc. to use\n\t  the memory.h macros.\n\t* memtypes.c: Add MTYPE_IF_RMAP_NAME, MTYPE_PQUEUE,\n\t  MTYPE_PQUEUE_DATA and MTYPE_HOST.\n\t* memtypes.h: update auto-built file.\n\t* if_rmap.c: Use MTYPE_IF_RMAP_NAME.\n\t* pqueue.c: Use the two MTYPE_PQUEUE mtypes for allocations.\n"
    },
    {
      "commit": "c188c37caaf589a17b22e9889e63ec96f2f57106",
      "tree": "018d7f024a08c986a5558425ede05590518c9a23",
      "parents": [
        "f9ad937f537df92bf3119686eee97db7b7176674"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Oct 21 02:57:41 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Oct 21 02:57:41 2005 +0000"
      },
      "message": "2005-10-20 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* sockopt.c: (setsockopt_multicast_ipv4) If IP_ADD_MEMBERSHIP\n\t  fails with errno equal to EADDRINUSE, then issue an info\n\t  message and try IP_DROP_MEMBERSHIP followed by IP_ADD_MEMBERSHIP.\n"
    },
    {
      "commit": "24065a3d4a61a136a17996a48df02b0b180bc6f0",
      "tree": "e1e6463a5d56500d94abb74b320bcb6b99d4c6a1",
      "parents": [
        "38d3c163cff92465c94732cb7ecb9761053d2038"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Oct 20 22:28:14 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Oct 20 22:28:14 2005 +0000"
      },
      "message": "2005-10-20 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* memory.c: (show_memory_vty) Omit zero statistics.  Print separators\n\t  only if some non-zero stats have been printed in between.\n\t  (show_separator) New function to print a separator.\n\t  (show_memory_all) Keep track of whether a separator is needed\n\t  between the different memory statistics groups.\n"
    },
    {
      "commit": "5012322ddb0219138ee3583c50fd6e99c5a1d857",
      "tree": "8b6d5f43579428b29c72167ac099fe215ae1d9e9",
      "parents": [
        "eb3da6dfa92be8083bbe1b4436818754be158b93"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Oct 18 20:19:13 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Oct 18 20:19:13 2005 +0000"
      },
      "message": "2005-10-18 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* memtypes.h: Add MTYPE_OSPF_VERTEX_PARENT (to match memtypes.c).\n"
    },
    {
      "commit": "eb3da6dfa92be8083bbe1b4436818754be158b93",
      "tree": "72067c3eb6ec2f5fd1678d555062424f163c6599",
      "parents": [
        "3623814abc4df8435d2fc50697c6d7fc66f21088"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 18 04:20:33 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 18 04:20:33 2005 +0000"
      },
      "message": "2005-10-18 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) SPF memory management cleanup and fix for rare\n\t  double-free bug.\n\t* ospf_spf.h: (struct vertex_parent) New struct to hold parent\n\t  specific data, eg the backlink and the parent vertex pointer,\n\t  and point to the appropriate general struct vertex_nexthop.\n\t  (struct vertex_nexthop) remove parent vertex pointer, so\n\t  this struct can be shared across vertices.\n\t  (struct vertex) rename list child to list children. Remove\n\t  list of nexthops, replace with list of vertex_parents.\n\t* ospf_spf.c: (update_stat) trivial, remove cast from void *.\n\t  (vertex_nexthop_new) remove init of parent - field is gone\n          from struct vertex_nexthop.\n          (ospf_canonical_nexthops_free) Remove the canonical\n          vertex_nexthop memory objects. These are the vertex_nexthops\n          attached to the first level of router vertices from the root.\n          (vertex_parent_new) new function, create a vertex_parent.\n          (vertex_parent_free) ditto, but free it.\n          (ospf_vertex_new) Update to match changes to struct vertex.\n          (ospf_vertex_free) Recursively free a struct vertex and its\n          children. The parent list is used as a reference count.\n          vertex_nexthops must be free seperately, if required.\n          (ospf_vertex_dump) update to match struct vertex changes.\n          Print out backlink of parents too.\n          (ospf_vertex_add_parent) ditto.\n          (ospf_lsa_has_link) update comment.\n          (ospf_nexthop_add_unique) removed, not needed anymore.\n          (ospf_nexthop_merge) ditto.\n          (ospf_spf_consider_nexthop) renamed to ospf_spf_add_parent.\n          Simplified to just create vertex_parent and add it.\n          (ospf_spf_flush_parents) new function, flush out the parent\n\t  list.\n\t  (ospf_nexthop_calculation) Take the relevant route_lsa_link\n\t  as an argument, which simplifies things and removes the need\n\t  for the hack in ospf_nexthop_add_unique - ospf_spf_next\n\t  already knew exactly which link the cost calculated was for.\n\t  Update to match struct vertex changes too.\n\t  (ospf_spf_next) Don\u0027t create a vertex for W unnecessarily, if\n          it\u0027s there\u0027s a vertex already created for W, use it, and\n          hence there\u0027s no need to free it either.\n          Update some manipulation/comparisons of distance to match.\n          Flush the parent list if a lower cost path is found.\n          (ospf_spf_route_free) unused, removed.\n          (ospf_spf_dump) match the struct vertex changes, and dump the\n          ifname if possible.\n          (ospf_spf_calculate) At end of SPF, free the canonical nexthops\n          and call ospf_vertex_free on the root vertex to free the\n\t  entire tree.\n\t* ospf_interface.c: (ospf_vl_set_params) match struct vertex\n          changes.\n        * ospf_route.c: (ospf_intra_route_add) ditto\n          (ospf_route_copy_nexthops_from_vertex) ditto\n\t* memtypes.c: (memory_list_ospf) Add MTYPE_OSPF_VERTEX_PARENT.\n"
    },
    {
      "commit": "f52d13cb2e8e7197934d5f241f88647f9b9d78b8",
      "tree": "b0aa01befc07f57ed47e83ac7dfb383284c49d26",
      "parents": [
        "c05612b9a702d0f49c379c92deb6daab55372aea"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 17:38:06 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 17:38:06 2005 +0000"
      },
      "message": "2005-10-01 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: Declare new functions zebra_route_string() and\n\t  zebra_route_char().\n\t* log.c: (zroute_lookup,zebra_route_string,zebra_route_char) New\n\t  functions to map zebra route numbers to strings.\n\t* zebra_vty.c: (route_type_str) Remove obsolete function: use new\n\t  library function zebra_route_string() instead.  Note that there\n\t  are a few differences: for IPv6 routes, we now get \"ripng\" and\n\t  \"ospf6\" instead of the old behavior (\"rip\" and \"ospf\").\n\t  (route_type_char) Remove obsolete function: ues new library function\n\t  zebra_route_char() instead.  Note that there is one difference:\n\t  the old function returned \u0027S\u0027 for a ZEBRA_ROUTE_SYSTEM route,\n\t  whereas the new one returns \u0027X\u0027.\n\t  (vty_show_ip_route_detail,vty_show_ipv6_route_detail) Replace\n\t  route_type_str() with zebra_route_string().\n\t  (vty_show_ip_route,vty_show_ipv6_route) Replace route_type_char()\n\t  with zebra_route_char().\n\t* bgp_vty.c: (bgp_config_write_redistribute) Use new library function\n\t  zebra_route_string instead of a local hard-coded table.\n\t* ospf6_asbr.c: Remove local hard-coded tables zroute_name and\n\t  zroute_abname. Change the ZROUTE_NAME macro to use new library\n\t  function zebra_route_string().  Remove the ZROUTE_ABNAME macro.\n\t  (ospf6_asbr_external_route_show): Replace ZROUTE_ABNAME() with\n\t  a call to zebra_route_char(), and be sure to fix the format string,\n\t  since we now have a char instead of a char *.\n\t* ospf6_zebra.c: Remove local hard-coded tables zebra_route_name and\n\t  zebra_route_abname.  Note that the zebra_route_name[] table\n\t  contained mixed-case strings, whereas the zebra_route_string()\n\t  function returns lower-case strings.\n\t  (ospf6_zebra_read_ipv6): Change debug message to use new library\n\t  function zebra_route_string() instead of zebra_route_name[].\n\t  (show_zebra): Use new library function zebra_route_string() instead\n\t  of zebra_route_name[].\n\t* ospf_dump.c: Remove local hard-coded table ospf_redistributed_proto.\n\t  (ospf_redist_string) New function implemented using new library\n\t  function zebra_route_string().  Note that there are a few differences\n\t  in the output that will result: the new function returns strings\n\t  that are lower-case, whereas the old table was mixed case.  Also,\n\t  the old table mapped ZEBRA_ROUTE_OSPF6 to \"OSPFv3\", whereas the\n\t  new function returns \"ospf6\".\n\t* ospfd.h: Remove extern struct message ospf_redistributed_proto[],\n\t  and add extern const char *ospf_redist_string(u_int route_type)\n\t  instead.\n\t* ospf_asbr.c: (ospf_external_info_add) In two messages, use\n\t  ospf_redist_string instead of LOOKUP(ospf_redistributed_proto).\n\t* ospf_vty.c: Remove local hard-coded table distribute_str.\n\t  (config_write_ospf_redistribute,config_write_ospf_distribute): Use\n\t  new library function zebra_route_string() instead of distribute_str[].\n\t* ospf_zebra.c: (ospf_redistribute_set,ospf_redistribute_unset,\n\t  ospf_redistribute_default_set,ospf_redistribute_check)\n\t  In debug messages, use ospf_redist_string() instead of\n\t  LOOKUP(ospf_redistributed_proto).\n\t* rip_zebra.c: (config_write_rip_redistribute): Remove local hard-coded\n\t  table str[]. Replace str[] with calls to new library function\n\t  zebra_route_string().\n\t* ripd.c: Remove local hard-coded table route_info[].\n\t  (show_ip_rip) Replace uses of str[] with calls to new library\n\t  functions zebra_route_char and zebra_route_string.\n\t* ripng_zebra.c: (ripng_redistribute_write) Remove local hard-coded\n\t  table str[].  Replace str[i] with new library function\n\t  zebra_route_string(i).\n\t* ripngd.c: Remove local hard-coded table route_info[].\n\t  (show_ipv6_ripng) Use new library function zebra_route_char() instead\n\t  of table route_info[].\n"
    },
    {
      "commit": "5e4914c31ead7b99eeed73067451367336b21422",
      "tree": "f2c49d5c8182d4ee1b8ad8ca5005fe1223da18c8",
      "parents": [
        "ceacedba227e77156f92f7676b274c48a2817e8f"
      ],
      "author": {
        "name": "vincent",
        "email": "vincent",
        "time": "Thu Sep 29 16:34:30 2005 +0000"
      },
      "committer": {
        "name": "vincent",
        "email": "vincent",
        "time": "Thu Sep 29 16:34:30 2005 +0000"
      },
      "message": "2005-09-29 Alain Ritoux \u003calain.ritoux@6wind.com\u003e\n\n    * lib/smux.[ch]: allow to retreive global OID (identified by \u003c0\n      namelen).\n    * ospf_ism.c: generate SNMP traps on Interface state change\n    * ospf_nsm.c: generate SNMP traps on Neighbour state change\n    * ospf_snmp.[ch]: support for SNMP traps for interface and neighbours.\n"
    },
    {
      "commit": "ceacedba227e77156f92f7676b274c48a2817e8f",
      "tree": "f362ecc8f6f183347ebe45ab79727b54d2f527a6",
      "parents": [
        "e62178797d0ee5f326fd587b84ee965cf88833e4"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Sep 29 14:39:32 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Sep 29 14:39:32 2005 +0000"
      },
      "message": "2005-09-29 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: Add the test for Solaris least-privileges. Set\n\t  defines for whether capabilities are supported and whether of\n\t  the linux or solaris variety.\n\t  Add missing-prototypes, missing-declarations, char-subscripts\n\t  and cast-qual warnings to default cflags, cause Hasso enjoys warnings,\n\t  and we really should clean the remaining ones up. (ie isisd..).\n\t* (*/*main.c) Update the zebra_capabilities_t arrays in the various\n\t  daemons to match the changes made in lib/privs.h.\n\t* zebra.h: Solaris capabilities requires priv.h to be included.\n\t* privs.{c,h}: Add support for Solaris Least-Privileges.\n\t  privs.h: Reduce some of the abstract capabilities, which do\n\t  not have rough equivalents on both systems. Rename the net\n\t  related caps to _NET, as they should have been in first\n\t  place.\n\t  (zprivs_terminate) should take the zebra_privs_t as argument so\n\t  that it can update change pointer.\n\t  Add an additional privilege state, ZPRIVS_UNKNOWN.\n\t* privs.c: (various capability functions) Add\n\t  Solaris privileges variants.\n\t  (zprivs_state) Use privs.c specific generic types to\n          represent various capability/privilege related types, so that\n          each can be typedef\u0027d as appropriate on each platform.\n\t  (zprivs_null_state) static added, to hold the state the null\n\t  method should report (should be raised by default, and\n          LOWERED if zprivs_terminate has been called)\n          (zprivs_state_null) Report back the zprivs_null_state.\n          (cap_map) Make it able to map abstract capability to multiple\n          system capabilities.\n          (zcaps2sys) Map to abstract capabilities to multiple system\n          privileges/capabilities.\n          (zprivs_init) move capability related init to seperate\n\t  function, zprivs_caps_init.\n          (zprivs_terminate) ditto, moved to zprivs_caps_terminate.\n          Set the change_state callback to the NULL state, so the\n          user can continue to run and use the callbacks.\n"
    },
    {
      "commit": "fbf5d033041e406ecefd27c2deebf5a4953d1155",
      "tree": "e9173ab5e05fc86e95f325d2cb2a7a123eb33327",
      "parents": [
        "3fdb2dd9dd8b4ab3517896092dd1b677d191adf9"
      ],
      "author": {
        "name": "vincent",
        "email": "vincent",
        "time": "Thu Sep 29 11:25:50 2005 +0000"
      },
      "committer": {
        "name": "vincent",
        "email": "vincent",
        "time": "Thu Sep 29 11:25:50 2005 +0000"
      },
      "message": "2005-09-29 Alain Ritoux \u003calain.ritoux@6wind.com\u003e\n\n    * lib/filer.c: show protocol name in filter_show()\n    * lib/plist.c: show protocol name in vty_show_prefix_entry()\n    * routemap.c: show protocol name in vty_show_route_map_entry()\n    * lib/vty.c: in vty_command(), show protocol name if command unknown\n\n    * zebra/zserv.c: Always provide distance fo route add\n\n    * ripd/rip_snmp.c: rip2IfConfReceive() sends values in conformance\n      with RFC. Also PeerDomain is now set to a STRING type.\n    * ripd/ripd.h: rip_redistribute_add() API includes metric and distance\n    * ripd/ripd.c: rip_redistribute_add() API i.e. stores metric and distance\n      Now allows a RIP-route to overcome a redistributed route coming\n      from a protocol with worse (higher) administrative distance\n      Metrics from redistribution are shown in show ip rip\n    * ripd/rip_zebra.c: adapt to the rip_redistribute_add() API, i.e.\n      provide distance and metric\n    * ripd/rip_interface.c: adapt to the rip_redistribute_add() API\n    * ripd/rip_routemap.c: no RMAP_COMPILE_ERROR on (metric \u003e 16) usage\n      rather a CMD_WARNING, because set metric ius shared with other\n      protocols using larger values (such as OSPF)\n      The match metric action takes first external metric if present\n      (from redistribution) then RIP metric.\n"
    },
    {
      "commit": "c1a03d4774f8ecc30a21267469d48cb2276de48c",
      "tree": "1bf9309bc99e316a5633d18f7724330d8d6fa836",
      "parents": [
        "aa2e32be264710ef208516dfe1661b8148c3eede"
      ],
      "author": {
        "name": "vincent",
        "email": "vincent",
        "time": "Wed Sep 28 15:47:44 2005 +0000"
      },
      "committer": {
        "name": "vincent",
        "email": "vincent",
        "time": "Wed Sep 28 15:47:44 2005 +0000"
      },
      "message": "2005-09-28 Alain Ritoux \u003calain.ritoux@6wind.com\u003e\n\n    * lib/md5-gnu.h: removed\n    * lib/md5.h: replaces md5-gnu.h\n    * lib/Makefile.am: use correct md5.h\n    * lib/md5.c: import from WIDE\n    * ospfd/ospf_packet.c: use new md5 API\n    * ripd/ripd.c: use new md5 API\n"
    },
    {
      "commit": "75b2dd025af1d839279a21ee4b3035085d17331c",
      "tree": "19435808ccbdc15bc1e19fbe2c6bdb44d2b6a782",
      "parents": [
        "319572cc52267bfd55cca5eaab405df4db27ddaf"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 21 14:06:35 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 21 14:06:35 2005 +0000"
      },
      "message": "2005-09-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memtypes.{c,h}: Add MTYPE_AS_SEG_DATA.\n"
    }
  ],
  "next": "e6a4feb763749ff0c63558db456e617915fd1386"
}
