)]}'
{
  "log": [
    {
      "commit": "eac5702d06ee574e9e155c4e60c251e525dc4149",
      "tree": "0b2fc1b7ff7432d21df8e0346736f6bf2f25287a",
      "parents": [
        "58192df7746231fbc82e248b5ddfc7cab95ab1e7"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:25 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: enable TCP corking\n\n* bgp_packet.c: (bgp_write) On BGP write, use TCP_CORK to provide hints to\n  kernel about TCP buffering.  This will cause BGP packets to occur in\n  bigger chunks (full size MTU), improving performance and getting rid of\n  one of the problems reported in the UNH BGP conformance test.\n"
    },
    {
      "commit": "58192df7746231fbc82e248b5ddfc7cab95ab1e7",
      "tree": "15184e9fadcad65385fda94ae9f397bdc6e53b76",
      "parents": [
        "35398589cf1293956dfefb5096aa5284c72a696f"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:24 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "lib: add TCP_CORK wrapper\n\n* sockunion.{c,h}: (sockopt_cork) wrapper for TCP_CORK socket option for\n  those platforms that provide it.  For other platforms, it is just a nop.\n"
    },
    {
      "commit": "35398589cf1293956dfefb5096aa5284c72a696f",
      "tree": "a0d844e42273fd0ee217652a6fd33552661f8b6f",
      "parents": [
        "2c9fd7e07283b8904ef20030c9dadb032e999b12"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:23 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: leave peer socket in non-blocking mode (mostly)\n\n* bgpd: Rather than toggling socket in/out of non-block mode, just leave it\n  in nonblocking mode.\n\n  One exception is in bgp_notify which only happens just before close.\n"
    },
    {
      "commit": "2c9fd7e07283b8904ef20030c9dadb032e999b12",
      "tree": "e134706cdc5c91daf0002ef3e2d22d12b09cb758",
      "parents": [
        "95cbbd2ace2f88019a7a54e67b4b12aaeda177f7"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Sat Jul 24 12:44:07 2010 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: \"Intern\" communities in route maps\n\n* bgp_community.[ch]: (community_lookup) New helper function to look\n  up a community list in the hash table.\n\n* bgp_routemap.c: A new community structure was being allocated for\n  every BGP update which matched a route map which set a community.\n  This behavior led to rapid growth in the memory consumed by bgpd.\n  Adding the communities to the hash table addresses the memory\n  growth, but may introduce a problem in modifying or deleting the\n  \u0027set community\u0027 statement in the route map.\n"
    },
    {
      "commit": "95cbbd2ace2f88019a7a54e67b4b12aaeda177f7",
      "tree": "b3a43ef5d9da20802df0dba9c72814354eb84267",
      "parents": [
        "d8509631b47aba867c59eb463bb346d7ae5b91c7"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Fri Jul 23 14:43:04 2010 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: New show commands for improved view and address family support\n\nMany show commands do not have support for multiple views and do not\ntreat different address families uniformly.  The following changes add\na number of commands with support for views and rationalized treatment\nof IPv4 v IPv6 and unicast v multicast (such as in JUNOS, IOS XR and\nmore recent versions of IOS).\n\n* bgp_route.c: (bgp_show_community) Inserted a new second argument (the\n  name of the view) and the code to look up that name in the BGP structure.\n  The NULL argument in the call to bgp_show (indicating the default view)\n  was replaced by the specified view.  The existing calls to\n  bgp_show_community had a NULL second argument inserted to make clear\n  that they refer to the default view.\n\n  (top level) Added new functions via the DEFUN and/or ALIAS macros (and\n  the associated command table entries) to add the commands\n\n    show bgp ipv4 (unicast|multicast)\n    show bgp ipv4 (unicast|multicast) A.B.C.D\n    show bgp ipv4 (unicast|multicast) A.B.C.D/M\n    show bgp ipv6 (unicast|multicast)\n    show bgp ipv6 (unicast|multicast) X:X::X:X\n    show bgp ipv6 (unicast|multicast) X:X::X:X/M\n\n      These show either the full BGP table or the specified route or\n      prefix for the given address family.\n\n    show bgp view WORD (ipv4|ipv6) (unicast|multicast) community\n    show bgp view WORD (ipv4|ipv6) (unicast|multicast) community \\\n            (AA:NN|local-AS|no-advertise|no-export){1,4}\n\n      For the specified view and address family, these show entries\n      matching any community or the specified communit(y)(ies).\n\n    show bgp view WORD (ipv4|ipv6) (unicast|multicast) neighbors \\\n            (A.B.C.D|X:X::X:X) (advertised-routes|received-routes)\n\n      For the specified view and address family, show the routes\n      advertised to or received from the given BGP neighbor.\n\n    show bgp [view WORD] ipv4 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X)\n    show bgp [view WORD] ipv4 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X) A.B.C.D\n    show bgp [view WORD] ipv4 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X) A.B.C.D/M\n    show bgp [view WORD] ipv6 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X)\n    show bgp [view WORD] ipv6 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X) X:X::X:X\n    show bgp [view WORD] ipv6 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X) X:X::X:X/M\n\n      For the specifed (optional) view and address family, show either\n      the full BGP table or the specified route or prefix for the given\n      route server client peer.\n\n* bgp_vty.c: (top level) Added new functions via the DEFUN and/or ALIAS\n  macros (and the associated command table entries) to add the commands\n\n    show bgp [view WORD] (ipv4|ipv6) (unicast|multicast) summary\n    show bgp [view WORD] (ipv4|ipv6) (unicast|multicast) rsclient summary\n\n      For the specified (optional) view and address family, display\n      either the normal summary table for BGP peers, or the route server\n      client table showing the import and export policies.\n"
    },
    {
      "commit": "d8509631b47aba867c59eb463bb346d7ae5b91c7",
      "tree": "d30c6b0a92ba8f6a2dfcac6ab89bf8bf548c3ad5",
      "parents": [
        "c8f3fe3063cb9ff193b13011cfbda3e605395340"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 14:56:00 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 14:56:00 2011 +0000"
      },
      "message": "release: 0.99.18\n\n* configure.ac: Bump to 0.99.18\n"
    },
    {
      "commit": "c8f3fe3063cb9ff193b13011cfbda3e605395340",
      "tree": "42713ac0369f0ef372c657ded091b00dbe6a019b",
      "parents": [
        "0c46638122f10019a12ae9668aec91691cf2e017"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Dec 05 20:28:02 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "bgpd: Remove AS Path limit/TTL functionality\n\n* draft-ietf-idr-as-pathlimit doesn\u0027t seem to have gone anywhere, and its\n  author does not think it will make progress in IDR. Remove all support\n  introduced for it, but leave stubs for the commands to avoid breaking\n  any configurations.\n\n  Basically reverts cecab5e9725792e60a5e4b473e238a14cd85815d.\n"
    },
    {
      "commit": "0c46638122f10019a12ae9668aec91691cf2e017",
      "tree": "1302073e844ff46061ebb938bcd218ed9fbb96bf",
      "parents": [
        "8f228de7b3f9d6f641c75b27ac7ac6e5862cf804"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Dec 05 17:17:26 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:50:56 2011 +0000"
      },
      "message": "bgpd/security: CVE-2010-1674 Fix crash due to extended-community parser error\n\n* bgp_attr.c: (bgp_attr_ext_communities) Certain extended-community attrs\n  can leave attr-\u003eflag indicating ext-community is present, even though no\n  extended-community object has been attached to the attr structure.  Thus a\n  null-pointer dereference can occur later.\n  (bgp_attr_community) No bug fixed here, but tidy up flow so it has same\n  form as previous.\n\n  Problem and fix thanks to anonymous reporter.\n"
    },
    {
      "commit": "8f228de7b3f9d6f641c75b27ac7ac6e5862cf804",
      "tree": "16af34ad6f3f792c1175ae4cc92bab31cdcd5dcf",
      "parents": [
        "e7a6d80d4fe70a546a33ffe063f182252237ccd8"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:02:11 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Extend the \"[no] debug ospf6 route\" vty commands\n\n* ospf6_route.c ([no_]debug_ospf6_route) Include memory as a debug\n  option.  This allows ospf6 route memory debugging to be enabled or\n  disabled interactively or from a config file.\n"
    },
    {
      "commit": "e7a6d80d4fe70a546a33ffe063f182252237ccd8",
      "tree": "d0315314a3772846fef416f027ec42b445fb0ce9",
      "parents": [
        "ae2254aa7f2eb7436734f497658f1f26f4bf37c7"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:03:02 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Route locking (memory) cleanup\n\n* ospf6_route.c: (ospf6_route_best_next) Allows unlock route, even\n  when there\u0027s no next route.  This is consistent with how\n  ospf6_route_next() behaves.\n\n* ospf6_intra.c: (ospf6_intra_prefix_lsa_remove) Make sure the last\n  route considered is always unlocked.  This is needed when the for\n  loop terminates because ospf6_route_is_prefix() returns zero.\n"
    },
    {
      "commit": "ae2254aa7f2eb7436734f497658f1f26f4bf37c7",
      "tree": "8734f0e2aa855b90d9ec5cb961cd9990b5574905",
      "parents": [
        "fd795eb89cc421097f6580016ea9fbd3585d07bb"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:01:41 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Have ospf6d cleanup when it terminates normally\n\nA clean exit makes it easier to use memory debuggers.\n\n* ospf6_asbr.c: (ospf6_asbr_terminate) Add a function to do route map\n  cleanup.\n* ospf6_lsa.c: (ospf6_lsa_terminate) Add a function to cleanup the lsa\n  handler vector.\n* ospf6_main.c: (ospf6_exit) Add an function that causes ospf6d to\n  gracefully exit.\n* ospf6_message.c: (ospf6_message_terminate) Add a function that frees\n  the send and receive buffers.\n* ospf6_top.c: (ospf6_delete) Enable the ospf6_delete() function.\n  Disable ospf6 before freeing everything.\n"
    },
    {
      "commit": "fd795eb89cc421097f6580016ea9fbd3585d07bb",
      "tree": "a8d49db03924483ad0662294f2a8f44f4f5a6d66",
      "parents": [
        "1d19234e79c77a7d55194b513f2a77c6a691bc2c"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:03:23 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Remove obsolete code\n\n* ospf6_area.c: (ospf6_area_delete) Get rid of unused code that refers\n    to a nonexistent function and structure member.\n"
    },
    {
      "commit": "1d19234e79c77a7d55194b513f2a77c6a691bc2c",
      "tree": "4daf54c79e1cc3c3c6fa3ca66cfccb68770b3dd1",
      "parents": [
        "7e69d993673597334b1e1b3d1072a4c064f293d5"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:02:38 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Fix memory allocation issues in SPF\n\n* ospf6_area.c: Call ospf6_spf_table_finish() before deleting the spf\n    table.  This ensures that the associated ospf6_vertex structures\n    are also freed.\n* ospf6_spf.c: Only allocate a priority queue when a spf calculation\n    is actually performed.  Also defer calling ospf6_spf_table_finish().\n"
    },
    {
      "commit": "7e69d993673597334b1e1b3d1072a4c064f293d5",
      "tree": "cf0362e38edca6f487aa638cc67c3c994a4cfcf1",
      "parents": [
        "4bd045d5dd28653af899c01d6f0c413d74677114"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:01:17 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:30:54 2011 +0000"
      },
      "message": "lib: zlog should clean up its memory\n\n* log.c: (closezlog) Also free the dynamically allocated filename when\n    a log is closed.\n"
    },
    {
      "commit": "4bd045d5dd28653af899c01d6f0c413d74677114",
      "tree": "f1e633f50e4dc19b4b0cda9dc6e6feb46e3bab46",
      "parents": [
        "c8e7b8959051bf525183bdbff605e54b4b532e2c"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:00:54 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:30:54 2011 +0000"
      },
      "message": "lib: Add a function to delete all interfaces\n\nif.c: (if_terminate) This adds a cleanup function that can be called\n    when a daemon exits, similar to vty_terminate().\n"
    },
    {
      "commit": "c8e7b8959051bf525183bdbff605e54b4b532e2c",
      "tree": "af9af45c64164f7e7ee9aec5575837624e23df65",
      "parents": [
        "6392aa83c4f895ebbd23817c68d9b0da0de2e0f8"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Aug 27 14:12:54 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:30:54 2011 +0000"
      },
      "message": "bgpd: use Jenkins hash for BGP transit, cluster and attr hashes\n\n* bgp_attr.c: I observed while doing some debugging that even for simple\n  tests there was a lot of hash collisions for BGP attributes.  Switch to\n  using Jhash rather than additive hashing.  Probably overkill, but the\n  function is fast and available.\n\n  ({attrhash,cluster,transit}_hask_key_make) convert to Jenkins hash,\n  instead of additive hash.\n"
    },
    {
      "commit": "6392aa83c4f895ebbd23817c68d9b0da0de2e0f8",
      "tree": "535c89a194ec7fd3b9f4a6e33ceab10579e62329",
      "parents": [
        "25ff1e88bb5f1b0a16a364d7206db3ebdc5ecf52"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Aug 27 14:11:14 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:30:54 2011 +0000"
      },
      "message": "lib: Better hashing of string values using Bernstein hash\n\n* hash.{h,c}: (string_hash_make) Hash optimised for strings, current\n  implementation using Bernstein hash, which offers a good compromise\n  between distribution and performance.\n* distribute.c: (distribute_hash_make) use previous instead of additive\n  string hash.\n* if_rmap.c: (if_rmap_hash_make) ditto\n"
    },
    {
      "commit": "25ff1e88bb5f1b0a16a364d7206db3ebdc5ecf52",
      "tree": "cdb0c95588899c39ad676ef167c87b5c2a4d3a51",
      "parents": [
        "c099baf6f0a6509d70fb62a8d6341432abb50d91"
      ],
      "author": {
        "name": "Barry Friedman",
        "email": "barryf@google.com",
        "time": "Thu Feb 03 14:02:53 2011 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: Remove extra lock on interior table node\n\nIf the radix tree creates an extra interior node in bgp_node_get(),\nit locks the interior node even though this node is not returned to\nthe caller, so it may never be unlocked. The lock prevents this node\nfrom being deleted.\n\n* bgpd/bgp_table.c: (bgp_node_get) Remove lock on interior node which\n  prevents proper node deletion\n"
    },
    {
      "commit": "c099baf6f0a6509d70fb62a8d6341432abb50d91",
      "tree": "2fb2449dbf00789ca69cbd6a9dd9bb3f65d5bc1f",
      "parents": [
        "7badc26301c8063dc2c6f171c11f9af4f3d0df20"
      ],
      "author": {
        "name": "Wataru Tanitsu",
        "email": "wataru@ate-mahoroba.jp",
        "time": "Fri Sep 10 09:47:56 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: Fix display of unsigned attributes\n\n* bgp_route.c: (route_vty_out*) The local prefix, metric and weight values\n  are all stored as uint32_t.  Change the format to %u so that large values\n  are not displayed as negative integers.\n"
    },
    {
      "commit": "7badc26301c8063dc2c6f171c11f9af4f3d0df20",
      "tree": "32ccf03522bacb163529e00c10df4798e5365808",
      "parents": [
        "368473f6120ff295253bcc0d774c6bd75d8cf98b"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:31 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: fix use of free memory by update_rsclient\n\n* bgp_route.c: (bgp_static_update_rsclient) BGP sometimes crashes when\n  removing route server client because of use after free.\n\n  The code to update rsclient created a local static copy of bgp attributes\n  but neglected to handle the extra information pointer.  The extra\n  information was getting freed by bgp_attr_unintern() and reused later when\n  the copy was passed to bgp_attr_intern().\n\n  The fix is to use the attr_dup function to create a copy of the extra\n  information, then clean it up.\n"
    },
    {
      "commit": "368473f6120ff295253bcc0d774c6bd75d8cf98b",
      "tree": "2c8663378a82c107a6feb2955a10e61e06f5b869",
      "parents": [
        "f6269b4f7a2faddc44d03ff0a0e4d141562c67ee"
      ],
      "author": {
        "name": "Robert Bays",
        "email": "rbays@vyatta.com",
        "time": "Thu Aug 05 10:26:29 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: unlock node on aggregate error\n\n* bgp_route.c: (bgp_aggregate_set) make sure to unlock BGP node if failure\n"
    },
    {
      "commit": "f6269b4f7a2faddc44d03ff0a0e4d141562c67ee",
      "tree": "6a1b638f032f7bb49888b8582451b2420ae4da9f",
      "parents": [
        "fac9c6b63aa74b34a22c89f005f7241d65a1765a"
      ],
      "author": {
        "name": "Robert Bays",
        "email": "rbays@vyatta.com",
        "time": "Thu Aug 05 10:26:28 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: fix errors in aggregate address command\n\n* bgpd: (bgp_aggregate_{set,unset,delete}) This fixes locking and other\n  issues with aggregate set/unset command\n"
    },
    {
      "commit": "fac9c6b63aa74b34a22c89f005f7241d65a1765a",
      "tree": "5ae640ab0541712f8c794ad394558d2974d8e5cf",
      "parents": [
        "6c88b44dcb26b60bb1f93e5c387aa102019ed849"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:30 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: use XCALLOC to allocate bgpd damp array\n\n* bgpd: (bgp_damp_parameter_set) The BGP reuse_index is not initialized\n  properly.  This would cause sporadic crash when disabling dampening.  Use\n  XCALLOC correctly and the right size array is initialized and no memset is\n  needed.\n"
    },
    {
      "commit": "6c88b44dcb26b60bb1f93e5c387aa102019ed849",
      "tree": "772aacb2702dd635ca271ceca966986e38ecb3be",
      "parents": [
        "cca85d27a59c31e1b20e4c4adc7d9bb57606e584"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jul 27 16:28:55 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: fix bgp_node locking issues\n\n* bgpd: Connected table locks were being locked but not unlocked, such that\n  eventually a lock would exceed 2^31 and become negative, thus triggering\n  an assert later on.\n* bgp_main.c: (bgp_exit) delete connected elements along with ifp\u0027s.\n* bgp_nexthop.c: (bgp_nexthop_lookup{,_ipv6}) add missing unlocks\n  (bgp_multiaccess_check_v4) ditto\n  (bgp_connected_{add,delete}) Use a distinct memtype for bgp_connected_ref.\n  (bgp_scan_finish) reset the nexthop cache to clean it up when bgpd exits\n* bgp_route.c: fix missing bgp_node unlocks\n* lib/memtype.c: (memory_list_bgp) add MTYPE_BGP_CONN\n* testing: has been tested for almost 2 months now.\n"
    },
    {
      "commit": "cca85d27a59c31e1b20e4c4adc7d9bb57606e584",
      "tree": "2330a624f08c04a4125dc3153c97d93361c2da85",
      "parents": [
        "d1de1c25962b5470f3825bc82d15e4dd29e1f842"
      ],
      "author": {
        "name": "Chris Hall",
        "email": "chris.hall.list.highwayman.com",
        "time": "Fri Jul 23 11:27:11 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 11:09:13 2011 +0000"
      },
      "message": "lib: Fix accounting of memory\n\n* lib/memory.c: (zrealloc) If is called with NULL pointer then it should\n  increment allocations because it behaves the same as zmalloc.\n\n  (zfree) is called with NULL pointer, it does nothing therefore allocation\n  count should not change.\n"
    },
    {
      "commit": "d1de1c25962b5470f3825bc82d15e4dd29e1f842",
      "tree": "9e9b3c6ed51a0fdc78e0eb8900fad8f7e7598b98",
      "parents": [
        "4dd87df5af8a59174362e44f83df11f12457c8b4",
        "e6844aa5d23cf56dd1f31afc96e8145ab188953f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 20 22:08:02 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 20 22:09:15 2011 +0000"
      },
      "message": "Merge paul/ospfd/201012-review ospfd and lib/ fixes and performance improvements\n"
    },
    {
      "commit": "e6844aa5d23cf56dd1f31afc96e8145ab188953f",
      "tree": "38d3e2be40a99f26e926a2733ac2ea70b466d236",
      "parents": [
        "30b0017696dfe300b6ea630a6b6c91ea440d7828"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Mar 18 20:20:53 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Mar 18 20:20:53 2011 +0300"
      },
      "message": "doc: fix \"ipv6 address\" interface command syntax (#608)\n"
    },
    {
      "commit": "30b0017696dfe300b6ea630a6b6c91ea440d7828",
      "tree": "0438c379abb3c2a779e82de2cbcb20ebb59d31ce",
      "parents": [
        "b016e9def4255a7406f5633c6edb820e13c9088e"
      ],
      "author": {
        "name": "John Kemp",
        "email": "kemp@network-services.uoregon.edu",
        "time": "Fri Mar 18 17:52:18 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Mar 18 17:52:18 2011 +0300"
      },
      "message": "bgpd: improve \"monotonic\" uptime correction\n\nOlder versions of Quagga/Zebra would output a value in MRT table\ndump files for \"uptime\" aka \"ORIGINATED\" that was a WALL clock\nvalue.  Given that uptime is now internally a bgp_clock MONOTONIC\nvalue, the output in the MRT files is showing up as monotonic.\n\nNote: time of MRT dump is still recorded correctly as a\ntime() based value, so we haven\u0027t lost that value.\n\nProposal is to correct the uptime output on the vty and in the\nMRT files to again display something more akin to WALL time.\n\n* bgp_dump.c: (bgp_dump_routes_func) add conditional correction\n* bgp_route.c: (route_vty_out_detail) make correction conditional, move\n  variable declaration to beginning of the function\n"
    },
    {
      "commit": "b016e9def4255a7406f5633c6edb820e13c9088e",
      "tree": "195c03ca0e79b7e4a33cb55b62713580b775ec55",
      "parents": [
        "0fa0335316ce14a79ea4bbb0c40e1322c9941dd3"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Sun Mar 13 01:14:08 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Mar 13 01:14:08 2011 +0300"
      },
      "message": "ripngd: copy debug statements fix from ripd\n\nDoesn\u0027t ripng needs same fix as ripd.\n"
    },
    {
      "commit": "0fa0335316ce14a79ea4bbb0c40e1322c9941dd3",
      "tree": "10c01d97fd76b037fc8f8d321eb70d62ff6e29b5",
      "parents": [
        "6e22b9017e1ae2ce61c383b1b2b63973207704ac"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Feb 24 13:52:14 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Feb 24 13:52:14 2011 +0300"
      },
      "message": "ripd: resolve debug statements issue (bug 442)\n\n...A nasty bug, if you forgot to disable debugging, stored the config\nand reboot your machine - if you really depend on ripd, then the machine\nwill not fully come back on the network, because ripd fails.\n"
    },
    {
      "commit": "6e22b9017e1ae2ce61c383b1b2b63973207704ac",
      "tree": "9a0288714317c886de2588d2c3a03b10b1cca8a1",
      "parents": [
        "c7aa8abd8788c3607ad0131f02e892cf92221e40"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Mon Jan 17 10:58:52 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 17 10:58:52 2011 +0300"
      },
      "message": "bgpd: VTY string fixes for debug commands\n\n* bgpd/bgp_debug.c: fix VTY strings for BGP debug commands to match\n  correct syntax\n"
    },
    {
      "commit": "c7aa8abd8788c3607ad0131f02e892cf92221e40",
      "tree": "01495f12e5a9fa0cff3b1ddecb24bccb4975de35",
      "parents": [
        "403138e189c24f6867824c4eeb668d11564e1ca0"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Fri Jan 14 18:27:05 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 14 18:27:05 2011 +0300"
      },
      "message": "bgpd: fix handling of \"Unsupported Capability\"\n\n* bgp_packet.c: (bgp_notify_receive) justify the difference between\nBGP_NOTIFY_OPEN_UNSUP_PARAM and BGP_NOTIFY_OPEN_UNSUP_CAPBL cases, as\nit is explained in RFC5492, page 3, paragraph 1.\n\n\"Unsupported Capability\" error does not mean, that the peer doesn\u0027t\nsupport capabilities advertisement -- quite the opposite (if the peer\nwould not support capabilities advertisement, the code would be\n\"Unsupported Optional Parameter\"). Thus there is no reason to mark\nthe peer as one non-supporting capabilities advertisement.\n\nExample: suppose the peer is in fact IPv6-only, but we didn\u0027t configure\nanything address-family specific for it. Then, the peer would refuse\nthe session with \"Unsupported Capability\" code. If we internally set\nthe peer as non-supporting capabilities advertisement after that, we\nwill not be able to establish the session with it ever, even with a\nfixed configuration -- IPv6-only BGP session cannot be established\nwithout capabilities.\n\nIn practice an edge case would be seen as the same IPv6 peer working\nwith its \"neighbor\" block read from bgpd.conf, but not working, when\nslowly input in \"conf t\" mode.\n"
    },
    {
      "commit": "403138e189c24f6867824c4eeb668d11564e1ca0",
      "tree": "436c9c428ad21fe1718ad083c790c1bf7d077f52",
      "parents": [
        "b729294c8c5c6f2af8ddf6cfbea2374b6faabe9d"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Thu Jan 13 18:25:40 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 13 18:25:40 2011 +0300"
      },
      "message": "ospf6d: fix crash in SPF calculation\n\n* ospf6_spf.c: Don\u0027t replace a node with another node with a lower\n  number of hops, instead get them from the queue in the correct\n  order. (Actually, the replacement crashed the ospf6d daemon\n  rather than worked.)\n"
    },
    {
      "commit": "4dd87df5af8a59174362e44f83df11f12457c8b4",
      "tree": "bec3ba26fcf730d6348567ddd530e74846af824b",
      "parents": [
        "dfbd5176ea863e378999c03314dc42adfdd4e424"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Apr 15 08:11:51 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:19 2010 +0000"
      },
      "message": "ospfd: Remove oi field from LSA, have network_lsa_refresh look up when needed\n\n* ospf_lsa.h: (struct ospf_lsa) remove oi pointer\n* ospf_lsa.c: (ospf_network_lsa_refresh) instead of keeping a pointer, just\n  lookup the oi when it\u0027s needed. This decouples network LSA from oi lifetime\n  and avoids having to invalidate pointers in LSAs when an oi changes,\n  simplifying the code.\n"
    },
    {
      "commit": "dfbd5176ea863e378999c03314dc42adfdd4e424",
      "tree": "f18faa60d794ef5feb628f2e089e419bb3c5dec2",
      "parents": [
        "02d942c9d4afabf04bd781f0e1e5e8aa36945df2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Apr 14 10:32:12 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:19 2010 +0000"
      },
      "message": "ospfd: potential fix for router-id change assert on refresh cleanup patch\n\n* ospf_lsa.c: (various) unregister LSAs from refresher before flushing.\n"
    },
    {
      "commit": "02d942c9d4afabf04bd781f0e1e5e8aa36945df2",
      "tree": "1874fc70a20b6b0407e808c926c362aa03415662",
      "parents": [
        "c363d3861b5384a31465a72ddc3b0f6ff007a95a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 24 23:36:20 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:19 2010 +0000"
      },
      "message": "ospfd: Fix maxage/flush to not try flood twice, remember maxages for longer\n\n2006-05-30 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Fix confusion around MaxAge-ing and problem with\n\t  high-latency networks. Analysis and suggested fixes by\n\t  Phillip Spagnolo, in [quagga-dev 4132], on which this commit\n\t  expands slightly.\n\t* ospf_flood.{c,h}: (ospf_lsa_flush) new function.\n\t  Scope-general form of existing flush functions, essentially\n\t  the dormant ospf_maxage_flood() but without the ambiguity of\n\t  whether it is responsible for flooding.\n\t* ospf_lsa.c: (ospf_lsa_maxage) Role minimised to simply setup\n\t  LSA on the Maxage list and schedule removal - no more.\n\t  ospf_lsa_flush* being the primary way to kick-off flushes\n\t  of LSAs.\n\t  Don\u0027t hardcode the remover-timer value, which was too\n\t  short for very high-latency networks.\n\t  (ospf_maxage_lsa_remover) Just do what needs to be done to\n\t  remove maxage LSAs from the maxage list, remove the call\n\t  to ospf_flood_through().\n\t  Don\u0027t hardcode remove-timer value.\n\t  (ospf_lsa_{install,flush_schedule}) ospf_lsa_flush is the correct\n\t  entrypoint to flushing maxaged LSAs.\n\t  (lsa_header_set) Use a define for the initial age, useful for\n\t  testing.\n\t* ospf_opaque.c: (ospf_opaque_lsa_refresh) ditto.\n\t  (ospf_opaque_lsa_flush_schedule) ditto.\n\t* ospfd.h: ({struct ospf,ospf_new}) Add maxage_delay parameter,\n\t  interval to wait before running the maxage_remover. Supply a\n\t  suitable default.\n\t  Add a define for OSPF_LSA_INITIAL_AGE, see lsa_header_set().\n"
    },
    {
      "commit": "c363d3861b5384a31465a72ddc3b0f6ff007a95a",
      "tree": "3fcbfc071dc2a376979ca6a80d06599a5b574047",
      "parents": [
        "7eb5b47e54169ac0da40ed1a6760db5d5f915a4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 24 22:42:13 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:19 2010 +0000"
      },
      "message": "ospfd: Unify router and network LSA refresh logic with general refresher\n\n* (general) Get rid of the router and network LSA specific refresh timers\n  and make the general refresher do this instead. Get rid of the twiddling\n  of timers for router/network LSA that was spread across the code.\n\n  This lays the foundations for future, general LSA refresh improvements,\n  such as making sequence rollover work, and having generic LSA delays.\n\n* ospfd.h: (struct ospf) Bye bye to the router-lsa update timer thread\n  pointer.\n  (struct ospf_area) and to the router-lsa refresh timer.\n* ospf_interface.h: Remove the network_lsa_self timer thread pointer\n* ospf_lsa.h: (struct ospf_lsa) oi field should always be there, for benefit\n  of type-2/network LSA processing.\n  (ospf_{router,network}_lsa_{update_timer,timer_add}) no timers for these\n  more\n  (ospf_{router,network}_lsa_update) more generic functions to indicate that some\n  router/network LSAs need updating\n  (ospf_router_lsa_update_area) update router lsa in a particular area alone.\n  (ospf_{summary,summary_asbr,network}_lsa_refresh) replaced by the general\n  ospf_lsa_refresh function.\n  (ospf_lsa_refresh) general LSA refresh function\n"
    },
    {
      "commit": "7eb5b47e54169ac0da40ed1a6760db5d5f915a4d",
      "tree": "8d70f87bea20b07f2bbc753a3661c9be9058e1ef",
      "parents": [
        "aa276fd783f5cdbeefe22bf54109fe523a465e07"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 13 16:13:13 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:14 2010 +0000"
      },
      "message": "ospfd: Remember network LSA sequence numbers across up/downs of an interface\n\n* ospf_interface.h: (struct ospf_if_params) add field for saved network LSA\n  seqnum\n* ospf_interfa.c: (ospf_new_if_params) init network_lsa_seqnum field to\n  initial seqnum - doesnt matter though.\n* ospf_lsa.c: (ospf_network_lsa_new) check for any saved sequence number,\n  and use if it exists.  Save the result back. This should help avoid needless\n  round of LSUpdate/LSRequests when a neighbour has to tell the originator\n  \"uhm, i have something newer than that already\".\n* ospf_vty.c: (show_ip_ospf_interface_sub) Show the saved network LSA seqnum\n"
    },
    {
      "commit": "aa276fd783f5cdbeefe22bf54109fe523a465e07",
      "tree": "7427b7bdfd25a9f07c72461d56c3981db9761227",
      "parents": [
        "57c5c6526df82970ca24293798d278862cf55106"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 08 17:11:15 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:19 2010 +0000"
      },
      "message": "ospfd: Prioritise hellos for sending by queueing to head of output buffer\n\n* It\u0027s possible for the packet output buffer to be filled up with a long\n  series of non-Hello packets in between Hellos packets, such that the\n  router\u0027s neighbours don\u0027t receive the Hello packet in time, even though\n  the hello-timer ran at about the right time. Fix this by prioritising\n  Hello packets, letting them skip the queue and go ahead of any packets\n  already on the queue.\n\n  This problem can occur when there are lots of LSAs and slow links.\n\n* ospf_packet.h: (ospf_hello_send_sub) not used outside of ospf_packet.c\n* ospf_packet.c: (ospf_fifo_push_head) add packet to head of fifo (so its\n  no longer really a fifo, but hey)\n  (ospf_packet_add_top) add packet to top of the packet output queue.\n  (ospf_hello_send_sub) Put Hello\u0027s at the top of the packet output queue.\n  make it take in_addr_t parameter, so that this\n  ospf_hello_send can re-use this code too.\n  (ospf_hello_send) consolidate code by using ospf_hello_send_sub\n  (ospf_poll_send,ospf_hello_reply_timer) adjust for ospf_hello_send_sub.\n"
    },
    {
      "commit": "57c5c6526df82970ca24293798d278862cf55106",
      "tree": "91847b2de0f333fa3a45691054f38c82f44f7609",
      "parents": [
        "94b6bfd28357dfa5a4f478b7393522816976c0b0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jan 07 06:12:53 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: Reset neighbour inactivity timer for any packet arrival\n\n* The hello protocol monitors connectivity in 2 different ways:\n\n  a) local -\u003e remote\n  b) remote -\u003e local\n\n  Connectivity is required in both directions (2-way) for adjacencies to\n  form.\n\n  The first requires a round-trip to detect, and is done by advertising\n  which other hosts a router knows about in its hello messages.  This allows\n  a host to detect which other routers are and are not receiving its\n  message.  If a remote neighbour delists the local router, then the local\n  router raises a \"1-Way Received\" event.\n\n  The latter is straight-forward, and is detected by setting a timer for the\n  neighbour. If another Hello packet is not received within this time then\n  the neighbour is dead, and a separate \"Inactive\" event is raised.\n\n  These are 2 different and relatively independent measures.\n\n  Knowing that we can optimise the 2nd, remote-\u003elocal measure and reset\n  the timer when /any/ packet arrives from that neighbour. For any packet\n  is as good as a Hello packet. This can help in marginal situations, where\n  the number of protocol messages that must be sent sometimes can exceed\n  the capacity of the network to transmit the messages within the configured\n  dead-time. I.e. an OSPF network with lots of LSAs, slow links and/or\n  slow hosts (e.g. O(10k) LSAs, O(100kbit) links, embedded CPUs, and O(10s)\n  dead-times).\n\n  This optimisation allows an OSPF network to run closer to this margin,\n  and/or allows networks to perhaps better cope with rare periods of\n  exceptional load, where otherwise they would not.\n\n  It\u0027s fully compatible with plain OSPF implementations and doesn\u0027t\n  prejudice dead-neighbour detection.\n\n* ospf_nsm.h: Rename HelloReceived event to PacketReceived.\n* ospf_nsm.c: (nsm_hello_received) -\u003e nsm_packet_received\n* ospf_packet.c: Schedule PacketReceived whenever a valid message is\n  received.\n"
    },
    {
      "commit": "94b6bfd28357dfa5a4f478b7393522816976c0b0",
      "tree": "8c94b1e1730a3db7cd0c5371495a944745d8aa20",
      "parents": [
        "e8f2226195e86f90f2409549ad8a8e5c8d64d23b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Jan 09 14:11:02 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: the maxage_lsa_remover should check whether it needs to yield the cpu\n"
    },
    {
      "commit": "e8f2226195e86f90f2409549ad8a8e5c8d64d23b",
      "tree": "e06409c762058421671fa7eacedeeccd364d871d",
      "parents": [
        "6634974d68b8cc78cdde1104636fe97d7e310845"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Apr 13 22:43:34 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: Fix various route_unlock discrepencies\n\n* ospf_ase.c: (ospf_ase_calculate_route) Fix compiler warning about eval\n  needing brackets.\n  (various) add defensive asserts.\n* ospf_lsdb.c: (ospf_lsdb_add) add missing node unlock if same lsa already\n  was indexed.\n  (ospf_lsdb_delete) check it\u0027s actually the same as specified lsa before\n  deleting\n  (ospf_lsdb_lookup_by_id_next) fix another corner case - no result \u003d\u003e\n  don\u0027t go on.\n"
    },
    {
      "commit": "6634974d68b8cc78cdde1104636fe97d7e310845",
      "tree": "ac049e9e0e61ba90ee3790e4162c561b32894e1b",
      "parents": [
        "8a81ee114a122966cb396d53dd8fcbda2eb619f5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Apr 13 22:33:54 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: fix lsa_refresh_walker unlock before use bug\n\n* ospf_lsa.c: (ospf_lsa_refresh_walker) fix an \"unlock before use\" bug\n  (various) add asserts for lsa refcounting.\n"
    },
    {
      "commit": "8a81ee114a122966cb396d53dd8fcbda2eb619f5",
      "tree": "1d797e811dd2dc0971ecb8b6585b47e6524f2275",
      "parents": [
        "2c9f8e36c4de4bb1412364b79c3a44881208266e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 24 21:34:54 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: interface code should leave  network_lsa_self alone\n\n* ospf_interface.c: (ospf_if_{new,cleanup}) don\u0027t touch the network_lsa_self,\n  ISM and NSM take care of cleaning it up if needs be + we want to keep\n  network_lsa_self around when possible for the the seqnum.\n\n  This shouldn\u0027t really make much difference though, particularly as we have\n  a separate sequence number memory mechanism.\n"
    },
    {
      "commit": "2c9f8e36c4de4bb1412364b79c3a44881208266e",
      "tree": "71b5273262a386644ced282b8b257b5201ffee7c",
      "parents": [
        "cfd670f3af25dfc34d5c06e30d21160e3dfb6421"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 11 16:22:12 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: OSPF_MIN_LS_ARRIVAL compare should be \u003e\u003d to match ospf_flood\n\n* ospf_packet.c: (ospf_ls_upd) the corresponding test on the arrival side\n  in (ospf_flood) is \u003c, so this should be \u003e\u003d, not \u003e, purely for consistency.\n\n  There is no practical effect here though.\n"
    },
    {
      "commit": "cfd670f3af25dfc34d5c06e30d21160e3dfb6421",
      "tree": "6b2888d0ac50a60416a92a7226cf513b0537f14f",
      "parents": [
        "ec70497bc5eac732139c3d94987ecb6691557795"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Apr 15 11:39:05 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:17 2010 +0000"
      },
      "message": "ospfd: ospf_if_free can leave dangling references on ISM events - cancel them\n\n* ospf_interface.c: (ospf_if_free) events with dangling pointers left\n  scheduled can be seriously bad for ospfd\u0027s health. Cancel the event.\n"
    },
    {
      "commit": "ec70497bc5eac732139c3d94987ecb6691557795",
      "tree": "717509c323b8a44a1ac48a38b2f4a6faaa6fc022",
      "parents": [
        "f8416810aad4cba6f622c6b3f9352abdd54cd01e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Dec 06 12:21:52 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:17 2010 +0000"
      },
      "message": "ospfd: Lower level of some common messages from info to debug\n\n* ospf_{ism,network}.c: Certain oft-repeated but trivial messages should be\n  debug log level, not info, to avoid spamming \u0027terminal monitor\u0027\n"
    },
    {
      "commit": "f8416810aad4cba6f622c6b3f9352abdd54cd01e",
      "tree": "7ca0d68cd44ea6c0b4d838f6526b3ccadcb836f9",
      "parents": [
        "d358344759d85a965bbd767f4a994695f99b842e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Apr 13 22:42:33 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:06:12 2010 +0000"
      },
      "message": "lib: Fix bug in prefix trie lookup\n\n* lib/table.c: (route_node_match) fix overshoot that was causing this\n  function to go 1 bit too far and thus reading past end of prefix.\n  (route_node_lookup) be defensive - don\u0027t assume others will clean up\n  leaves when removing info.\n"
    },
    {
      "commit": "d358344759d85a965bbd767f4a994695f99b842e",
      "tree": "47fb2bd213c0e4c5f23e0066aea5b96c747d27b4",
      "parents": [
        "3322055b392f20f4b97122a8034e479719e4b86d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 24 21:41:02 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:05:11 2010 +0000"
      },
      "message": "lib: prefix.c nano-optimisation\n\n* lib/prefix.c: (prefix_match) nano-optimisation, let it return early\n  without copying pointers.\n"
    },
    {
      "commit": "3322055b392f20f4b97122a8034e479719e4b86d",
      "tree": "eacb5bc1e5b5864241e0864b5f78e233e7b828c0",
      "parents": [
        "e276eb82820eb92d221f183496e28da4ffe0fe68"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 11 13:55:01 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 16:53:09 2010 +0000"
      },
      "message": "lib: Make workqueue more conservative about ramping up\n\n* workqueue.c: (work_queue_run) Err more on the side of keeping granularity\n  down, by being more conservative about increasing it.\n  Also, fix mispelling.\n"
    },
    {
      "commit": "e276eb82820eb92d221f183496e28da4ffe0fe68",
      "tree": "33f8ab85f1bd68874589ca804049d2ec4958478a",
      "parents": [
        "2613abe64fe48761d798942af8dc0ec90c804b22"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Jan 09 16:15:00 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 16:53:09 2010 +0000"
      },
      "message": "lib: Add a command to clear the thread CPU history data\n\n* (general) this can be useful when investigating thread latency problems,\n  when you don\u0027t want to have to restart a daemon between tests.\n* thread.c: (cpu_record_(hash_)clear) wipe the stored thread cpu history\n  data, according to the filter, similar to the vty print code.\n  (clear_thread_cpu_cmd) new command to clear data.\n* thread.h: export new command\n* command.c: install it\n"
    },
    {
      "commit": "2613abe64fe48761d798942af8dc0ec90c804b22",
      "tree": "c0f75f40bbd005bdd9d5545209a9402715c4f381",
      "parents": [
        "8526100eebf9c56ff6fac2b80938b232bb687946"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 11 16:33:07 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 16:53:09 2010 +0000"
      },
      "message": "lib: Thread scheduler should be fair and not let events starve I/O and timers\n\n* thread.c: (thread_fetch) the current scheduler will service events\n  indefinitely, ignoring I/O and timers, so long as there are events.\n  In other words, events can crowd out I/O and timers.  In theory this\n  shouldn\u0027t be a huge problem as events are generated only by timers\n  and I/O, however in practice it means normal-load behaviour is not as\n  useful a predictor of high-load behaviour as it should be.\n\n  Fix this by considering all the kinds of threads, in every run of the\n  scheduler.  For any given run, we prioritise events, however across\n  runs the scheduler should be fair.\n\n  This has been observed to give more stable inter-packet times in\n  testing of ospfd (i.e.  lower std-dev).\n\n (thread_process) new heler to queue all the given threads onto the ready\n list\n"
    },
    {
      "commit": "8526100eebf9c56ff6fac2b80938b232bb687946",
      "tree": "72b217f80791f29632db0ddefffb97a4943dfb00",
      "parents": [
        "838bbde0426e562132d22fb11932ea413aebf928"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 11 16:30:45 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 16:53:09 2010 +0000"
      },
      "message": "lib: thread history funcname shouldn\u0027t be constant, it\u0027s freed\n\n* thread.h: (struct cpu_thread_history.funcname) malloc gets called on this\n  so it should not be const\n* thread.c: (cpu_record_print) cast the (const char *) to (char *), this\n  function knows what it\u0027s doing (free wont be called on it).\n"
    },
    {
      "commit": "838bbde0426e562132d22fb11932ea413aebf928",
      "tree": "cce6161171685df013c932beb8366f55bebc417c",
      "parents": [
        "5195e17f8b49dc720252526a21afd7840240137b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 08 14:05:32 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 16:53:08 2010 +0000"
      },
      "message": "bgpd: Simplify process queue init\n\n* bgp_route.c: (bgp_process_queue_init) rsclient wasn\u0027t getting all the\n  same things initialised as the main queue. Simplify to make it more robust.\n"
    },
    {
      "commit": "b729294c8c5c6f2af8ddf6cfbea2374b6faabe9d",
      "tree": "a259da6db36b4174f35a638a9db10b2508d2b62c",
      "parents": [
        "5195e17f8b49dc720252526a21afd7840240137b"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 08 18:51:37 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 08 18:51:37 2010 +0300"
      },
      "message": "bgpd: fix community-list error message spelling\n\n* bgp_vty.c: (community_list_perror, show_ip_community_list_arg,\n  show_ip_extcommunity_list_arg) fix spelling\n"
    },
    {
      "commit": "5195e17f8b49dc720252526a21afd7840240137b",
      "tree": "e0ab06a35a8ddeede025ecef495f947f350cd7e7",
      "parents": [
        "a8e474a598ed01591fd3814eee5f5b6a909e4f59"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Nov 03 07:37:23 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Nov 03 07:37:23 2010 -0400"
      },
      "message": "infrastructure: Express preference for published git repos\n\n* HACKING: Express notion that a published git repository is\n  preferred.  Fold request for commit message into patch section.\n  Express desire for comments in code explaining correctness of\n  post-commit state, and for commit message to explain correctness of\n  the change.\n"
    },
    {
      "commit": "a8e474a598ed01591fd3814eee5f5b6a909e4f59",
      "tree": "455265c8bac769412e6da67c24bc5e1d49e6ba1a",
      "parents": [
        "d7a9779742748f0658be22664349669438e69af1"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Nov 03 07:22:00 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Nov 03 07:22:00 2010 -0400"
      },
      "message": "infrastructure: Whitespace cleanup.\n\nHACKING: Whitespace changes only.\n"
    },
    {
      "commit": "d7a9779742748f0658be22664349669438e69af1",
      "tree": "dbd2886e08dfd83312ed46028d8cb5d6f579d55f",
      "parents": [
        "f3bd05011ceb5173c2b01d2d51616fabe4860f57"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Nov 03 07:20:38 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Nov 03 07:20:38 2010 -0400"
      },
      "message": "infrastructure: Clarify commit message format.\n\nNote 54/72 line length rules, and that this is intended to play nice\nwith \"git log --oneline\".\n"
    },
    {
      "commit": "f3bd05011ceb5173c2b01d2d51616fabe4860f57",
      "tree": "bf5e205a6c162189ff3d3b9274b1bc80336068f0",
      "parents": [
        "213b6cd9fb24381563d6d44c7ddc4700abfae676"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Nov 03 07:16:32 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Nov 03 07:16:32 2010 -0400"
      },
      "message": "Adjust description of tomhenderson repo.\n\nTom\u0027s repo is now a clone of the official repo and has an mttr branch\noff of 0.99.17.\n"
    },
    {
      "commit": "213b6cd9fb24381563d6d44c7ddc4700abfae676",
      "tree": "9ea3fcf3e773144f136c47db3236ecdd5d9a5e12",
      "parents": [
        "08a7a91646a1ee317c402b421e3a7036a640bcf4"
      ],
      "author": {
        "name": "Vladimir L Ivanov",
        "email": "wawa@yandex-team.ru",
        "time": "Thu Oct 21 14:59:54 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Oct 21 14:59:54 2010 +0400"
      },
      "message": "bgpd: fix printed value of last-update timestamp\n\n* bgp_route.c: (route_vty_out_detail) calculate time value\n    in a way, which works regardless of monotonic clock\n    being used or not\n"
    },
    {
      "commit": "08a7a91646a1ee317c402b421e3a7036a640bcf4",
      "tree": "59dc48ed11f69a61cd282783ffab25f30073f334",
      "parents": [
        "4c9641ba4df276080c670e03f65b1d442660a50f"
      ],
      "author": {
        "name": "Dmitry Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Mon Oct 18 19:05:39 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 18 19:05:39 2010 +0400"
      },
      "message": "zclient: fix router-id calculation for IPv6 (#595)\n\nIf router-id is not specified in ospf6d.conf, ospf6d will get it from\nthe zebra daemon. But ospf6d originates Link LSAs before the router-id\nis returned by zebra, thus this router\u0027s Link LSAs will be flooded\nwith AdvRouter set to 0.\n\n* zclient.c: zclient_start(): send ZEBRA_INTERFACE_ADD message after\n  ZEBRA_ROUTER_ID_ADD, not before\n"
    },
    {
      "commit": "4c9641ba4df276080c670e03f65b1d442660a50f",
      "tree": "15085df8068d8a3864224937eaa407c0484ff57f",
      "parents": [
        "11d3fe9b9a327b3218a76b2b9001ace50c08de8c"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Thu Jul 22 13:20:55 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Oct 06 12:33:05 2010 -0400"
      },
      "message": "bgpd, lib: adopt afi_t and safi_t in several places\n\n* bgpd/bgp_attr.c, bgpd/bgp_open.h, bgpd/bgp_route.c, lib/prefix.c,\n  lib/prefix.h: Various integer types were being used where, if we\n  had strict type checking, afi_t and safi_t would be required.\n\nSigned-off-by: G.Balaji \u003cbalajig81@gmail.com\u003e\n(cherry picked from commit c8af35ffa2dc79ff7d7ff00b1b61f1f50a100ab6)\n"
    },
    {
      "commit": "11d3fe9b9a327b3218a76b2b9001ace50c08de8c",
      "tree": "68c91285e54eab9459c649c5809001f5f47d5b1e",
      "parents": [
        "b830c89a4532819a78c251c559566767b89ee5ac"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 24 09:22:37 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 24 09:22:37 2010 -0400"
      },
      "message": "Add MTR repository.\n"
    },
    {
      "commit": "b830c89a4532819a78c251c559566767b89ee5ac",
      "tree": "ee399053b3d043cdbb8d14f18da6472fe77649f2",
      "parents": [
        "b16793870794919ecc34138bdc51703cc3f409ca"
      ],
      "author": {
        "name": "Nico Golde",
        "email": "nion@debian.org",
        "time": "Sun Aug 01 15:24:35 2010 +0200"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 13:36:44 2010 -0400"
      },
      "message": "lib/vty.c: add missing format string when printing out motd message\n\nSigned-off-by: G.Balaji \u003cbalajig81@gmail.com\u003e\n"
    },
    {
      "commit": "b16793870794919ecc34138bdc51703cc3f409ca",
      "tree": "e1faa3f7cb5705fa2f9c954f88681e365b3fb680",
      "parents": [
        "cbc64b07c40f35c4ae5f2c0cfbf92ac5b375bc83"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 12:19:13 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 12:19:13 2010 -0400"
      },
      "message": "Document rules for zalloc and friends.\n\nlib/memory.c:z{a,c,re}alloc, zfree, zdup: add requires/effects\ncomments.\n"
    },
    {
      "commit": "cbc64b07c40f35c4ae5f2c0cfbf92ac5b375bc83",
      "tree": "237a78d6cf25cb105acfde9ad0a1bc81f4e00b82",
      "parents": [
        "d3ddb22e902bc4dc175ed6974515f6e14d9be931"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 11:02:45 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 11:02:45 2010 -0400"
      },
      "message": "Add pointer to Balaji G. git.\n\nBalaji has been accumulating patches from the mailing list and\npre-screening them and spiffing up commit messages.\n"
    },
    {
      "commit": "d3ddb22e902bc4dc175ed6974515f6e14d9be931",
      "tree": "e0f0fa91e7814c4814dbbd60352cc073496d71f7",
      "parents": [
        "cf8a831bcb53b60a7b5c4b26dda7646ebc7506d8"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 10:47:49 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 10:47:49 2010 -0400"
      },
      "message": "Set from even if binfo-\u003eextra is NULL.\n\nbgpd/bgp_packet.c:bgp_update_packet(): When extracting the peer, don\u0027t\n  fail to extract it because \"binfo-\u003eextra\" is NULL.  While one should\n  certainly avoid dereferencing binfo-\u003eextra, that\u0027s not a good reason\n  not to use binfo-\u003epeer.\n\nFixes https://bugzilla.quagga.net/show_bug.cgi?id\u003d497.\nPatch by Eric Sobocinksi.\n"
    },
    {
      "commit": "cf8a831bcb53b60a7b5c4b26dda7646ebc7506d8",
      "tree": "1d15bcbd5556cd56416b01342a1cb1afd8d89b71",
      "parents": [
        "a6be12128c29b0dc5b8a6d6923510fc7f677b775"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Aug 18 15:56:46 2010 -0700"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Thu Aug 19 13:44:05 2010 -0400"
      },
      "message": "Zebra zserv: bogus conditional\n\nThis looks like a bug in original code from misunderstanding\nof C rules of evaluation.\n"
    },
    {
      "commit": "a6be12128c29b0dc5b8a6d6923510fc7f677b775",
      "tree": "0dafeb74cfba1b7c6bd871db7e041185625668b3",
      "parents": [
        "cddb8112b80fa9867156c637d63e6e79eeac67bb"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Aug 19 13:36:43 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Aug 19 13:36:43 2010 +0400"
      },
      "message": "release: 0.99.17\n\n* configure.ac: bump up version number\n"
    },
    {
      "commit": "cddb8112b80fa9867156c637d63e6e79eeac67bb",
      "tree": "c8d8b4cb9d0ba1c2a7681c6da580874cf5a2b48e",
      "parents": [
        "d64379e8f3c0636df53ed08d5b2f1946cfedd0e3"
      ],
      "author": {
        "name": "Chris Hall",
        "email": "chris.hall@highwayman.com",
        "time": "Mon Aug 09 22:31:37 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 09 22:31:37 2010 +0400"
      },
      "message": "bgpd: fix handling of AS path data\n\n* bgpd/bgp_aspath.c\n  * assegments_parse(): add handling of AS4_PATH input, update bounds\n    checks, add check for AS segment type\n  * aspath_parse(): add handling of AS4_PATH input, expect\n    assegments_parse() to do length checking\n  * aspath_empty(): update for the new function prototype\n* bgpd/bgp_aspath.h: ditto\n* tests/aspath_test.c: ditto\n* bgpd/bgp_attr.c\n  * bgp_attr_aspath(): add handling of AS4_PATH input, update flags\n    checks, change returned type\n  * bgp_attr_as4_path(): discard, superseded by bgp_attr_aspath()\n  * bgp_attr_parse(): update respectively\n"
    },
    {
      "commit": "d64379e8f3c0636df53ed08d5b2f1946cfedd0e3",
      "tree": "c34d8f271fe3be61cdfd23327ef73f2ede966924",
      "parents": [
        "e26873fd8f0c4306eff65de94a45b4114fc81b98"
      ],
      "author": {
        "name": "Chris Hall",
        "email": "chris.hall@highwayman.com",
        "time": "Fri May 14 16:38:39 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri May 14 16:38:39 2010 +0400"
      },
      "message": "bgpd: tighten bounds checking in RR ORF msg reader\n\n* bgp_packet.c: (bgp_route_refresh_receive) add validation of\n  \"Length\" (RFC5292) field value, check input stream bounds\n  each time bytes are pulled from it\n"
    },
    {
      "commit": "e26873fd8f0c4306eff65de94a45b4114fc81b98",
      "tree": "9775a683303e801df8555d5a74dbd714182857f6",
      "parents": [
        "cfe117498c8348bfcd8f5f95169a6621e437458a"
      ],
      "author": {
        "name": "Roman Hoog Antink",
        "email": "rha@open.ch",
        "time": "Wed May 05 16:00:50 2010 +0200"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed May 05 12:03:33 2010 -0400"
      },
      "message": "zebra: fix infinite loop when deleting an interface\n\nWhen deleting a VLAN interface after flushing its\naddresses, zebra uses 100% CPU time and freezes.\n\n * interface.c: The while loop in line 407 that\n   should clean up connected routes never hits one\n   of the 2 lines \"last \u003d node;\" and thus loops\n   forever.\n\nSigned-off-by: Roman Hoog Antink \u003crha@open.ch\u003e\n"
    },
    {
      "commit": "cfe117498c8348bfcd8f5f95169a6621e437458a",
      "tree": "d64e80635f79e0b16206a480258fd8958733bbc4",
      "parents": [
        "1b5eee9864185205bca498e62bcff8291e125a2c"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed May 05 07:51:26 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed May 05 07:51:26 2010 -0400"
      },
      "message": "Update for git and emphasize asking for good reports.\n"
    },
    {
      "commit": "1b5eee9864185205bca498e62bcff8291e125a2c",
      "tree": "f4c6ff954c7a3a0afe3f4af4fefb3108e580208c",
      "parents": [
        "745bf05f58ff203f5e3878574016fb3b9ad5b450"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed Sep 16 02:20:00 2009 +0200"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Apr 28 20:57:44 2010 -0400"
      },
      "message": "build: ignore mkinstalldirs and texinfo.tex\n\nthese are autogenerated by autoreconf, drop them from git.\n"
    },
    {
      "commit": "745bf05f58ff203f5e3878574016fb3b9ad5b450",
      "tree": "0c1019a61726211f4ade8f7ff21c579c95e7063a",
      "parents": [
        "2470e99e828c098d2d03f8d693853cbe69e3fb6f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Feb 02 21:49:35 2010 +0100"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Apr 28 20:15:44 2010 -0400"
      },
      "message": "isisd: change ISIS_METHOD to use C preprocessor\n\nthis fixes warnings from vtysh extract.pl by making sure the isis method\nfiles always \u0027work\u0027. (previously, extract.pl would grab unselected isis\nmethod sources and then complain about missing headers)\n"
    },
    {
      "commit": "2470e99e828c098d2d03f8d693853cbe69e3fb6f",
      "tree": "19e1526814455301a244af928fe2c3d553ec3100",
      "parents": [
        "85c4968bb1432ddc7c059893fdee2c976bbee937"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Tue Jan 05 02:45:39 2010 +0000"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Apr 28 19:30:17 2010 -0400"
      },
      "message": "ospf6d: Fix crash when \u0027[no] ipv6 ospf6 advertise prefix-list\u0027 is in startup-config\n\n* ospf6_interface.c: When \u0027[no] ipv6 ospf6 advertise prefix-list\u0027\n  appears in the startup configuration for ospf6d, a crash occurs,\n  because ospf6d attempts to schedule LSAs when the \u0027oi-\u003earea\u0027\n  structure has not yet been initialized.\n\n  Now, when the command above is issued (either in the startup\n  configuration or at runtime), ospf6d will only schedule LSAs if\n  the \u0027oi-\u003earea\u0027 structure has been initalized. A similar test is\n  already used when handling the commands \u0027ipv6 ospf6 priority\u0027\n  and \u0027ipv6 ospf6 cost\u0027.\n"
    },
    {
      "commit": "85c4968bb1432ddc7c059893fdee2c976bbee937",
      "tree": "26f1f89a3ea9b91a32d7a1c5a86821dbf89f9d50",
      "parents": [
        "46154fe3675df5417a712285b66fd12bd1b4fc6d"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Tue Apr 20 12:44:21 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Tue Apr 20 12:44:21 2010 -0400"
      },
      "message": "build/extra: Enhance README.NetBSD make/gmake decision.\n"
    },
    {
      "commit": "46154fe3675df5417a712285b66fd12bd1b4fc6d",
      "tree": "f661aa3353d2130100746ce9819b596c27895bc4",
      "parents": [
        "45acaa0a4cbb4b61c1e4cfcc8f8a534f4fdccfe5"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "joakim.tjernlund@transmode.se",
        "time": "Wed Apr 14 16:01:25 2010 +0200"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Sun Apr 18 14:56:41 2010 -0400"
      },
      "message": "ospfd: Only refresh external default route once.\n\n* ospf_zebra.c: (ospf_distribute_list_update_timer) forces a\n  refresh of default route each time it finds a default prefix.\n  This is suboptimal, just record that it needs to be done and\n  do it once.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\n"
    },
    {
      "commit": "45acaa0a4cbb4b61c1e4cfcc8f8a534f4fdccfe5",
      "tree": "03c27c042be415bcec1d1f0922acf0dd424378b6",
      "parents": [
        "274d3f090df91fc5f8d4f26a2823634efa4af461"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Wed Apr 14 11:05:28 2010 +0200"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Sun Apr 18 14:53:28 2010 -0400"
      },
      "message": "ospfd: Make sure ospf_distribute_list_update_timer() eventually runs.\n\n* ospf_zebra.c: (ospf_distribute_list_update_timer)\n   If there are updates to the distribute list every 5 second or less,\n   ospf_distribute_list_update_timer() will never run as the timer gets\n   rearmed for each update. This fixes it by never rearming an active\n   distribute list timer.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\n"
    },
    {
      "commit": "274d3f090df91fc5f8d4f26a2823634efa4af461",
      "tree": "bcdbc9bc1eea38e2441d0c53152325e41940b122",
      "parents": [
        "515b9424d4106ff5ccef4f18030a3ca69d38a178"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Wed Apr 14 11:05:27 2010 +0200"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Sun Apr 18 14:35:36 2010 -0400"
      },
      "message": "ospfd: Make sure all external routes are updated.\n\nRoman Hoog Antink \u003crha@open.ch\u003e\treports:\n\nWhen adding a connected route (using vtysh, without restart) to the\nredistribution access list of ospfd, while static routes already exist,\nthe update timer ospf_distribute_list_update_timer() is being run for\nstatic routes only. That way, the connected route never appears in the\nOSPF database, until quagga is completely restarted.\n\nThe update timer for connected routes is cancelled in\nospfd/ospfd_zebra.c:ospf_distribute_list_update():976, were a new timer\nis scheduled for static routes, caused by the loop in ospf_filter_update().\n\n * ospf_zebra.c: (ospf_distribute_list_update_timer) make it\n   refresh all external routes. This fixes the problem\n   reported by Roman.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\n"
    },
    {
      "commit": "515b9424d4106ff5ccef4f18030a3ca69d38a178",
      "tree": "1ff255748efe47c80caa5e764266916713c09cf9",
      "parents": [
        "43a48cf379193327603fc023530d6c185012f941"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Sun Apr 18 12:50:21 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Sun Apr 18 12:50:21 2010 -0400"
      },
      "message": "git: add pointers to out-of-tree work\n\n* (HACKING.pending): List known places where work on quagga that is\n  not (yet) integrated into the main tree can be found.\n"
    },
    {
      "commit": "43a48cf379193327603fc023530d6c185012f941",
      "tree": "da1a34173dee97b00fc5485dd121190b29a95d6a",
      "parents": [
        "2b09e2117e676986a5574a52a1a6823727361388"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Apr 14 15:24:52 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Apr 14 15:24:52 2010 -0400"
      },
      "message": "git: add (generated) m4 files to .gitignore\n"
    },
    {
      "commit": "2b09e2117e676986a5574a52a1a6823727361388",
      "tree": "e57fcf544fb8ef510576d516f35dafdd800b9633",
      "parents": [
        "b65c639a2ef9e07d93c8f9433c97b2270a65a6a0"
      ],
      "author": {
        "name": "Ivan Moskalyov",
        "email": "ether0@mail.ru",
        "time": "Thu Mar 11 17:14:35 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Mar 11 17:14:35 2010 +0300"
      },
      "message": "doc: fixed spelling in bgpd.texi\n"
    },
    {
      "commit": "b65c639a2ef9e07d93c8f9433c97b2270a65a6a0",
      "tree": "4ece5effcac2f883dae228391edec53210f52e28",
      "parents": [
        "438589e31fe38943247f3011388b819346e473fe"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Mar 10 14:03:54 2010 -0500"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Mar 10 14:03:54 2010 -0500"
      },
      "message": "build: Add QuaggaId to README.NetBSD\n"
    },
    {
      "commit": "438589e31fe38943247f3011388b819346e473fe",
      "tree": "1b8ac0f7b60ffc2eacca91625bb4242a0bbbfced",
      "parents": [
        "dca6c883ea6219460efbe3dadde4b8b9cb12c845"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Mar 09 13:53:20 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Mar 09 13:53:20 2010 +0300"
      },
      "message": "release: 0.99.16\n\n* configure.ac: bump up version number\n"
    },
    {
      "commit": "dca6c883ea6219460efbe3dadde4b8b9cb12c845",
      "tree": "71352e214bd59277a50a43779bb2cbafbace6cc3",
      "parents": [
        "3f3dc2bd5f8cbde24cb581ed0aed0e372bfd556c"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Jan 27 12:38:16 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 27 12:38:16 2010 +0300"
      },
      "message": "lib: undo the last PIE commit\n\nStephen:\nA recent change breaks build Quagga on Debian Lenny with amd64 (but not\ni386). Not sure whether this is cause by ld, gcc, or libtool; but\nwhatever it just won\u0027t work for a large number of users.\n\nMathias:\nI would guess it\u0027s a problem of libtool because it adds \"-fPIC -DPIC\" to\nthe compiler flags but doesn\u0027t remove -fPIE. That wouldn\u0027t be a problem\nif the compiler would ignore the -fPIE in favor to the latter -fPIC, but\nobviously it does not. [...] Those objects were actually compiled with\n-fPIC but also -fPIE which seems to confuse gcc.\n"
    },
    {
      "commit": "3f3dc2bd5f8cbde24cb581ed0aed0e372bfd556c",
      "tree": "7754c556419e6315fed189a4d7a88f33a3558852",
      "parents": [
        "65957886bfd0dd9d95360d8b015781fc82cc09be"
      ],
      "author": {
        "name": "Mathias Krause",
        "email": "Mathias.Krause@secunet.com",
        "time": "Wed Jan 20 17:39:13 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 20 17:39:13 2010 +0300"
      },
      "message": "lib: fix PIE build flags\n\nBecause the final executables are built as position independent\nexecutables (PIE) -- when configure has detected compiler supported for\nPIE -- the objects in the library archive must be built in that way,\ntoo. Otherwise the runtime linker has to do unneccesary relocation for\neach start of the program. Even worse, the programs won\u0027t even be able\nto start on a (hardened) kernel that doesn\u0027t allow those relocations to\nhappen by preventing making the .text segment writable (PaX\u0027s MPROTECT\nfeature comes to mind). The attached patch fixes this issue by adding\nthe appropriate flags to the Makefile.am.\n"
    },
    {
      "commit": "65957886bfd0dd9d95360d8b015781fc82cc09be",
      "tree": "71352e214bd59277a50a43779bb2cbafbace6cc3",
      "parents": [
        "2cd754de60210748e61069fed2c9d4086d24c21e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 15 16:22:10 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 15 16:22:10 2010 +0300"
      },
      "message": "bgp: use monotonic clock for time of day\n\nBGP uses time() to get system time of day; but that value\nfluctuates with time adjustments from NTP. This can cause premature\nflapping of peer sessions and other failures.\n\nUse the system monotonic clock supported by Quagga thread library\nto avoid issue.\n\nSee: http://bugzilla.vyatta.com/show_bug.cgi?id\u003d4467\n\n* bgpd/bgp_fsm.c\n  * bgp_uptime_reset(): dismiss function\n* bgpd/bgpd.c\n  * bgp_clock(): new function\n* bgpd/bgp_damp.c\n  * bgp_reuse_timer(): employ bgp_clock() instead of time(NULL)\n  * bgp_damp_withdraw(): idem\n  * bgp_damp_update(): idem\n  * bgp_damp_scan(): idem\n  * bgp_damp_info_vty(): idem\n  * bgp_damp_reuse_time_vty(): idem\n* bgpd/bgp_fsm.c\n  * bgp_routeadv_timer(): idem\n  * bgp_stop(): idem\n  * bgp_establish(): idem\n* bgpd/bgp_packet.c\n  * bgp_update_receive(): idem\n* bgpd/bgp_route.c\n  * bgp_update_rsclient(): idem\n  * bgp_update_main(): idem\n  * bgp_static_update_rsclient(): idem\n  * bgp_static_update_main(): idem\n  * bgp_static_update_vpnv4(): idem\n  * bgp_aggregate_route(): idem\n  * bgp_aggregate_add(): idem\n  * bgp_redistribute_add(): idem\n* bgpd/bgp_snmp.c\n  * bgpPeerTable(): idem\n  * bgpTrapEstablished(): idem\n  * bgpTrapBackwardTransition(): idem\n* bgpd/bgpd.c\n  * peer_create(): idem\n  * peer_uptime(): idem\n  * bgp_master_init(): idem\n"
    },
    {
      "commit": "2cd754de60210748e61069fed2c9d4086d24c21e",
      "tree": "1f9ef18fb413e0d786623eb857eea894a9900ff9",
      "parents": [
        "efbbcaf1aea686d118019514dcde92b13c92b0fc"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Thu Jan 14 16:26:12 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 14 16:26:12 2010 +0300"
      },
      "message": "ospfd: Fix debug messages that were masked by DISCARD_LSA\n\n* ospf_packet.c: (ospf_ls_upd) DISCARD_LSA continues, and so should be\nafter debug messages, not before them.\n"
    },
    {
      "commit": "efbbcaf1aea686d118019514dcde92b13c92b0fc",
      "tree": "97965a22204c265ac061f40ea9e461e88c3cd2ea",
      "parents": [
        "0917f7e7c5920b70295c44bd8aad537bc3ee8581"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Thu Jan 14 16:19:40 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 14 16:19:40 2010 +0300"
      },
      "message": "ospfd: remove unneeded memset from a very hot function\n\n* ospf_lsdb.c: (lsdb_prefix_set) memset is unneeded, as all fields are\ninitialised explicitly, and this function can be in the top-3 of a\nprofile when there are a lot of LSAs.\n"
    },
    {
      "commit": "0917f7e7c5920b70295c44bd8aad537bc3ee8581",
      "tree": "d55fa58af8937c2373d532223cf9a7c35df95c64",
      "parents": [
        "b6516829595ed4fc47af955de8bda9ef5be14ffd"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Wed Jan 13 20:10:56 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 13 20:10:56 2010 +0300"
      },
      "message": "lib: fix memory logging\n\n* lib/memory.h\n  * mtype_zcalloc(): correct function prototype\n  * XFREE(): make both definitions consistent in setting\n    the pointer to NULL after freeing the memory\n\nThese changes will only have an effect if MEMORY_LOG is defined\n(it is not by default).\n"
    },
    {
      "commit": "b6516829595ed4fc47af955de8bda9ef5be14ffd",
      "tree": "842806138758343d41598fded61943de51c4c363",
      "parents": [
        "2d362d1099f346202cb628665ff4ae563b2594f5"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Mon Dec 21 18:50:43 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 21 18:50:43 2009 +0300"
      },
      "message": "zebra: change router-id selection algo\n\nThe router-id table looks like is supposed to be sorted in current\nquagga code, but the nodes are not added with the sorting\nfunction.\n\nThe sorting function is host byte order dependent.\nThe values need to converted before comparison.\n\nFixing this causes Zebra to choose the largest IP address\nas router-id, rather than the last address. This probably will\nsurprise some users. The other option would be to just remove the\ncomparison function and keep the existing LIFO behavior.\n\nLastly, simple subtraction works well for comparing.\n\n* zebra/router-id.c\n  * router_id_add_address(): employ listnode_add_sort()\n  * router_id_cmp(): employ ntohl(), then compare integers\n"
    },
    {
      "commit": "2d362d1099f346202cb628665ff4ae563b2594f5",
      "tree": "5e8101d4ace5f4ef4e51c1cdc277c0f9652728d0",
      "parents": [
        "da88ea82acd70adf3bab641b2300ee24319da422"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Mon Dec 21 12:54:58 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 21 13:03:51 2009 +0300"
      },
      "message": "lib: make some structures constant\n\n* isisd/isis_pdu.c\n  * maskbit: this pre-initialized array is not modified\n* lib/prefix.c\n  * maskbit: idem\n* lib/command.c\n  * facility_map: idem\n  * itoa64: idem\n  * default_motd: make local var static\n  * facility_name(): update local var accordingly\n  * facility_match(): idem\n"
    },
    {
      "commit": "da88ea82acd70adf3bab641b2300ee24319da422",
      "tree": "81151de47e55067c4b7d9cd718c0e6c8ab07aa50",
      "parents": [
        "2c2397059d4d4177ed4636c08aa476a138425dc8"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 17 13:14:28 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 17 13:14:28 2009 +0300"
      },
      "message": "bgpd: code cleanup\n\n* bgpd/bgp_aspath.c\n  * ashash: only used in one file, make static\n  * aspath_count_numas(): dead code, sayonara\n* bgpd/bgpd.c\n  * peer_nsf_stop(): only used in one file, make static\n* bgpd/bgp_packet.h\n  * bgp_capability_receive(): add missing prototype for a\n    global function\n"
    },
    {
      "commit": "2c2397059d4d4177ed4636c08aa476a138425dc8",
      "tree": "c32e11332baa9b1ff9efed4f8b363f9118bdc964",
      "parents": [
        "e580216e1ba2db506d1942e382852d07973a5fad"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 19:16:05 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 10 19:16:05 2009 +0300"
      },
      "message": "ripd: fix compiler warnings\n\n* ripd/rip_interface.c\n  * rip_request_neighbor(): comment out, unused\n  * rip_request_neighbor_all(): idem\n  * rip_interface_up(): Cast flags otherwise compiler complains\n    about %lld not matching uint64_t on 64 bit x86. Print in hex\n    since flags are bit field.\n  * rip_interface_add(): idem\n  * rip_interface_delete(): idem\n* ripd/rip_zebra.c\n  * rip_redistribute_set(): comment out, unused\n* ripd/ripd.h\n  * rip_redistribute_check(): move prototype here so compiler\n    can check function against prototype\n* ripd/ripd.c\n  * rip_update_default_metric(): comment out, unused\n"
    },
    {
      "commit": "e580216e1ba2db506d1942e382852d07973a5fad",
      "tree": "1932075db93d8989bcbd7b76c0603a00f5bb4647",
      "parents": [
        "813f6a0064e76fdc8d509ddfbd4d3870d7027850"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 16:18:41 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 10 16:18:41 2009 +0300"
      },
      "message": "ospf6d: remove dead code\n\n* ospf6d/ospf6_interface.c\n  * loopind(): sayonara\n* ospf6d/ospf6_top.c\n  * ospf6_delete(): comment out, it might be useful if real shutdown is\n    added\n"
    },
    {
      "commit": "813f6a0064e76fdc8d509ddfbd4d3870d7027850",
      "tree": "eed75fc5da5c0a4dd5dcd20bc8c7c2523b6fd32d",
      "parents": [
        "5eb9d11bf6bbe99ce47f929a14ac03351f21fe27"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 16:13:09 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 10 16:13:09 2009 +0300"
      },
      "message": "ospf6d: fix warnings from recent prefix bit commit\n\n* lib/prefix.h\n  * prefix6_bit(): add IPv6 wrapper for prefix_bit()\n* ospf6d/ospf6_lsdb.c\n  * ospf6_lsdb_type_router_head(): employ prefix6_bit()\n  * ospf6_lsdb_type_head(): idem\n"
    },
    {
      "commit": "5eb9d11bf6bbe99ce47f929a14ac03351f21fe27",
      "tree": "79e72d2cace42a33b7c742c10319808b7837a36b",
      "parents": [
        "ab0f61552622084a13ede59adefc4c54b5513d7b"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 15:52:33 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 10 15:52:33 2009 +0300"
      },
      "message": "ripngd: compiler warnings cleanup\n\n* ripngd/ripng_interface.c\n  * ripng_check_max_mtu(): unused, sayonara\n  * ripng_interface_down(): cast flag arguments to logging function\n  * ripng_interface_add(): idem\n  * ripng_interface_delete(): idem\n* ripngd/ripngd.c\n  * ripng_recv_packet(): avoid aliasing warning dereferencing pointer\n"
    },
    {
      "commit": "ab0f61552622084a13ede59adefc4c54b5513d7b",
      "tree": "d85ca70e55f064fd3a24072cf0f9a5fbbcdd5181",
      "parents": [
        "9e4ca89c3678431560a8259c75f8b5874d83d351"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 14:22:44 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 10 14:22:44 2009 +0300"
      },
      "message": "zebra: deal with irdp compile warnings\n\n* zebra/irdp.h\n  * irdp_send_thread(): move prototype to common header file\n  * irdp_advert_off(): idem\n  * process_solicit(): idem\n  * irdp_read_raw(): idem\n  * send_packet(): idem\n* zebra/irdp_interface.c\n  * inet_2a(): move function to where it is used\n  * in_cksum(): lib/checksum.h already provides prototype\n  * irdp_send_thread(): prototype moved away\n  * inet_2a(): idem\n  * irdp_advert_off(): idem\n  * b1, b2, b3, b4: get rid of global buffers for inet_2a()\n  * if_group(): add local buffer for inet_2a()\n  * if_add_group(): idem\n  * if_drop_group(): idem\n  * irdp_config_write(): idem\n  * Adv_new(): make static\n* zebra/irdp_main.c\n  * irdp_read_raw(): prototype moved away\n  * send_packet(): idem\n  * in_cksum(): lib/checksum.h already provides prototype\n  * inet_2a(): function moved to irdp_interface.c\n* zebra/irdp_packet.c\n  * b1, b2, b3, b4: get rid of global buffers for inet_2a()\n  * in_cksum(): lib/checksum.h already provides prototype\n  * process_solicit(): prototype moved away\n  * irdp_read_raw(): fix uninitialized variable\n"
    },
    {
      "commit": "9e4ca89c3678431560a8259c75f8b5874d83d351",
      "tree": "178ca0de4c6fe5ecba90b51c5fb29c3e0b720cdb",
      "parents": [
        "cc2dd9280c4456586080d1cf4537d26c02fa9a36"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 11:57:05 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 10 11:57:05 2009 +0300"
      },
      "message": "bgpd: compile warnings cleanup\n\n* bgpd/bgp_fsm.c\n  * bgp_clearing_completed(): only used in one file, can be static\n* bgpd/bgp_packet.c\n  * afi2str(): sayonara\n  * safi2str(): sayonara\n* bgpd/bgp_route.c\n  * bgp_distance_reset(): sayonara\n* bgpd/bgp_zebra.c\n  * bgp_ifindex_by_nexthop(): sayonara\n"
    }
  ],
  "next": "cc2dd9280c4456586080d1cf4537d26c02fa9a36"
}
