)]}'
{
  "log": [
    {
      "commit": "ca3ccd8748434719e4670ce812d1310013fad518",
      "tree": "3fae89070206bc47704a456219350c34b5f8ea54",
      "parents": [
        "8d083b9ec5bb0375ebb6d8b2b05c848febd92cb5"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 14:52:39 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jan 16 01:45:57 2013 +0100"
      },
      "message": "zebra: fix sockaddr_dl length assumptions (BZ#737)\n\nQuagga makes bad assumptions about sockaddr_dl (on NetBSD, but possibly\non other systems as well).  Particularly, sizeof(struct sockaddr_dl)\nreturns a size that does not include the full sdl_data field, leading to\nnot enough data being copied.  This breaks IPv6 RAs in particular, as\na broken mac address from sockaddr_dl will be included in the packets.\n\nFrom: Matthias-Christian Ott \u003cott@mirix.org\u003e\nTested-by: Uwe Toenjes \u003c6bone@6bone.informatik.uni-leipzig.de\u003e\n[further simplified + more comments]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ea05767770d759d46f97d1dc33423de72ae20ccd",
      "tree": "20917e0852385f08817998a027bd75f4df33a2ea",
      "parents": [
        "303bb005889a843b0d7e07a9b67b68ee55653d8f"
      ],
      "author": {
        "name": "Hasso Tepper",
        "email": "hasso.tepper@gmail.com",
        "time": "Sun Jan 13 17:45:29 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 15 17:57:03 2013 +0100"
      },
      "message": "build: Fix build on MacOSX 10.8 (Mountain Lion)\n\nNewer MacOSX versions have support for both IPv6 advanced socket API\nRFCs (2292 and 3542) switchable in compile time, but neither of these\nis default for some strange reason. RFC3542 will be default in future,\nbut for now we have to declare that we want to use the RFC3542 API\nbefore including \u003cnetinet/in.h\u003e.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1e0ce7caa622f07c20bb74414a4a5b4cbd732c75",
      "tree": "35a221f0912891b2b04f9337288fbfd479761169",
      "parents": [
        "a689e6a9f470d2a72493b907c94ef23516bbbda6"
      ],
      "author": {
        "name": "Leonid Rosenboim",
        "email": "lrosenbo@wrs.com",
        "time": "Fri Dec 07 21:31:07 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 15 17:22:01 2013 +0100"
      },
      "message": "bgpd: improve logging of invalid BGP Notifications\n\nInvalid BGP Notification messages should be logged locally, cf.\nRFC4271, Sect. 6.4, p 34,\n  NOTIFICATION Message Error Handling\n\nCurrent notification for invalid Notification code:\n\n  2012/10/10 02:17:54 BGP: message index 10 not found in bgp_notify_msg (max is 8)\n  2012/10/10 02:17:54 BGP: 192.168.1.1 received NOTIFICATION 10/0 ((no item found)) 0 bytes\n\nthe logging should be a bit more clear. The above logging really doesn\u0027t\nexplain much and looks more like a programming error.\n\n[rewrote most of it to get in something I can call a shape -David]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a5c851c7ff41ef846e83d62394176ac1753ebf45",
      "tree": "b53c24d74e7db4d5e6cdd30199cb39093df0a5a4",
      "parents": [
        "913ff66ba30093d2fdc26af215f4bc0b3d359d75"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 03:21:44 2012 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 22:09:34 2013 +0100"
      },
      "message": "lib: remove ALL_LIST_ELEMENTS dead code branch\n\nALL_LIST_ELEMENTS is checking node \u003d\u003d NULL twice, which is causing a\nwhole slew of false positives in Coverity.  In this particular case,\naddressing this in the code is reasonable; being a macro, this appears\nall over the place without easy remedy.\n\nAcked-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "61be0ee8824b30e94ddd2bfe8b51fcfd330c41dd",
      "tree": "483968a7a26038e2f88056458ac575ff9938e386",
      "parents": [
        "675769b1b17a068526d90786e1c35304656faba7"
      ],
      "author": {
        "name": "Hasso Tepper",
        "email": "hasso.tepper@gmail.com",
        "time": "Fri Dec 14 14:58:32 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 21:50:06 2013 +0100"
      },
      "message": "build: Fix build for systems with no /bin/true\n\nThere are systems with no /bin/true - it might have different path\n(/usr/bin/true) or even a shell builtin.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b2e5bdbe10c4145f508fcf1486ffe29d5ce516f7",
      "tree": "fae70e8c1580d99fee0c2a59d6bef831c4c9465c",
      "parents": [
        "a16dcf7c11d80775b07a0fa6f3ac5527190fb486",
        "e0630cb4d61557f956318a088f68f1fc4d261ef3"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 21:46:18 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 21:46:22 2013 +0100"
      },
      "message": "Merge remote-tracking branch \u0027savannah/sf/ospfd\u0027\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7798b6321cd0c6281b1a119ac894ff3749e88cc1",
      "tree": "2be0e1ed9af8a9fdf156d013287c154cb081965a",
      "parents": [
        "f92c57f8ba4f1e856934ec1736be3cad62be4785"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Tue Dec 04 13:33:24 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:51 2013 -0800"
      },
      "message": "lib: Changes to VTY string-parsing macros to remove warnings\n\nThe VTY_GET_INTEGER_RANGE macro was being used also just to check the range\non a variable that wasn\u0027t used (for the \"no\" version of a VTY command), so I\nsplit the macro into two.  Also, since the variable is unsigned, if MIN is\nzero, you get a warning about comparing an unsigned number against 0, giving\nrise to slightly convoluted logic.  Note that the previous two patches were\nfound by the -Wtype-limits and -Wunused-variables warnings.  Without the\nchanges to these macros, these warnings are triggered erroneously, making it\nharder to find the real problems.\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "4209a88759c41aac54465b6d4389b7daaad6ac80",
      "tree": "bab409239b92b7151284b03640c07aa3f18127f6",
      "parents": [
        "fd76f41ac0267dc4cf5438ac8f5e23fae6810d31"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Dec 13 10:59:00 2012 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Dec 13 11:04:37 2012 +0100"
      },
      "message": "build: fix dist tarball\n\nautomake file lists haven\u0027t quite kept up with recent changes, time to\nfix them up so the dist tarball actually works...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0be793e674c8b076f0e8bf327257f15803480f49",
      "tree": "28c42a679265d25ea41f4265232e2bcc167b1f49",
      "parents": [
        "324ed1f87aedf30a45aea951edb2e717c5f9b7fb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 01:34:56 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:34:37 2012 +0100"
      },
      "message": "build: include git info\n\nIf enabled with --with-pkg-gitversion on ./configure, this will append\ngit version strings and branch information at the following places:\n - overall version number: 0.99.21-g0123456\n - login motd and show version: tag information + git id + branches\n\nSample output:\n  Hello, this is Quagga (version 0.99.21-g14b49ad-dirty).\n  Copyright 1996-2005 Kunihiro Ishiguro, et al.\n\n  This is a git build of quagga_0_99_21_release-106-g14b49ad-dirty\n  Associated branch(es):\n\tlocal:master\n\n[v2]: fix build without gitinfo (add \"else\" branch)\n[v2]: fix for repos without any tags (different git describe output)\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "04f7dd64dfa0f339208f0d4833276b7684ee3343",
      "tree": "4f753475c70762ba3a96eead9795a0f3a5904c10",
      "parents": [
        "78deec450cfa5ddcad290c13b36dd1d187da213e"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:57 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "lib: bring in sys/queue.h from FreeBSD tree\n\nBring in sys/queue.h from the FreeBSD tree as lib/queue.h.\n\nThis header implements lists of various flavors using inline\nlinkages. The imported file corresponds to SVN revision 221843 (url\nbelow) and is available under the terms of the New BSD license\n(3-clause).\n\n  http://svnweb.freebsd.org/base/head/sys/sys/queue.h?revision\u003d221843\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0915bb0ce2ca6b5fee2cd214be4499eeeaf1c9af",
      "tree": "eb3cb410ed0dd341e2e565e71d74bba81c0dbf8a",
      "parents": [
        "1b5ed1b054b955275bb7cf0f80fb7767094bc28b"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:55 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add iterator for walking all tables in RIB\n\n* lib/zebra.h\n\n    Add macro ZEBRA_NUM_OF, which returns the number of elements in a\n    static array.\n\n  * zebra/rib.h\n\n    Add the rib_tables_iter_t structure and associated functions,\n    which allow one to walk all tables in the rib.\n\n  * zebra/zebra_rib.c\n\n    - Add vrf_id_get_next() to retrieve the first VRF id (if any) that\n      is greater than a given VRF id.\n\n    - Add rib_tables_iter_next().\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1b5ed1b054b955275bb7cf0f80fb7767094bc28b",
      "tree": "b8d886b85615f1b05679e6879c961e5dcb1496c4",
      "parents": [
        "9fd92e3c4bdcc78e0f0d94d53a2d4c7b0e893fcb"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:54 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add way to determine VRF/AFI/SAFI of table\n\nAdd some code that allows us to determine which VRF and AFI/SAFI a\ngiven RIB table corresponds to.\n\n  * zebra/rib.h\n\n    Add rib_table_info_t structure, which contains information about\n    the VRF, AFI and SAFI that a table is for.\n\n  * zebra/zebra_rib.c\n\n    - Add the vrf_table_create() function, which creates a table and\n      sets its \u0027info\u0027 pointer to a newly created rib_table_info_t.\n      The \u0027info\u0027 pointer allows us to go from a route_node or a table\n      to the associated vrf.\n\n    - vrf_alloc(): Use vrf_create_table() to create tables.\n\n  * lib/memtypes.c\n\n    Add memory type for rib_table_info_t.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9fd92e3c4bdcc78e0f0d94d53a2d4c7b0e893fcb",
      "tree": "a3adf090e5ef776b8c6dc6223890a2640217a95b",
      "parents": [
        "5aebb9c77fc2257c9d9df72db66668fabb24fc52"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:53 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add structure to hold per-prefix state in RIB\n\nAdd the rib_dest_t structure to hold per-prefix state in the routing\ninformation base. This gives us an appropriate place to maintain the\nqueueing state of a route_node. Queuing state was previously being\nstored on the first rib in the list of ribs hanging off the\nroute_node.\n\n  * zebra/rib.h\n\n    - Add new structure rib_dest_t.\n\n    - Remove the rn_status field from \u0027struct rib\u0027, it is no longer\n      required.\n\n    - Add macros (RNODE_FOREACH_RIB, RNODE_FOREACH_RIB_SAFE) for\n      walking all \u0027struct ribs\u0027 corresponding to a route_node. These\n      hide the fact that there is an intermediate rib_dest_t\n      structure.\n\n    - Add a few utility inlines to go between a rib_dest_t and\n      associated structures.\n\n  * zebra/zebra_rib.c\n\n    - rib_link()/rib_unlink()\n\n      Tweak for new behavior, where the \u0027info\u0027 pointer of a route_node\n      points to a rib_dest_t. The list of ribs for a prefix now hangs\n      off of the dest.\n\n      Change the way we ref count route_nodes. We now hold a single\n      ref count on a route_node if there is a corresponding\n      rib_dest_t.\n\n    - Maintain the queuing state of a route_node on the flags field of\n      the rib_dest_t.\n\n    - Add the rib_gc_dest() function, which deletes a rib_dest_t if it\n      is no longer required. A rib_dest_t can be deleted iff there are\n      no struct ribs hanging off of it.\n\n    - Call rib_gc_dest() any time we unlink a rib from the\n      rib_dest_t. Currently we only need to call it once, just before\n      we return from rib_process().\n\n  * zebra/{redistribute,zebra_rib,zebra_snmp,zebra_vty}.c\n\n    Use new macros to walk over route_node ribs.\n\n  * lib/memtypes.c\n\n    Add memory type for rib_dest_t.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3b96b78136d04ddb7e39d86577cad75acb25237a",
      "tree": "a056f89d771aa6706816b0b8507fc4b44028d865",
      "parents": [
        "43057bf22a4240b5e163c30a1f66deb702ce746e"
      ],
      "author": {
        "name": "Hasso Tepper",
        "email": "hasso.tepper@gmail.com",
        "time": "Thu Oct 11 11:31:54 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 15:16:53 2012 -0500"
      },
      "message": "lib: Implement monotonically increasing clock for Darwin.\n\nThere is no Posix CLOCK_MONOTONIC in Darwin, but monotonically\nincreasing clock can be implemented using mach_absolute_time().\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3f0bfc9e82e0d735be2cb06d5c4a3028650637bf",
      "tree": "1d923623eaecc1cd05fdc285f1e7874ad638985c",
      "parents": [
        "837d16ccbe0fca413f8927da6a34b1e97ccada8a"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Wed Sep 26 12:01:23 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 01 22:58:36 2012 -0700"
      },
      "message": "lib: treat OSX as BSD for IP_HDRINCL (BZ#739)\n\nMac OS X needs HAVE_IP_HDRINCL_BSD_ORDER defined like BSD. If it\u0027s not\ndefined, it\u0027ll fail like this:\n\n  *** sendmsg in ospf_write failed to 224.0.0.5, id 0, off 0, len 64,\n  interface en0, mtu 1500: Invalid argument\n\nWhich is caused by reordering iph-\u003eip_len in\nsockopt_iphdrincl_swab_htosys.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "837d16ccbe0fca413f8927da6a34b1e97ccada8a",
      "tree": "7aed5a517b619c03d11bf567f6a14cda6f8f5efe",
      "parents": [
        "655071f44aab42e89bcece3a93da456fdd0d913a"
      ],
      "author": {
        "name": "Balaji.G",
        "email": "balajig81@gmail.com",
        "time": "Wed Sep 26 14:09:10 2012 +0530"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "*: use array_size() helper macro\n\nUse the array_size() helper macro.  Replaces several instances of local\nmacros with the same definition.\n\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "80a21dc60fa007bb00437fdc047c3e059232639f",
      "tree": "884fad4cd756c73e36232b6182e46d85ba64e229",
      "parents": [
        "f02a09925db53d3e1d29b1917ebbcaa8edf72c12"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 08 13:32:12 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "lib: add array_size() helper\n\nimplement array_size as sizeof(array) / sizeof(array element)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4effc29fb1c33a87a8d386de39c20d36a6956645",
      "tree": "73e57392e4227aeae3ca3ef1db54e227f46909e6",
      "parents": [
        "b4154c145a2d1d0679983130413b81d44fbb04ab"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat May 05 17:42:43 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "lib: improve sanity checks in stream_set_endp()\n\n  * lib/stream.c: (stream_set_endp) Add checks to make sure that the\n    supplied \u0027endp\u0027 is within the \u0027size\u0027 of the stream, and that the\n    current read pointer \u0027getp\u0027 is not beyond the specified \u0027endp\u0027.\n"
    },
    {
      "commit": "d8a4e42b7d19a87eacc00c825e913907a58f39ee",
      "tree": "2d0777bfbef0e77ca1722fe0e7b2591ef89d4102",
      "parents": [
        "b0145ddb4bf75d2c8853aa3d0bc7c522f4f17531"
      ],
      "author": {
        "name": "JR Rivers",
        "email": "jrrivers@cumulusnetworks.com",
        "time": "Thu Sep 13 17:17:36 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "lib: improve fletcher checksum validation\n\nOVERVIEW\n\nThe checksum used in OSPF (rfc2328) is specified in rc905 annex B.  There is an\nsample implementation in rfc1008 which forms the basis of the quagga\nimplementation.  This algorithm works perfectly when generating a checksum;\nhowever, validation is a bit problematic.\n\nThe following LSA (generated by a non-quagga implementation) is received by\nquagga and marked with an invalid checksum; however, it passes both the rfc905\nand rfc1008 validation checks.\n\nstatic uint8_t lsa_10_121_233_29[] \u003d {\n   0x0e, 0x10, 0x02, 0x03,\n   0x09, 0x00, 0x35, 0x40,\n   0x0a, 0x79, 0xe9, 0x1d,\n   0x80, 0x00, 0x00, 0x03,\n   0x00, 0x8a, 0x00, 0x1c,\n   0xff, 0xff, 0xff, 0xe0,\n   0x00, 0x00, 0x36, 0xb0\n};\n\nLS Type: Summary-LSA (IP network)\n   LS Age: 3600 seconds\n   Do Not Age: False\n   Options: 0x02 (E)\n   Link-State Advertisement Type: Summary-LSA (IP network) (3)\n   Link State ID: 9.0.53.64\n   Advertising Router: 10.121.233.29 (10.121.233.29)\n   LS Sequence Number: 0x80000003\n   LS Checksum: 0x008a\n   Length: 28\n   Netmask: 255.255.255.224\n   Metric: 14000\n\nYou\u0027ll note that one byte of the checksum is 0x00; quagga would calculate the\nchecksum as 0xff8a.\n\nIt can be argued that the sourcing implementation generates an incorrect\nchecksum; however, rfc905 indicates that, for 1\u0027s complement arithmetic, the\nvalue 255 shall be regarded as 0, thus either values are valid.\n\nEXPLANATION\n\nThe quagga ospfd and ospf6d implementations operate by copying the PDU\u0027s\nexisting checksum in a holding variable, calculating the checksum, and comparing\nthe resulting checksum to the original.  As a note, this implementation has the\nside effect of modifying the contents of the PDU.\n\nEvaluation of both rfc905 and rfc1008 shows that checksum validation should\ninvolve calculating the sum over the PDU and checking that both resulting C0 and\nC1 values are zero.  This behavior is enacted in the rfc1008 implementation by\ncalling encodecc with k \u003d 0 (checksum offset); however, this functionality had\nbeen omitted from the quagga implementation.\n\nPATCH\n\nThis patch adds the ability to call the quagga\u0027s fletcher_checksum() with a\nchecksum offset value of 0xffff (aka FLETCHER_CHECKSUM_VALIDATE) which returns\nthe sum over the buffer (a value of 0 indicates a valid checksum).  This is\nsimilar to the mechanism in rfc1008 when called with k \u003d 0.  The patch also\nintroduces ospf_lsa_checksum_valid().\n\nospf6d had it\u0027s own implementation of the fletcher checksum in\nospf6_lsa_checksum(); it\u0027s the same algorithm as in fletcher_checksum().  This\npatch removes the local implementation in favor of the library\u0027s as well as creates\nand uses ospf6_lsa_checksum_valid().\n\nquagga\u0027s ISIS implementation suffers from the same problem; however, I do not\nhave the facilities to validate a fix to ISIS, thus this change has been left to\nthe ISIS maintainers.  The function iso_csum_verify() should be reduced to\nrunning the fletcher checksum over the buffer using an offset of 0.\n\nSigned-off-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Nolan Leake \u003cnolan@cumulusnetworks.com\u003e\nReviewed-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "28971c8cb1138700e87dc7da673e59b5596bb51b",
      "tree": "0e55c3f830681449cd96bb36eb04a6a1293d8b44",
      "parents": [
        "67174041d2d9d8908f8b2c915bc0d186d8442c68"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Fri Aug 17 08:19:50 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 21:50:48 2012 +0200"
      },
      "message": "lib/table: add route_table_get_next() and iterator\n\n  * lib/table.[ch]\n\n    - Add a function (route_table_get_next()) to get the route_node in\n      a tree that succeeds a given prefix in iteration order.\n\n      This allows one to reliably walk nodes in a tree while allowing\n      modifications, and is useful for achieving scale and\n      performance. Other approaches are also possible -- the main plus\n      point of this one is that it does not require any state about\n      the walk to be maintained in the table data structures.\n\n    - Add an iterator for walking the nodes in a tree. This introduces\n      a new structure (route_table_iter_t) and the following main\n      functions.\n\n        route_table_iter_init()\n        route_table_iter_pause()\n        route_table_iter_next()\n        route_table_iter_cleanup()\n\n      The iterator normally uses node pointers and the existing\n      route_next() function to walk nodes efficiently. When an\n      iteration is \u0027paused\u0027 with route_table_iter_pause(), it stores\n      the last prefix processed. The next call to\n      route_table_iter_next() transparently invokes\n      route_table_get_next() with the prefix to resume iteration.\n\n  * bgpd/bgp_table.[ch]\n\n    Add wrappers for the new table features described above.\n\n  * tests/table_test.c\n\n    Add tests for the new table code.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f9c1b7bb9b98342f1f3b0bfe3af01844f364dce9",
      "tree": "350c8e0d98e4dcc53b126c6ce1c7568c440fcb06",
      "parents": [
        "3eb8ef37bc463f88bfa36bd26fd43f7f6ad36c20"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Fri Aug 17 08:19:48 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 21:48:49 2012 +0200"
      },
      "message": "lib: prepare table code for reuse by bgp_table\n\n  * lib/table.[ch]\n\n    - Add a macro (ROUTE_NODE_FIELDS) that expands to all the fields\n      of a route_node structure.\n\n    - Add the route_table_delegate_t structure, a function vector\n      which allows clients to customize the behavior of one or more\n      tables.\n\n      The delegate currently contains the \u0027create_node\u0027 and\n      \u0027destroy_node\u0027 functions, and hence enables a table to use an\n      alternative node structure. The alternative node is expected to\n      embed the fields of a route_node using ROUTE_NODE_FIELDS.\n\n    - Add route_table_init_with_delegate() to create a new table with\n      a given delegate.\n\n    - Make route_table_init() a thin wrapper around\n      route_table_init_with_delegate(). The delegate it passes in\n      simply creates/destroys route_node structures as before.\n\n    - Add a user data pointer (info) to the route_table\n      structure. This can be used by a client to keep per-table state.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3eb8ef37bc463f88bfa36bd26fd43f7f6ad36c20",
      "tree": "6238a10b945d98b5b06f5bf4620406579d687aa6",
      "parents": [
        "ed6e297972318a0070ad4d973401fbc6e0def558"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Fri Aug 17 08:19:47 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 21:48:48 2012 +0200"
      },
      "message": "lib: bring some changes over from bgp_table to table\n\n  * lib/table.c\n\n    - Maintain table node count. Expose it via the route_table_count()\n      function (from revision cbdfbaa5).\n\n    - route_unlock_node(): Add assertion (from revision 228da428).\n\n    - route_table_free(): Make static and fix up cleanup code (from\n      revision 228da428).\n\n    - route_node_delete(): Change to be static.\n\n    - Add \u0027const\u0027 qualifier in a couple places.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "aa5cf24b9de96245f2166ef1c4e9612890ced1b3",
      "tree": "fc8a8895286c635764e2d409b7ab6567a5b9ee6f",
      "parents": [
        "ee1ac2d52a6656e589ca2fb4feb3ec5fd366ecb7"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jul 19 16:11:50 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jul 19 16:15:50 2012 +0200"
      },
      "message": "lib: make IPv6 prefix parser slightly more strict\n\nThis makes it possible to have both \"show babel route A.B.C.D/M\"\nand \"show babel route X:X::X:X/M\" commands at the same time without\nthe parser complaining about ambiguity.\n\n* lib/command.c: only accept STATE_DOT after : was seen.\n\nReported-by: Juliusz Chroboczek \u003cjch@pps.jussieu.fr\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8046ba6ec4d6e87bf8da6563c0f3e5e66c4652b3",
      "tree": "1b38b2eae4e1cee042f96a42217b14647159bf0f",
      "parents": [
        "0ff4b9c96793898429052de576d8da368e48997e"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Thu May 31 13:30:28 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "snmp: let handlers accept OID from a lesser prefix\n\nMost table handlers do not expect to be given an OID whose prefix is\noutside what they can handle. This is not a problem with the SMUX\nimplementation since it always correct the OID such that the prefix\nmatches. However, this is not the case for the AgentX\nimplementation. A new function, smux_header_table() is used to do this\nnormalization.\n"
    },
    {
      "commit": "b7c0d0651cd64f644d02ef5e4d1b82febe7e57d8",
      "tree": "5480eff7b8581e1168d23657da0f30e23100d7bc",
      "parents": [
        "b8cf46b715b2c21db5dce8118c70b4dd9b5255a3"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Fri May 25 11:17:01 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "agentx: handle SNMP traps\n\nsmux_trap() signature has been changed to provide appropriate level\ninformation to send SNMPv2 notifications. This includes the addition\nof the enterprise OID to use (from which is derived the SNMP trap OID)\nand the MIB registry to locate the appropriate function for variable\nbindings provided by the trap.\n\nThe SMUX implementation has been updated but ignore the provided\nenterprise OID. Instead, it still uses the SMUX peer OID to keep\ncompatibility with previous versions of Quagga. The SMUX\nimplementation also ignores the provided MIB registry since it uses\nsmux_get() function to grab the appropriate values. This is not\npossible with the AgentX implementation since there is no such\nfunction provided by NetSNMP.\n"
    },
    {
      "commit": "b8cf46b715b2c21db5dce8118c70b4dd9b5255a3",
      "tree": "61fea7fd6d75345f5224e36d8ca33badc9d39b17",
      "parents": [
        "4b89e45d928d41bb5d32a00ba7b402d6a3bbdf44"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Fri May 25 08:56:44 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "smux: drop findVar element from trap object struct\n\nThis element was not unused.\n"
    },
    {
      "commit": "4b89e45d928d41bb5d32a00ba7b402d6a3bbdf44",
      "tree": "7471ad396e285ff5b0ca3d85600f3c184f43dd2c",
      "parents": [
        "d6be5fb9bc41ea77547204eeedd12132b26ad662"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Thu May 24 21:22:01 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "smux: remove `tick` argument from smux_trap()\n\nsmux_trap() contains an argument whose use appears to be to set\nsysUpTime.0/timestamp field in SNMP trap. However, this value is not\nused in smux_trap(). Moreover, it is expected that this field is the\nvalue of sysUpTime.0 when the trap was sent and not any other time\nrelated to the trap. To avoid any confusion, we remove this field from\nthe signature of the function.\n"
    },
    {
      "commit": "d6be5fb9bc41ea77547204eeedd12132b26ad662",
      "tree": "dfe0f2a92faf6bd7d5b5b5f7b8006014a03e5469",
      "parents": [
        "3a4c96885ec878ae4631b0fb7bb7839578725976"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Thu May 24 09:44:43 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "agentx: add AgentX support to Quagga.\n\n--enable-snmp will enable AgentX support in Quagga. SMUX is still here\nand can be enabled with --enable-snmp\u003dsmux. AgentX support can be\nenabled with \"agentx\" in configuration file. As for SMUX, this command\nis not understood by vtysh. It can be disabled with \"no agentx\",\nthough there is no real use of this since this command cannot be used\nwith vtysh.\n\nIf \"agentx\" and \"no agentx\" command were added to vtysh, it would not\nbe possible to disable agentx support after enabling it because\nNetSNMP does not expose the appropriate methods for this.\n\nThe internals of AgentX are hidden by NetSNMP. Therefore, we don\u0027t\nhave a file descriptor to add to the threading system. We do not have\nthe timers to set either. Therefore, the event loop is modified to\nmake use of snmp_select_info() from NetSNMP.\n\nTraps are not supported yet.\n"
    },
    {
      "commit": "3a4c96885ec878ae4631b0fb7bb7839578725976",
      "tree": "0b0334f9b6b7fce2bc2ebe2fac0c51350c1838de",
      "parents": [
        "08d7f6533ecc0f935a76918c462982004534864d"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Wed May 23 00:52:46 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "smux: isolate SMUX implementation from SNMP implementation\n\nlib/snmp.c gets OID related helper functions that can be used with\nanother SNMP interface. smux.h is cleaned of SMUX specific bits to\nonly expose functions that may be used by an alternative\nimplementation. We also do not redefine functions already present in\nNetSNMP. Just use the appropriate headers.\n"
    },
    {
      "commit": "08d7f6533ecc0f935a76918c462982004534864d",
      "tree": "0e67590a8a2aba551439c46bfa8b33d7fba4feb7",
      "parents": [
        "6b1e37f8537fa2a4560de32e83ca5089763e2d39"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue May 22 22:29:17 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "build: use net-snmp-config to configure NetSNMP\n\nThe correct method to link to NetSNMP is to use net-snmp-config (which\nis like pkg-config). Explicit link to libcrypto is also dropped\n(NetSNMP libs are linked to libcrypto, no need to link Quagga to\nit). Moreover, @SNMP_INCLUDES@ is dropped because useless. Due to a\nbug in configure.ac, it was properly populated.\n"
    },
    {
      "commit": "6b1e37f8537fa2a4560de32e83ca5089763e2d39",
      "tree": "941dfbfbe62981ec214ac1e5a3f607368f4bf1d4",
      "parents": [
        "9e7a548ce421660b0d22bfeb90c2b2b53742aac7"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue May 22 22:15:20 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "build: only define HAVE_SNMP\n\nNetSNMP is the only SNMP implementation for Quagga. We don\u0027t need two\ndifferent symbols.\n"
    },
    {
      "commit": "9e7a548ce421660b0d22bfeb90c2b2b53742aac7",
      "tree": "4c962403808f98806781fb4ad15594152bc1effa",
      "parents": [
        "a47c5838e9f445ab887ad927706b11ccbb181364"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue May 22 14:32:22 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "build: allow configure and build in a separate directory\n\nSome .h files in lib/ are autogenerated. The search path should\ninclude the build directory and the source directory. They usually\nmatch but sometimes, they may be different. For example:\n\n $ mkdir build\n $ cd build\n $ ../configure\n $ make\n"
    },
    {
      "commit": "2fb2a455263c569119ca32be59b0337a3d8cd9b3",
      "tree": "79f895f78cd4adb43dde3ba3996e8a04a8deac42",
      "parents": [
        "ad12dde6f9596997337ebc210dd2d4593438556b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 14 10:37:40 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 14 10:37:40 2012 +0100"
      },
      "message": "lib: Add back sockunion_str2su\n\n* sockunion.h: Add back sockunion_str2su, its removal breaks things needlessly\n  (e.g. our own unit tests).\n* sockunion.c: (sockunion_str2su) implement on top of str2sockunion.\n"
    },
    {
      "commit": "22714f99c4ffeb4d1bade7ad6374adeba0e06e4c",
      "tree": "43b6e720bc05ad1bc5748d8d8a08c725a7fe6a90",
      "parents": [
        "64018324d5e5071eea3b3f72f939d91dc7aef029"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:14 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:50:14 2012 +0200"
      },
      "message": "lib: do not allocate/free thread funcnames\n\n  This avoids memory heap fragmentation and imposses less load on the\nsystem memory allocator.\n\n* thread.h: FUNCNAME_LEN defined to 64 (ISO C99 says max 63)\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\n[changed FUNCNAME_LEN to a less arbitrary value]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "64018324d5e5071eea3b3f72f939d91dc7aef029",
      "tree": "faa7378fe45c6a11cf5198ba182f9bf54f3022f5",
      "parents": [
        "41af338ecd56b9891d996f0fc850e02318b0c01a"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:13 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:35:51 2012 +0200"
      },
      "message": "lib: micro-op for thread_get()\n\nthread_trim_head() already checks that the list is not empty.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "41af338ecd56b9891d996f0fc850e02318b0c01a",
      "tree": "8543da475e3e82e6a63a8e2c8d8f0175bc447c2d",
      "parents": [
        "47d3b6078a6c885e03d28bae3397b71a827473f5"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:12 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:35:51 2012 +0200"
      },
      "message": "lib: remove RUSAGE_T from struct thread\n\n* thread.c: It\u0027s only temporarily used in thread_call() to calculate the\n  diffs. Saves 80 bytes per copy.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "47d3b6078a6c885e03d28bae3397b71a827473f5",
      "tree": "b3a6a1de537c9be50c839cf088be89ee91c6b38e",
      "parents": [
        "f018db83a0746f9336d04e50dd06f3bbf6565f1c"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:11 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:35:51 2012 +0200"
      },
      "message": "micro-op bgp_node_[get|lookup]() and route_node_[get|lookup]()\n\n  Reduce indirection for values that doesn\u0027t change in the loop.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\n[adjusted after dropping previous patch]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "10f9bf3f2021f874e574e4ebae9413bee982ed2b",
      "tree": "5102a98c91d7d60380c07c08d0aaa32aa19cdbdf",
      "parents": [
        "f669f7d25f0f491d5e487897227ff434aef20406"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:52 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:07 2012 +0200"
      },
      "message": "bgpd: optimize bgp_nexthop_self()\n\n  This function scores 2nd, profiling a full internet table load. It\u0027s called\nfor every prefix received.\n  Instead of looping in the interface lists comparing addresses use a hash\nto mantain them.\n\n* bgpd.c: Init the own address hash.\n* bgp_nexthop.c: Introduce methods to maintain an own address hash.\n  (bgp_connected_add) add addresses to the hash.\n  (bgp_connected_delete) delete addresses from the hash.\n  (bgp_nexthop_self) lookup addresses in the hash. Removed the unused afi_t\n  parameter.\n* bgp_route.c: (bgp_update_main) Micro-optimization, rearranged condition to\n  not lookup the hash for bogus nexthops (0.0.0.0 or a class D/E address)\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1b79fcb646f66682a62cf34f3cc343b1a9706699",
      "tree": "6b9b215b3bac9b46027266fff10a6c53e2665624",
      "parents": [
        "7c9c6aebe8daabece9e78d47727dcdcb757c0a63"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 15:17:31 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon May 21 15:41:21 2012 +0200"
      },
      "message": "lib: fix thread_cancel_event()\n\n  ospfd was crashing some times on neighbour going down. The cause was that\nospf_nsm_event() was accessing already freed memory in ospf_nbr_delete()\ncall from ospf_nsm_event().\n\n  What happens is that since commit b5043aab (lib: fix incorrect thread\nlist...) now a thread can be on the event and ready lists but\nthread_cancel_event() doesn\u0027t account for that.\n\n* thread.c: (thread_cancel_event) loop on the ready list too to cancel\n  pending events.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7c9c6aebe8daabece9e78d47727dcdcb757c0a63",
      "tree": "cba28a59fdd2012b8cadba54335901b47dd255de",
      "parents": [
        "36735ed988f96810e78d0ace2f7d8e6397db5c50"
      ],
      "author": {
        "name": "Roman Hoog Antink",
        "email": "rha@open.ch",
        "time": "Wed May 09 06:35:34 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon May 21 15:41:14 2012 +0200"
      },
      "message": "lib: drop heuristic IPv6 address recognition\n\n* command.c: (cmd_ipv6_match) Drop IPv6 address recognition\n  heuristics and solely rely on inet_pton, because strings\n  like \"abcd\" were mistaken for IPv6 addresses.\n  This affects e.g. the command \"neighbour WORD peer-group\",\n  which won\u0027t work with words consisting of up to 4 characters\n  between \u0027a\u0027 and \u0027f\u0027 and digits.\n\nFrom: Roman Hoog Antink \u003crha@open.ch\u003e\n[full delete instead of #if 0]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "37beff6feb7c1715a19b59b8a87edcb6b50d5ac2",
      "tree": "c36dd44b545b5ecc093f2dd37ba78c891eb41a22",
      "parents": [
        "128293286a8be01b99ed60db53e19ce6e2669558"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Tue Apr 10 16:57:26 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:34 2012 +0200"
      },
      "message": "lib: remove sockunion related unused definitions\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "128293286a8be01b99ed60db53e19ce6e2669558",
      "tree": "59bf4be72bc1905a404c572d0446390f1587c67b",
      "parents": [
        "c63b83fe8d1addecc949258479b8d54180c4da60"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Tue Apr 10 16:57:25 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:28 2012 +0200"
      },
      "message": "lib, zebra: extend use of sockunion2ip macro\n\n  * lib/sockunion.c,\n  * zebra/zebra_rib.c: replace -\u003esin.sin_addr.s_addr with sockunion2ip\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\n[reworded commit message]\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "c63b83fe8d1addecc949258479b8d54180c4da60",
      "tree": "fbc58da3014db1cf74a2f8a91a33fe941968815d",
      "parents": [
        "d227617a972bb20a974be68bea5032e692a0970f"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Tue Apr 10 16:57:24 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:27 2012 +0200"
      },
      "message": "bgpd: Fix memory leak of some \"show ip bgp neighbor\" commands\n\nsockunion_str2su() use is prone to memory leaks. Remove it\u0027s use all over\nthe code.\n\nAt least these commands leaked a sockunion union:\n    - show ip bgp vpnv4 ... routes\n    - show ip bgp ... received prefix-filter\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "d227617a972bb20a974be68bea5032e692a0970f",
      "tree": "550ab426e690a34ffe8955eeccf2c93a616adef2",
      "parents": [
        "0c5ed3ed00f630ae95dc2dfd4b5a938683e2a99e"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Tue Apr 10 16:57:23 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:27 2012 +0200"
      },
      "message": "lib: remove last uses of sockunion_su2str()\n\nUse of this function is prone to memory leaks.\n\nThis fixes a memory accounting bug for vty denied connections.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "0c5ed3ed00f630ae95dc2dfd4b5a938683e2a99e",
      "tree": "9e478062fed566ce245113a166a6c8d1eec9fbe2",
      "parents": [
        "4fe080d7ee4c924a962d14423d94b4b8d8aba110"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Tue Apr 10 16:57:22 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:27 2012 +0200"
      },
      "message": "bgpd: Fix memory leak with \u0027set ip next-hop peer-address\u0027\n\nA route-map with the mentioned statement causes a memory leak for every\nprefix that matches.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "8d79efddb9c63f3b45e0ee7cac9508509b3b939c",
      "tree": "c2b652492dffa025fd18a24aba12f30ca04b4e04",
      "parents": [
        "9665856e3718e42068e7d897f5e2468e77fb8c17"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Fri Apr 20 17:26:48 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Fri Apr 20 17:29:44 2012 +0200"
      },
      "message": "lib: bump ZSERV_VERSION to 2\n\ncontinually changing the zserv protocol without bumping up the version\nnumber has made it impossible to talk to zebra without knowing the exact\nversion.  in reality, increasing the version number more often guards\nagainst inadvertedly running incompatible versions of a daemon and zebra\nas well as aids external development.\n\n  * lib/zclient.h: #define ZSERV_VERSION 2\n\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "d75318cc8de91d94649106f4ea3122d0d21ac9eb",
      "tree": "6d7c674c4026bccd1384e60ee228d8d67750fbf7",
      "parents": [
        "6e493a44836d3b034ed3421e866878de3fbfcc5b",
        "48d8bea8b7c83cf186460f711ab166455b5ed676"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Apr 16 18:24:40 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Apr 16 18:24:43 2012 +0200"
      },
      "message": "isisd: merge osr/google-is-is\n\nthis is essentially half of a rewrite of isisd. please note that a lot\nof things are still broken and isisd is not ready for production use.\n"
    },
    {
      "commit": "14d2bbaa3f4aa53152472694c29f336808e47313",
      "tree": "e39bdddef4ea53207dd8fb61e1fd6b54d8c7721d",
      "parents": [
        "51d4ef832c1e58150325630e25c442866e5a6cf5",
        "e96b312150d8e376c1ef463793d1929eca3618d5"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Wed Apr 11 23:51:08 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Wed Apr 11 23:51:08 2012 -0700"
      },
      "message": "Merge quagga mainline into the google ISIS code.\n\nThe steps were:\n\n  $ git checkout google-is-is\n  $ git merge quagga\n  $ git checkout google-is-is -- isisd\n\n  # Resolve conflicts in the following:\n  lib/md5.h\n  zebra/rt_netlink.c\n  zebra/zebra_rib.c\n  zebra/zserv.c\n\nNote that the content in the isisd directory is left unchanged in the\nmerge. As a result, changes made to isisd as part of the following\ncommits on the quagga mainline are dropped.\n\n  # 8ced4e82 is the merge base, e96b3121 is the current quagga master\n  $ git log --oneline --reverse 8ced4e82..e96b3121 -- isisd\n  5574999 isisd: fix crash on \"no router isis\" (BZ#536)\n  8998075 isisd: raise hello rate for DIS (BZ#539)\n  306ca83 isisd: include hash.h, not hash.c\n  b82cdeb delete CVS keywords\n  2f65867 isisd: indent longopts array\n  b511468 quagga: option \"-z\" (\"--socket \u003cpath\u003e\") added\n  05e54ee build: delete .cvsignore files\n  b4e45f6 fix zebra protocol after MP-BGP changes\n  7fd6cd8 isisd: fix circuit state machine\n  907fd95 isisd: send proper LSP after DIS election\n  d034aa0 isisd: fix wrong next-hops from SPF\n  c25eaff isisd: unexpected kernel routing table (BZ#544)\n  e6b03b7 isisd: implement MD5 circuit authentication\n"
    },
    {
      "commit": "3cf6c2b4e43f44a977d218c96c26250654ae333e",
      "tree": "e017cde2015fbf3ef6c250327428d7c6152aa8f7",
      "parents": [
        "01d7ff0a2166a422c56bd26f04fc22832a9e690b",
        "e96b312150d8e376c1ef463793d1929eca3618d5"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Mon Apr 09 00:25:15 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Mon Apr 09 00:25:15 2012 -0700"
      },
      "message": "Merge branch \u0027quagga\u0027 into google-bgp-multipath\n\nConflicts:\n\tbgpd/bgp_route.c\n"
    },
    {
      "commit": "51d4ef832c1e58150325630e25c442866e5a6cf5",
      "tree": "df155c4193531a37f651d4151866f18224f8ca4b",
      "parents": [
        "2dd04c5dc8b5a09cce1c251361fa58f26398fd9f"
      ],
      "author": {
        "name": "Josh Bailey",
        "email": "joshb@google.com",
        "time": "Wed Mar 21 17:13:39 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sun Apr 08 01:19:41 2012 -0700"
      },
      "message": "zebra: include hardware addr in if up/down messages\n\nChange interface up/down notification messages to also include the\nhardware address of the interface. The format of these messages is now\nidentical to the interface add message -- move the serialization code\nto common functions.\n\n  * lib/zclient.c: Modify zebra_interface_if_set_value() to also parse\n    the hardware address. Invoke it from zebra_interface_add_read()\n    and and zebra_interface_state_read().\n\n  * zebra/zserv.c: Add zserv_encode_interface(). Invoke it from\n    zserv_interface_add(), zserv_interface_delete() and\n    zserv_interface_update().\n"
    },
    {
      "commit": "2dd04c5dc8b5a09cce1c251361fa58f26398fd9f",
      "tree": "a738ee1b46f7d346e05285677b6c4df9ba689b6d",
      "parents": [
        "af56d404cd56d94ad3b2ec3f159650eb72baef0a"
      ],
      "author": {
        "name": "Josh Bailey",
        "email": "joshb@google.com",
        "time": "Wed Mar 21 10:37:03 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sun Apr 08 01:18:41 2012 -0700"
      },
      "message": "lib: Tweak to if_delete_retain()\n\n  * lib/if.c: Change if_delete_retain() to delete all connected\n    addresses, but to not free the list that holds them. Free the list\n    just before the interface structure itself is freed, in\n    if_delete().\n"
    },
    {
      "commit": "3f045a08812525505e165deea99a79447b44506b",
      "tree": "a5c944b0584e0e5a14908a2ac9476637e7c1d7e6",
      "parents": [
        "6902c69aa30a73ecd70ef8941518b541ca02b878"
      ],
      "author": {
        "name": "Josh Bailey",
        "email": "joshb@google.com",
        "time": "Sat Mar 24 08:35:20 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat Apr 07 13:54:37 2012 -0700"
      },
      "message": "isisd: add Google\u0027s changes to IS-IS\n"
    },
    {
      "commit": "d531050b7bf0f93d4d29a7a2f7b745641778b483",
      "tree": "82e45741fa3883f6e25a38f2abef4eea107fd54f",
      "parents": [
        "bed930fd70742af5ae138e0a5ee629dda296ea36"
      ],
      "author": {
        "name": "Subbaiah Venkata",
        "email": "svenkata@google.com",
        "time": "Sat Mar 24 13:10:19 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat Apr 07 13:53:40 2012 -0700"
      },
      "message": "lib: add stream_set_endp()\n\n  * lib/stream.[ch]:\n\n    - Add stream_set_endp(). This can be used to trim data (for\n      example, padding) at the end of a stream.\n\n    - Fix swapped \u0027getp\u0027 and \u0027endp\u0027 parameters in STREAM_WARN_OFFSETS.\n\nFrom: Subbaiah Venkata \u003csvenkata@google.com\u003e\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "bed930fd70742af5ae138e0a5ee629dda296ea36",
      "tree": "38d107117db56d60ce8d136507cc1d79ac2e22dc",
      "parents": [
        "54dd61227352dd1dd4db4fe76dbf7d2e92522e74"
      ],
      "author": {
        "name": "Josh Bailey",
        "email": "joshb@google.com",
        "time": "Wed Mar 21 10:22:19 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat Apr 07 13:53:22 2012 -0700"
      },
      "message": "lib: add support for keyed-hashing with MD5\n\n  * lib/md5.[ch] Add implementation of HMAC-MD5 from RFC 2104.\n\nFrom: Josh Bailey \u003cjoshb@google.com\u003e\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "54dd61227352dd1dd4db4fe76dbf7d2e92522e74",
      "tree": "da320cdec867ca81748f3b85b772422b386bf376",
      "parents": [
        "8ced4e82e6f417b13f4bfc09018fc51fd31058e2"
      ],
      "author": {
        "name": "Josh Bailey",
        "email": "joshb@google.com",
        "time": "Wed Mar 21 10:00:07 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat Apr 07 13:52:23 2012 -0700"
      },
      "message": "lib: Tweaks to linked list macros\n\n  * lib/linklist.h\n\n    - Change the listnextnode, listhead and listtail macros so that\n      they allow the list pointer to be NULL.\n\n    - Modify the ALL_LIST_ELEMENTS* macros such that they clear the\n      data pointer at the beginning and end of the loop.\n\nFrom: Josh Bailey \u003cjoshb@google.com\u003e\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "e96b312150d8e376c1ef463793d1929eca3618d5",
      "tree": "33bdbba11475be746d7ebf684fd1441b9db4b929",
      "parents": [
        "a3537862f3c00b60fc52a67c1cc447c2a65f97bd"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed Apr 04 00:14:36 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed Apr 04 00:25:51 2012 +0200"
      },
      "message": "lib: pretty ip_masklen and masklen2ip\n\nnonwithstanding any desire for optimisation, these versions are shorter\nand more concise.  reading the comments, they might even be easier to\nunderstand.\n\nI\u0027ve tested them on i686 and x86_64, and checked that correct assembler\ncode is emitted for ARM, MIPS and PowerPC.\n\nIPv6 is left as an exercise for another day, none of the ideas I had led\nto a \"yes, this is the one to go with\" solution.\n\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "a3537862f3c00b60fc52a67c1cc447c2a65f97bd",
      "tree": "97bcf4e43ff70dcf74de412e37944fd3ac5d6aae",
      "parents": [
        "fa5831e85ae9ba7008fb4b4e2d4c7561ae5cb697"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Fri Mar 23 22:48:05 2012 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed Apr 04 00:25:31 2012 +0200"
      },
      "message": "Revert \"lib: optimize ip_masklen()\" (BZ#720)\n\nThis reverts commit d171bf58ef12ace43d48565e6870722dece1e6ed.\n\nThere are multiple reasons for this revert, including bug #720, but also\nquite simply the unreadability of having 2000 lines of an autogenerated\ntable in the middle of a source file.\n\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\nReported-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2236df03898f82e627f865e11157a5e08dd2e4ba",
      "tree": "f27b4f7ce340761e4ce8181ac33cc85ccc5bc9c4",
      "parents": [
        "3f031ed536cf96d44015cf49d1f734d15d194f0a"
      ],
      "author": {
        "name": "Matthieu Boutier",
        "email": "boutier@pps.jussieu.fr",
        "time": "Thu Jan 19 22:37:38 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "memory: install babel memory informations.\n"
    },
    {
      "commit": "f8a246d6df0556fb897e1785d1c2ea81caf8956d",
      "tree": "e78438d35439685d7427dd5bfbc404f5c32f4b5c",
      "parents": [
        "87c271c69330cfcea7955503eba3ed15a15cb634"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 11 18:18:56 2012 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "lib: update proto_redistnum() for Babel\n"
    },
    {
      "commit": "5734509c0545ebd95a5b8e3f22a911c1a39ffa1b",
      "tree": "2f35ad50d793080db1f858c2de2228cfd2946dfd",
      "parents": [
        "fe67e668881b8b8d71b1570575c913cd287fafcf"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Dec 25 17:52:09 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:51 2012 +0100"
      },
      "message": "babeld: Initial import, for Babel routing protocol.\n\n* Initial import of the Babel routing protocol, ported to Quagga.\n* LICENCE: Update the original LICENCE file to include all known potentially\n  applicable copyright claims.  Ask that any future contributors to babeld/\n  grant MIT/X11 licence to their work.\n* *.{c,h}: Add GPL headers, in according with the SFLC guidance on\n  dealing with potentially mixed GPL/other licensed work, at:\n\n  https://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html\n"
    },
    {
      "commit": "fe67e668881b8b8d71b1570575c913cd287fafcf",
      "tree": "ce48b0028e879d4e6f938bb9dd583ed9f679fa96",
      "parents": [
        "aee567450eaf32877d00f47c4cc5d05c5fb85a51"
      ],
      "author": {
        "name": "Renato Westphal",
        "email": "renatowestphal@gmail.com",
        "time": "Fri Mar 23 16:27:40 2012 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Fri Mar 23 20:51:28 2012 +0100"
      },
      "message": "lib: fix endianness bug in prefix.c\n\nWhile defining two \"maskbytes\" arrays for the respective endiannesses,\nthe code was unconditionally using one that only worked on little endian\nsystems.\n\nUse preprocessor macros to avoid the somewhat expensive\nhtonl/ntohl macros.\n\nFrom: Renato Westphal \u003crenatowestphal@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "b5043aabb03567b46a16463d88a8afce2acda35e",
      "tree": "7b975c45bdbf513f62a1ad7f1aad35afb01606c9",
      "parents": [
        "b51a3a31500133e3e26f12e7639f297c655bc735"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 28 18:32:56 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 28 18:35:45 2012 +0000"
      },
      "message": "lib: fix incorrect thread list processing loops\n\n* thread.c: (thread_timer_process,thread_process) thread_list_delete nulls\n  thread-\u003enext. Loops need to save next first, or will only process the head.\n  Problem noted by Lou Berger \u003clberger@labn.net\u003e.\n"
    },
    {
      "commit": "4c78376f96cd2ca56f1c6476b76fd659654431f5",
      "tree": "1019b6adbea4ef0305c9574a9588e20345539028",
      "parents": [
        "e854095932260b3e6187902aa9a7baa0e96b9428"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Jan 21 22:50:19 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 21 21:34:21 2012 +0400"
      },
      "message": "lib: fix logging of ZEBRA_HELLO message\n"
    },
    {
      "commit": "e854095932260b3e6187902aa9a7baa0e96b9428",
      "tree": "1ee0afa3ad43b610d52bc04f86ea6e2b2e4ad00d",
      "parents": [
        "e6b03b77766dce8009ad7b4a2392e14addf4ab0f"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Feb 16 06:14:54 2012 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Thu Feb 16 06:17:11 2012 +0100"
      },
      "message": "lib: add THREAD_TIMER_MSEC_ON()\n\n * lib/thread.h: new timer macro, millisecond precision\n\n(this was cherrypicked from pimd to isolate all non-contained changes)\n\nFrom: Everton Marques \u003ceverton.marques@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "e6b03b77766dce8009ad7b4a2392e14addf4ab0f",
      "tree": "a47466541c8f85e70b228ae4ab3da31af3391507",
      "parents": [
        "c25eaffdb2190149e768dc4ee4efc913c6d02992"
      ],
      "author": {
        "name": "Fritz Reichmann",
        "email": "fritz@reichmann.nl",
        "time": "Sat Oct 01 17:49:48 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 14 03:06:36 2012 +0400"
      },
      "message": "isisd: implement MD5 circuit authentication\n\n* Replace command \"isis passwd\" with \"isis passwd {clear|md5}\"\n* Verify HMAC MD5 on ISIS Hello PDUs\n* Add HMAC MD5 authentication to md5.h/md5.c from RFC2104\n"
    },
    {
      "commit": "c7ec179a95c1ed4fcd3d3be3f981c8c20dce534a",
      "tree": "add6824e168ab26a28390a1d1b9a2c7be1484435",
      "parents": [
        "cddf391bf6839e9f093cef15508669c1f3f92122"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat Nov 26 22:04:05 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:30:50 2012 +0400"
      },
      "message": "bgpd: IPv6 MP-BGP Routes addition and deletion\n\nThis patch contains the following:\n1. Addition of IPv6 SAFI_MULTICAST BGP routes into the BGP Multicast RIB.\n2. Deletion of IPv6 SAFI_MULTICAST BGP routes from the BGP Multicast RIB.\n"
    },
    {
      "commit": "5a616c08ce089e25dc0e8da920727af4d11279bf",
      "tree": "4b5650d6602d06d0188102469e3b402abe81f16a",
      "parents": [
        "6ae93c058725991df5a9ae35cefec368919b5fea"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat Nov 26 21:58:42 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:30:33 2012 +0400"
      },
      "message": "bgpd: IPv4 MP-BGP Routes addition and deletion\n\nThis patch contains the following:\n1. Addition of IPv4 SAFI_MULTICAST BGP routes into the BGP Multicast RIB.\n2. Deletion of IPv4 SAFI_MULTICAST BGP routes from the BGP Multicast RIB.\n"
    },
    {
      "commit": "9ed79b53eb89b8a663eb368ef5f7d47701f231df",
      "tree": "3a0eb140a54197a46957dd41561705853e7c345e",
      "parents": [
        "ce3cdcfbed2ca65d0d3a12b926dd1103910a6056"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 24 18:45:05 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 13:42:23 2012 +0000"
      },
      "message": "lib: use prefix bit length macros\n"
    },
    {
      "commit": "23be94ea00fadace0007b6ffa6c9107124249e91",
      "tree": "40f161dfc675f1129f50f456c96151b9af56757b",
      "parents": [
        "f63f06da2e7be6b17c72dd6110aae179f42f3700"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 06 16:07:39 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 06 16:19:36 2012 +0000"
      },
      "message": "lib/if: trivial, fix rarely used if debug function to print everything\n\n* if.c: (if_dump) loop that doesn\u0027t do anything, wants to be\n  before the zlog of what it\u0027s meant to print out so all the connected\n  addresses get printed out. Trival: just a debug function\n"
    },
    {
      "commit": "f63f06da2e7be6b17c72dd6110aae179f42f3700",
      "tree": "a36b625a9ea06d0720a240276ed1b8af33193ed7",
      "parents": [
        "651e70d7f419ee7af75113f80e688c0100e9cff5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Apr 08 12:44:43 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 06 16:18:18 2012 +0000"
      },
      "message": "general: remove inline qualifiers and move in-header functions to objects\n\n* (general) Move functions in headers into files, to be compiled into\n  shared object files. Remove inline qualifier from functions. Let the\n  compiler do the work.\n"
    },
    {
      "commit": "664711c1f4cc218073783ff6ce362093debd7b53",
      "tree": "5566b0c8b9d22de55772717ad6c701ea85b6241e",
      "parents": [
        "6fd16207fee6d4d09f29ed7ecf26303a7220e473"
      ],
      "author": {
        "name": "Ulrich Weber",
        "email": "ulrich.weber@sophos.com",
        "time": "Wed Dec 21 02:24:11 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:13:28 2012 +0400"
      },
      "message": "lib: fix some strtoul() use cases\n\n...otherwise 4294967295 is not a valid value on 32bit systems\n"
    },
    {
      "commit": "fe40bfa2e1b913e24d6b8374fd83a19d00ad7c1c",
      "tree": "a804e85ac21df3fa613be8fed54f2c6cff830459",
      "parents": [
        "733cd9e5792648de50da3c00805aacb51cb27048"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 18 15:40:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:54 2012 +0400"
      },
      "message": "lib: address type-punned pointers in prefix_same()\n\nIPV4_ADDR_SAME() wasn\u0027t passed the right union member, this could cause\na bug due to strict-aliasing. IPV6_ADDR_SAME() case got its fix before\nthe error could be created by macro upgrade.\n"
    },
    {
      "commit": "733cd9e5792648de50da3c00805aacb51cb27048",
      "tree": "606ec20aa51f16b7a49fd9f5ede27893bee9ace9",
      "parents": [
        "de5ccb96023181765c9904ab40e645c397f536d6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Dec 17 19:39:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:42 2012 +0400"
      },
      "message": "bgpd: justify checks for IPv4 class D/E\n\n* lib/prefix.h\n  * IPV4_CLASS_DE(): make consistent with counterpart macros\n* bgp_packet.c\n  * bgp_open_receive(): test using macro instead of \"\u003e\u003d\"\n* bgp_route.c\n  * bgp_update_rsclient(): idem\n  * bgp_update_main(): idem\n"
    },
    {
      "commit": "2ea1ab1c30c765cd4703794fcfaf044454fb533c",
      "tree": "650e97a5a9e8cc1fb8666ff6ce87647df3e0e604",
      "parents": [
        "2654e43ca2eaa8d93268c9ec85ac2dd968e5fb94"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Sun Dec 11 18:48:47 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:24 2012 +0400"
      },
      "message": "zebra: ZEBRA_HELLO and mopping up routes (BZ#448)\n\nZEBRA_HELLO message is used by routing daemons to inform zebra\nwhat type of routes daemon will be announcing to zebra. Also\nzebra uses route_type_oaths array to track which daemon announces\nwhich protocol. Zebra mops up routes if daemon didn\u0027t for some\nreason.\n"
    },
    {
      "commit": "2654e43ca2eaa8d93268c9ec85ac2dd968e5fb94",
      "tree": "db36db2373e4cff83f6f7284aa8822ce5083dea6",
      "parents": [
        "d171bf58ef12ace43d48565e6870722dece1e6ed"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Dec 16 16:25:02 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:36:58 2012 +0400"
      },
      "message": "lib: fix type-punning in ip_masklen()\n\nip_masklen() was likely to return incorrect results after being compiled\nwith -fstrict-aliasing (-O2, -O3, -Os)\n"
    },
    {
      "commit": "d171bf58ef12ace43d48565e6870722dece1e6ed",
      "tree": "2cdd66f99933f4e0f0d175ce31599cbb6cbb981f",
      "parents": [
        "8c7f49d27767886b3706dfca11c1e13abeab7c63"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 04 23:21:55 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:23:24 2012 +0400"
      },
      "message": "lib: optimize ip_masklen()\n\nThe new implementation makes use of a 64KB mapping table, which makes it\npossible to compute masklen faster and with constant execution time. The\nmap also allows for additional version of the function, which can detect\nerrors in input argument.\n\nThe previous implementation had a variable cost of execution, which\ndepended on masklen in a non-linear manner, and at its worst (/31) was\n4 times slower, than the new implementation. The only case of old\nfunction just slightly outperforming the new one is /0, which is of\nlittle practical interest.\n"
    },
    {
      "commit": "8c7f49d27767886b3706dfca11c1e13abeab7c63",
      "tree": "6a0b18574e1ac20d0402908913e0700f6799a02f",
      "parents": [
        "223da1a912305f2cac6f72c3b480ce103a25d7d6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jan 01 16:33:12 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jan 01 16:37:45 2012 +0400"
      },
      "message": "Revert \"lib: optimize apply_mask_ipv6()\"\n\nExperience with IPv4 counterpart of this function suggests, that\nthis way of type-punning is likely to cause errors.\n"
    },
    {
      "commit": "9206f9ecd5526778bf449bbb12f056d681d3b040",
      "tree": "cd11853fe47a30bb2a28838f6ad8f8d49300b4fa",
      "parents": [
        "b48cebbba0dc01ad7d1fbd7cbcc39a11e1ae972d"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Sun Dec 18 19:43:40 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 18 20:21:21 2011 +0400"
      },
      "message": "fix set never used warnings\n\n(This patch was modified to leave calls to stream_getl() in place, they\nare necessary for the stream\u0027s internal pointer to advance to the\ncorrect position. -- Denis)\n\nSigned-off-by: Denis Ovsienko \u003cinfrastation@yandex.ru\u003e\n\nFix gcc warnings about varables that are set but never used.\n\n* bgpd/bgp_attr.c\n  * cluster_unintern(): ret\n  * transit_unintern(): ret\n  * bgp_attr_default_intern(): attre\n  * bgp_mp_reach_parse(): rd_high, rd_low\n* bgpd/bgp_route.c\n  * bgp_announce_check_rsclient(): bgp\n* bgpd/bgp_zebra.c\n  * zebra_read_ipv4(): ifindex\n  * zebra_read_ipv6(): ifindex\n* bgpd/bgpd.c\n  * bgp_config_write_peer(): filter\n* lib/distribute.c\n  * distribute_list_all(): dist\n  * distribute_list(): dist\n  * distribute_list_prefix_all(): dist\n  * distribute_list_prefix(): dist\n* lib/if_rmap.c\n  * if_rmap(): if_rmap\n* lib/vty.c\n  * vty_accept(): vty\n* lib/zclient.c\n  * zclient_read(): ret\n* zebra/irdp_interface.c\n  * if_group(): zi\n* zebra/rt_netlink.c\n  * kernel_read(): ret, sock\n"
    },
    {
      "commit": "32ca97392057d279eeddd1aef36c1836880e8b89",
      "tree": "64aaa4d3554429a613cf02a84412e2007f793819",
      "parents": [
        "caff7905e2d28e4d5e25c0a4ffacbb22e28a7121"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Oct 18 22:02:52 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:30:49 2011 +0400"
      },
      "message": "lib: optimize apply_mask_ipv6()\n"
    },
    {
      "commit": "caff7905e2d28e4d5e25c0a4ffacbb22e28a7121",
      "tree": "f760ccc091c5636d4c2fe8a23d2f6571323272f3",
      "parents": [
        "21f569e37d62e3c1de6e41a4e5667c0e28279bb8"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Oct 18 18:33:53 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:30:45 2011 +0400"
      },
      "message": "lib: optimize apply_mask_ipv4()\n"
    },
    {
      "commit": "21f569e37d62e3c1de6e41a4e5667c0e28279bb8",
      "tree": "c68c14d1d069ce03147133887764d9a7664f1d2b",
      "parents": [
        "051954f574b9c26458518a7029aeed118f0da620"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 21:11:10 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:30:39 2011 +0400"
      },
      "message": "lib: make masklen2ip6() safer and faster\n"
    },
    {
      "commit": "051954f574b9c26458518a7029aeed118f0da620",
      "tree": "1242bbe347bacf918be149f7bb743466c0c61f74",
      "parents": [
        "9663386f16e6285a322747514527fdf1d19788e4"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Oct 11 15:17:45 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:30:29 2011 +0400"
      },
      "message": "lib: fix endianness of masklen2ip()\n"
    },
    {
      "commit": "9663386f16e6285a322747514527fdf1d19788e4",
      "tree": "3853168faeff0a571727f4bf2bae44cbbe5479f8",
      "parents": [
        "5031ed1347191ee3e0767cfa44e7047c36d37bd1"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Oct 08 18:15:21 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:30:17 2011 +0400"
      },
      "message": "lib: make masklen2ip() safer and faster\n"
    },
    {
      "commit": "0ead5c183c36b36c8545ef8b04b778f5238a5db9",
      "tree": "443e8b019b3440f2d810189f2bab098c44307363",
      "parents": [
        "ca0512692156d5bbb902523d2f123fc89dbec1ab"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Oct 14 20:56:19 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:25:06 2011 +0400"
      },
      "message": "lib: spelling\n"
    },
    {
      "commit": "ca0512692156d5bbb902523d2f123fc89dbec1ab",
      "tree": "6dd0206cb175c3e790023f9e5d5d755b57181b0d",
      "parents": [
        "e0ca5fde7be5b5ce90dae78c2477e8245aecb8e9"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Sun Oct 04 16:21:49 2009 +0200"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:23:38 2011 +0400"
      },
      "message": "lib: add sockopt helper for setting IPV6_V6ONLY and use it\n\ngetaddrinfo returns a list of socket parameters for listening. it\nwill contain both IPv4 and IPv6 listening sockets. unless we use\nIPV6_V6ONLY on the IPv6 ones, only the socket listed first will\nwork. if the IPv4 one came first, the IPv6 one would get an\n\"Address in use\" error.\n\nthis functionality was already present for bgpd and its listening\nsockets. as it is needed for vtys as well, make it a common helper.\n\nConflicts:\n\n\tlib/sockunion.c\n"
    },
    {
      "commit": "e0ca5fde7be5b5ce90dae78c2477e8245aecb8e9",
      "tree": "0e0b32ddbed4a84a3b2de9dd7217165cb81f52fa",
      "parents": [
        "ebf08631cad8a420fc6bfb7c45af5496dc11023e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed Sep 16 01:52:42 2009 +0200"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:13:17 2011 +0400"
      },
      "message": "lib: put route_types.txt to real use\n\nthis replaces most occurences of routing protocol lists by preprocessor\ndefines from route_types.h. the latter is autogenerated from\nroute_types.txt by a perl script (previously awk). adding a routing\nprotocol now is mostly a matter of changing route_types.txt and log.c.\n\nConflicts:\n\n\tlib/route_types.awk\n"
    },
    {
      "commit": "05e54ee3df973194f2a00e3ea0b1da7bebc71fd6",
      "tree": "c07e2bbad0c55fe03eb2975b98f121de6ae55707",
      "parents": [
        "ad8d4802a3078de694539fa9bae12322fc82042f"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Dec 03 17:45:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:27:01 2011 +0400"
      },
      "message": "build: delete .cvsignore files\n"
    },
    {
      "commit": "3414d03545205eda9fb47890e01b780485a613c6",
      "tree": "cee18b7543db0e84c41446c6f1b55a484da14374",
      "parents": [
        "b51146856e660bcec723f535c17dc1c38b2f6efc"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Wed Nov 30 21:03:44 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:26:45 2011 +0400"
      },
      "message": "lib: clearing zclient.c for some cases of building\n\nlib/zclient.c: using of HAVE_TCP_ZEBRA in zclient_socket_*\ndefinitions extended by else clause.\n"
    },
    {
      "commit": "b51146856e660bcec723f535c17dc1c38b2f6efc",
      "tree": "8f501c98b3714e1d5ed381bd4d82fece4106aa8c",
      "parents": [
        "2f658673fa477b58ed38caf94c156c95948de382"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Fri Nov 25 18:51:48 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:26:28 2011 +0400"
      },
      "message": "quagga: option \"-z\" (\"--socket \u003cpath\u003e\") added\n\nAll daemons modified to support custom path to zserv\nsocket.\n\nlib: generalize a zclient connection\n\nzclient_socket_connect added. zclient_socket and\nzclient_socket_un were hidden under static expression.\n\"zclient_serv_path_set\" modified.\n"
    },
    {
      "commit": "004b1238a21b9b6c28640f37213dc85f0da39abe",
      "tree": "ba53bb8efe76832ece8fd0545d50f2ddee82f2d5",
      "parents": [
        "3c14ebb0810e73ad899ae45e5fb2758153057e0e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 07 00:55:15 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 07 01:31:16 2011 +0400"
      },
      "message": "lib: fix SMUX compiler warnings\n\nMake progname a string, and cast when calling asn1.\nRemove variable set but never used.\n"
    },
    {
      "commit": "3c14ebb0810e73ad899ae45e5fb2758153057e0e",
      "tree": "7a96a4bb8b2b276ee4458871c28c3b97c64d29a6",
      "parents": [
        "c143c38bc707194d52aec544e62e5485c6c4bc08"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 07 01:29:49 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 07 01:29:49 2011 +0400"
      },
      "message": "lib: fix compile warnings from set-never-used\n\nThe if_dump code had empty loop, that caused set-never-used warning.\n"
    },
    {
      "commit": "46901400a3401a4a6caa40435241b4546bb2a5c5",
      "tree": "797a251402d8b288835078ee2da4228dfc319d53",
      "parents": [
        "075e12f57d6c0b115cd177c7b244d9810460e3ff"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 17:19:09 2009 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 07 01:23:48 2011 +0400"
      },
      "message": "vty_serv_sock_family unused\n\nIf the vty_serv_sock_addrinfo is being used, then vty_serv_sock_family\nis unsed. Fix by adjusting ifdef/else/endif\n"
    },
    {
      "commit": "b24b19f719fdd9c3d61a0c93552cd64d832d964c",
      "tree": "f46e5b9f02f311c45f9c78e096ba4fa7102f0fc8",
      "parents": [
        "6a2e0f36b103386e57dbe3a6ee4716e809111198"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Dec 06 14:09:18 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 06 15:02:44 2011 +0400"
      },
      "message": "lib: fix memory leak on connect() failure\n\nChange sockunion_log() to not use strdup(). This fixes a small memory\nleak that occurs on every failed connect(), and is simpler/cleaner.\n"
    },
    {
      "commit": "6a2e0f36b103386e57dbe3a6ee4716e809111198",
      "tree": "2cfdd15813caa8b83ea3b98731a6f7a92db7e9c5",
      "parents": [
        "ce0af6ff5a4f200035ed4134da72a67f49a21dd6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Dec 06 14:04:12 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 06 15:02:34 2011 +0400"
      },
      "message": "lib: call filter delete hook before freeing access list\n\nThe delete_hook was being run after calling access list delete function.\nThis would cause ospf to dereference a NULL, in ospf_filter_update\nbecause \u0027access-\u003ename\u0027 was already freed.\n\nSee also:\n    https://bugzilla.vyatta.com/show_bug.cgi?id\u003d7654\n"
    },
    {
      "commit": "17e52061bacec93e84324b23382e5ec61e1f16d0",
      "tree": "bae9f3f8f8e89b531e5df167d33427627ea709fc",
      "parents": [
        "681b84e8f50a09ff871d9e6536e8d8afb115ce13"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Feb 02 20:16:35 2010 +0100"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 19:41:51 2011 +0400"
      },
      "message": "lib: prefix2sockunion, prefix_common_bits helper functions\n\nprefix2sockunion converts a struct prefix* to a union sockunion *;\nprefix_common_bits counts the number of common bits in the prefix\u0027s\naddress part.\n"
    },
    {
      "commit": "ad61af67b548fa787d4c1da0024ba30f8c3b19c8",
      "tree": "3d0cdb58217702b51b9bdac6e8b11e4a68d0b54d",
      "parents": [
        "6d0732c8abad7ace509d033a41814ea03a3a1b16"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Oct 12 15:07:34 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 18:59:26 2011 +0400"
      },
      "message": "lib: compile even without IPV6_TCLASS\n"
    },
    {
      "commit": "6d0732c8abad7ace509d033a41814ea03a3a1b16",
      "tree": "d20c537d0e16cb5245047d8ecd9990201a4fb3b6",
      "parents": [
        "a5b228b3792937c93b589938a2545b9311b7938e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Sep 28 14:23:35 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 18:59:19 2011 +0400"
      },
      "message": "IPv6 transport class suppport\n\nIPv6 supports the same concept of differentiated service for routing\nprotocols as IPv4, but like too many things, the standards committee\ndecided that having two names for the same thing wasn\u0027t good enough and\nintroduced a third more generic term transport class.\n\nThe socket option to set transport class works the same as IPv4, but the\narguments are different.\n\n* lib/sockopt.[ch]\n  * setsockopt_ipv6_tclass(): new function\n* bgpd/bgp_network.c\n  * bgp_connect(): set socket option\n  * bgp_listener(): set socket option\n* ospf6d/ospf6_network.c\n  * ospf6_set_transport_class(): new function\n  * ospf6_serv_sock(): set socket option\n* ripngd/ripngd.c\n  * ripng_make_socket(): set socket option\n"
    },
    {
      "commit": "bc3443ebf032b5fcc9e0ccb94641e4e899cd17d8",
      "tree": "06d6c8b912958c989ba59e45349e17a3f8d973ac",
      "parents": [
        "0a28130d35bbba47faf47bf9451ba0eb195fcbb7"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 22 12:48:14 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Sep 30 01:24:35 2011 +0400"
      },
      "message": "bgpd: improve NEXT_HOP attribute checks (BZ#680)\n\n* lib/prefix.h\n  * IPV4_CLASS_DE(): new helper macro\n* bgp_attr.c\n  * bgp_attr_nexthop(): add check for \"partial\" bit, refresh flag error\n    reporting, explain meaning of RFC4271 section 6.3 and implement it\n\nConflicts:\n\n\tbgpd/bgp_attr.c\n"
    },
    {
      "commit": "0a28130d35bbba47faf47bf9451ba0eb195fcbb7",
      "tree": "94bcda95ba12a50a81aa7ea893d809ba237b2262",
      "parents": [
        "42e6d745d105018a9469dabad65bd4cf942dcf3c"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jul 17 19:33:21 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 29 22:19:08 2011 +0400"
      },
      "message": "bgpd: rename SAFI 3 according to RFC4760\n\n- SAFI value 3 is reserved.  It was assigned by RFC 2858 for a use\n  that was never fully implemented, so it is deprecated by this\n  document.\n\n* zebra.h: rename macro\n* bgp_fsm.c: (bgp_graceful_restart_timer_expire,\n  bgp_graceful_stale_timer_expire, bgp_stop, bgp_establish): update\n* bgpd.c: (peer_nsf_stop): update\n* bgp_open.c: (bgp_capability_vty_out): SAFI 3 isn\u0027t a recognized case\n  any more\n"
    },
    {
      "commit": "51abba509a0997f05427a8acbe74dd07d8d6026e",
      "tree": "c9f19fc4eaf2aa01d96bde18b9ec09f1b92724e4",
      "parents": [
        "eda3529e9cf163ccbcf47c889b16fd707d2aed76"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Wed Sep 21 17:41:41 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:45:53 2011 +0400"
      },
      "message": "lib: provide more information in case of failed LOOKUP.\n\n* log.[ch]\n  * mes_lookup: add a parameter with the name of the message list, print\n    the name in case of failure.\n  * LOOKUP macro: pass the name of the message list.\n"
    }
  ],
  "next": "10d04cdb4198b69073ea0cdd4c26a64d6697b33e"
}
