)]}'
{
  "log": [
    {
      "commit": "f1fc327c7eb00634d2c2b08c2a6f6e44a626ef04",
      "tree": "4a14fc6fd695e76a77db703880fb300e079eb8cc",
      "parents": [
        "1416293f9d8f09cb792ce0ff9b734bff71697909"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 13 12:44:50 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 14 14:31:06 2015 +0200"
      },
      "message": "lib: assert(0) still needs a return\n\nassert(0) is not guaranteed to not return since assert() in general can\nbe optimised out when building without debug / with optimisation.  This\nbreaks the build in clang, which warns/errors about the missing return.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1416293f9d8f09cb792ce0ff9b734bff71697909",
      "tree": "32f87dd85aa3b0d58fb45bbef60591ee7c43dce8",
      "parents": [
        "c9c06d0d8cbc766374c43328e91b7a87f93e9c62"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 12 17:18:04 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 14 14:26:30 2015 +0200"
      },
      "message": "lib: fix \"reduce strcmp in CLI\" fallout (10bac801)\n\nIn \"lib/cli: reduce strcmp in CLI hot paths\", I failed to notice that\nCMD_VARIABLE as a boolean test covers a superset of the other types of\nvariables.  Thus, the patch broke processing of IP/IPv6/Integer range\nparameters in the CLI.\n\nFix by some reordering and introducing TERMINAL_RECORD macro (which\nmarks whether a given terminal type is a parameter) to be used in places\nwhere the check is really for all kinds of variables.\n\nReported-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nTested-by: Martin Winter \u003cmwinter@netdef.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c9c06d0d8cbc766374c43328e91b7a87f93e9c62",
      "tree": "7079c5e07ab0941949373d901bbd672066b9e4c6",
      "parents": [
        "e66cbd10d52a79fd61acab9d615683eebdbf1df5"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Apr 13 10:21:35 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 15:07:45 2015 +0200"
      },
      "message": "lib: straighten out ORF prefix list support\n\nBGP ORF prefix lists are in a separate namespace; this was previously\nhooked up with a special-purpose AFI value.  This is a little kludgy for\nextension, hence this splits it off.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "e66cbd10d52a79fd61acab9d615683eebdbf1df5",
      "tree": "e81be2319e7b2c485354283f025e090bb56c8754",
      "parents": [
        "4584c239201037648abf1a6615186f9cdeb86b23"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Apr 13 10:21:34 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 15:06:22 2015 +0200"
      },
      "message": "lib: hide internal prefix list structures\n\nThese are about to be touched and there\u0027s no point in other code\ntouching into prefix list\u0027s internas.  Add some isolation.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "10bac80195cf5a781da6e4415e6580fd7080f734",
      "tree": "440ed474bc54a2a5d355369e928b4bd8bc315e97",
      "parents": [
        "81b139bdd530adda045d22a4daf0054b89703dab"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 11:10:20 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 11:10:42 2015 +0200"
      },
      "message": "lib/cli: reduce strcmp in CLI hot paths\n\nEr, no idea how anyone could ever have thought that it would be a good\nidea to have a zillion of strcmp() calls in the CLI\u0027s active paths, just\nto compare against things like \"A.B.C.D\".\n\nReduces 40k prefix list load time from 1.65s to 1.23s (1.34:1).\n\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n[v2: killed CMDS_* macros]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "81b139bdd530adda045d22a4daf0054b89703dab",
      "tree": "15a73adc88a1d3282ae06f572feae0fca4695377",
      "parents": [
        "b40e178af12570467f0116d6b1684cb1b961e407"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:43:01 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 09:39:58 2015 +0200"
      },
      "message": "lib: constify sockunion api\n\nAdd const to read-only api calls.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c0bedebfe9ca1a1ded02f1f481762dd41defa63e",
      "tree": "9c040f71733fb7509c03457bc146373e65e95536",
      "parents": [
        "3a7e83c2387885075c9ecf1912dd6c9399c6947a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 10:00:43 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:33 2015 +0200"
      },
      "message": "build: add --enable-werror\n\nThis allows enabling -Werror in a consistent way.  Note that this is\ndifferent from just specifiying it in CFLAGS, since that would either\nbreak configure tests (if done on ./configure), or would override\nconfigure\u0027s CFLAGS (if done on make).\n\nUsing --enable-werror instead provides a new WERROR variable that is\nadditionally used during make with a consistent set of warning flags.\n\nThe tests/ directory is exempt.  (Rationale being, better to have more\ntests than pedantically complain about them.)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "dfee58f1d41a2e36c7f5f38a3ef5712224131824",
      "tree": "10e588443180a85a6ac019db1ded6b1144f32a7c",
      "parents": [
        "6769f43de9d595b935f2ebf1cae1428e1d1a3a5f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Mar 04 06:44:57 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:10 2015 +0200"
      },
      "message": "snmp: fix warnings\n\nbatch-fix all warnings that come up when enabling AgentX SNMP support.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a91a3bac14976c04bf22b20c7e4bada787ec79b1",
      "tree": "1c16b21c785b22c4f7c093e80dcf2c2af20243d1",
      "parents": [
        "3cf4053a9e832408fad33a8246ecbd189f23a956"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:06:51 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:01 2015 +0200"
      },
      "message": "vtysh: don\u0027t use \u0027\\0\u0027 as NULL\n\nfor some reason, the vty code was using \u0027\\0\u0027 in place of NULL.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "71f55f38cb3dd804176e7f382f52b75ddcd437de",
      "tree": "59f028f69361edb116ffeb862c6ead5a7cfb7d5d",
      "parents": [
        "fd8f6ebb4c6b9e5364b98d2b5fd345d1dcc08824"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:08:05 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:48 2015 +0200"
      },
      "message": "lib, vtysh: reduce unneccessary C extension usage\n\nWe\u0027re only supporting GCC, Clang and ICC; but there\u0027s no reason to use\nnonstandard C constructs if they don\u0027t actually provide any benefit.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fd8f6ebb4c6b9e5364b98d2b5fd345d1dcc08824",
      "tree": "1976b8f404ed9293af119fc733117607b5c372ec",
      "parents": [
        "81a4e85442e2011a47bbb25e8301dc40ec4ed9b6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:57:02 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:44 2015 +0200"
      },
      "message": "lib: use const consistently for zserv path\n\nThe global variable is missing its const, but the accessor function has\na meaningless extra const in exchange...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "81a4e85442e2011a47bbb25e8301dc40ec4ed9b6",
      "tree": "b98cf9014b0c6cd0abfddfc628968b8a14a75540",
      "parents": [
        "c7879ea62fb38999a86ca9cbabbdeca18785e135"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:56:48 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:41 2015 +0200"
      },
      "message": "lib: silence type range warning in macro\n\nWhile splitting up the CLI input macro is a bit annoying, this seems to\nbe the least annoying way to get rid of the \"\u003c 0\" comparison warning for\nunsigned long.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ab90fc04a57b7b1d93ccddb8c9fbbf339a7ffc4c",
      "tree": "7c75add9b86f59da16d636e963402494dfbf6ecd",
      "parents": [
        "388f8857eb81ef75014060976776523a58a99389"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:07:25 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "*: add/cleanup initialisers\n\nThere were some (inconsequential) warnings about uninitialised use of\nvariables.  Also, in one case, sub-structs were mixed in initialisation,\nwhich doesn\u0027t quite work as intended.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "388f8857eb81ef75014060976776523a58a99389",
      "tree": "d425f43437cc937f4cd415d3170c8d6c8f6bf33c",
      "parents": [
        "21401f3215be26dcb0f787105f5907745498e966"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:55:54 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "*: add missing includes\n\nSome places, particularly headers, were spewing warnings since they\ndon\u0027t include neccessary other headers to get struct/enum definitions.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b7d5021bfa161f797cbfb1e92bf5b94327fb1b71",
      "tree": "37f3c702812e7fe9dec6ef33925df331d64e02c7",
      "parents": [
        "eed3c48d3a7d2dae2cae2f2f250deffb843754a6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:53:18 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:47 2015 +0200"
      },
      "message": "*: remove stray extra semicolons\n\nSome places had extra semicolons where none belong.  Remove them.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "eed3c48d3a7d2dae2cae2f2f250deffb843754a6",
      "tree": "07b2252438225065024d4a534eddf0e86c9b87a4",
      "parents": [
        "ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:51:53 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:31 2015 +0200"
      },
      "message": "*: use void * for printing pointers\n\nOn higher warning levels, compilers expect %p printf arguments to be\nvoid *.  Since format string / argument warnings can be useful\notherwise, let\u0027s get rid of this noise by sprinkling casts to void *\nover printf calls.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5cd0e5c659d0ae7840748e83cd9f340568fa4204",
      "tree": "0d5a4fbd02c83bd71d6c1cd6e833609a00345559",
      "parents": [
        "d8d54ab78d915921a88a8707426e307aed3c323e"
      ],
      "author": {
        "name": "Brian Bennett",
        "email": "brian.bennett@joyent.com",
        "time": "Tue Feb 17 23:24:15 2015 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Mar 04 07:31:13 2015 +0100"
      },
      "message": "lib: Fix POSIX capabilities on SunOS platforms\n\nWhen using POSIX capabilities on SunOS the capabilities are too\nrestricitve resulting in quagga processes not being able to read their\nown config files. Credit goes to Oracle where this patch was originally\nauthored and included in OpenSolaris.\n\nlib/privs.c: Include additional capabilities, better checking of\n    missing capabilities.\n\nFixes: #820\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7abd87529499e5d76435213e2590838c5e320a9a",
      "tree": "fe2a3107483104d92aa092156fe5584069c19736",
      "parents": [
        "85c63b844df4a295a64f37573e0ba08a7cc63659"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 22 10:43:29 2014 -0800"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:45 2015 +0100"
      },
      "message": "build: track config args\n\nRecord the ./configure arguments used and make them user-visible.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "237aac56960575f6ad2451ba2796d94bd5ae4b33",
      "tree": "f23c49fa32bc6b706bd5f37a9a3a45ce27adf15d",
      "parents": [
        "b6fa76098d127f5641a7dda0dee21f06ca167edb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 22:23:10 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:14 2015 +0100"
      },
      "message": "build: get rid of INCLUDES, use AM_CPPFLAGS\n\nINCLUDES in configure.ac was not used at all, and INCLUDES in\nMakefile.am is supposed to be AM_CPPFLAGS these days.\n\nReduces warnings spewed during bootstrap/autoreconf.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "6d6df30386423518b5daef93c2f047b4140f85f4",
      "tree": "7da3226d3276e019c49a4b4a673911a85297ecc7",
      "parents": [
        "0f048b90b5d6e4bd185913945b68dd254126eb9f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:12:37 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:18:49 2015 +0100"
      },
      "message": "build: remove INRIA, NRL and MUSICA IPv6 quirks\n\nValar dohaeris.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "0f048b90b5d6e4bd185913945b68dd254126eb9f",
      "tree": "69ffaaf5925bebb7cc1a8e79179bee99bfde0129",
      "parents": [
        "2e5ca49758543cde69d98f4a6a7b39486e88311d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:01:32 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:18:47 2015 +0100"
      },
      "message": "build: remove AIX, NEC EWS and IRIX\n\nValar morghulis.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "d8410a0242ab055b96708c5b33358916330bc85a",
      "tree": "5329d38c6e0a5be3517a476fb8a9c8ffa54213e9",
      "parents": [
        "05a49cea19d861ceec67ce6402264d353bb3b290"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Sep 23 16:14:49 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:01 2015 +0100"
      },
      "message": "pimd: Remove non-standard copyright line.\n"
    },
    {
      "commit": "05a49cea19d861ceec67ce6402264d353bb3b290",
      "tree": "7c3dad428c84fa695f79347c6473c033db7647de",
      "parents": [
        "8f4a59aaffd90ac820601fdf69accc8f6c953a1c"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Sep 23 16:14:27 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:01 2015 +0100"
      },
      "message": "zebra: mrib: Remove non-standard copyright line.\n"
    },
    {
      "commit": "8f4a59aaffd90ac820601fdf69accc8f6c953a1c",
      "tree": "2a6650312962c56a0388dbb3f0d06f38663f51df",
      "parents": [
        "1a9352a7487531578a0db9ca86c2647f8e304ca4"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Sep 23 15:51:11 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:00 2015 +0100"
      },
      "message": "pimd: Revert accidental removal of show_memory_isis_cmd().\n"
    },
    {
      "commit": "1a9352a7487531578a0db9ca86c2647f8e304ca4",
      "tree": "6976654d72a38f91d0f26e57d981f57c18a552fd",
      "parents": [
        "ea537be5278398cd8c32f8046e4789e613420916"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Sep 23 14:33:34 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:00 2015 +0100"
      },
      "message": "zclient: Revert lib export of zclient_socket()/zclient_socket_un().\n"
    },
    {
      "commit": "74b4fad93e89df358441b1b3b23282aaca8c80b8",
      "tree": "1baaf3d2173cb33fa44c3dae4b45d0720479367d",
      "parents": [
        "3d62667ab0e8e7ee6e17e883b144e25ee84c4545"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Sep 18 12:06:53 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:00 2015 +0100"
      },
      "message": "pimd: Remove motd tweaking.\n"
    },
    {
      "commit": "1f298949bea9e58623eb81f245491dcdb1df8c59",
      "tree": "43f99443889cd692a3f6c8adfc40328a868efb67",
      "parents": [
        "7cb0d4a384b4964cc53b61549ffdef37fb0d76c5"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Aug 21 15:47:28 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:59 2015 +0100"
      },
      "message": "pimd: -z command-line switch to specify zebra socket path.\n"
    },
    {
      "commit": "f62a19cc281276607b164c99e672d536a012514d",
      "tree": "f6a504fcf1adf31c4d3c32acf984dbc51faa3357",
      "parents": [
        "5c55a496fae5ab089c5009bc4c03084fdeb51f55"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Jul 03 14:53:44 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:57 2015 +0100"
      },
      "message": "zebra: Export zclient_socket_un().\n"
    },
    {
      "commit": "ff57d3653efe4a1428147204b54cacf3651c4dd0",
      "tree": "0b9ae54ba0da0f9a0391830445751495a248f11b",
      "parents": [
        "829198800217fe321faa397d21e2d8f99fcaf0dd"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Wed Jun 25 15:54:03 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:56 2015 +0100"
      },
      "message": "pimd: Fixes to build against current quagga.\n"
    },
    {
      "commit": "55b12ff4602ae802281f76e4cda681104a6cf89d",
      "tree": "f0acf5b33be5441f93f085cd93672b569d4ecdea",
      "parents": [
        "fa2e1ee255c6a3be76f74b07cb441c34d4b2583f"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Apr 15 15:58:30 2010 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:53 2015 +0100"
      },
      "message": "[pim] PIM route type.\n"
    },
    {
      "commit": "f9e05e5f2ae7bc8352a0744d4e4b5105b60e74a4",
      "tree": "9494f4d2b84fa08b9a779e9ece9b04465572ce74",
      "parents": [
        "034bd7fe705b03ea4025478650bd3d690bda923f"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Mar 11 11:17:33 2010 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:53 2015 +0100"
      },
      "message": "[pim] Version up to 0.161\n"
    },
    {
      "commit": "42e3078a1e4a0bbb033351ad5a65729a17c1fa19",
      "tree": "8b9a3ae347e5a03a3d938a905fc54c1ad365ef30",
      "parents": [
        "3e92c456b01bb9364a0e68e0124c9ff36edc0b4b"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Wed Nov 18 17:19:43 2009 -0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:52 2015 +0100"
      },
      "message": "[pim] Clean-up\n"
    },
    {
      "commit": "824adbea2d8d78f626f32d5b7900121fdebf6937",
      "tree": "658c888eaa097651c10261e31f78bd97be26dd19",
      "parents": [
        "96f91aefc06477e73d0e93008b51fc6e87fa2bc4"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Oct 08 09:16:27 2009 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:51 2015 +0100"
      },
      "message": "[pim] Hooks for ssmpingd support\n"
    },
    {
      "commit": "871dbcfede60a8d2d286728bcbd88f27c2035b87",
      "tree": "f3188f3ab1c4856febf70647a32f6d854668aa50",
      "parents": [
        "b162ab753e70328cb6815e58b4bc5b03e9dd4f42"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Aug 11 15:43:05 2009 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:49 2015 +0100"
      },
      "message": "[pim] Initial pim 0.155\n"
    },
    {
      "commit": "e832c34fd19aa6b2df7c28e78f07617095cf136e",
      "tree": "493f820738828b863d4c90bad01c4c1026d45133",
      "parents": [
        "ca2b105f3bdd8859117756dc8d8c2406e28af28b"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 27 20:24:15 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 30 01:12:54 2015 +0100"
      },
      "message": "zebra: mark multicast commands experimental\n\ndepending on feedback from actually having these commands in a released\nversion, we may want to adjust them.  Thus, mark them as experimental so\nusers are aware of this.\n\nCc: Everton Marques \u003ceverton.marques@gmail.com\u003e\nCc: Balaji G \u003cbalajig81@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "be4fb4312531cdae986a83b0375dbd1e0606067e",
      "tree": "10c8f9e149ac3eafc89385badf5674c5f0eeb3e7",
      "parents": [
        "a59b6152bbcd2ff6734872ecbffbc9c43701e1a8"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Jul 01 15:15:52 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jan 22 19:03:45 2015 +0100"
      },
      "message": "zebra: add ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB\n\nThis adds a new zapi call \"ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB\" performing a\nMulticast RPF lookup for a given source.  Details of the lookup\nbehaviour are left to the zebra side of things.\n\nNote: this is non-reactive, as in, only delivers a snapshot of the state\nat a particular point in time.  There\u0027s no push notification of changes\nhappening to the RIB.\n\nThis combines the following 3 original patches:\n- zebra: add zsend_ipv4_nexthop_lookup_mrib()\n- zserv: Query mrib (SAFI_MULTICAST).\n- zebra: Cleanups to zebra_rib.\n\nCc: Everton Marques \u003ceverton.marques@gmail.com\u003e\nCc: Balaji G \u003cbalajig81@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1c6db0d2da34044ddfb42665fda8a3387ecc451d",
      "tree": "db97535c0d8c97bbecde8f2141b12cc53fb8e556",
      "parents": [
        "daefeb8755e194dd19a5f1910bc78d13c8147efb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Dec 12 21:35:28 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 06 19:53:30 2015 +0100"
      },
      "message": "lib: don\u0027t create circular lists (fixes 6d83113)\n\nLISTNODE_DETACH doesn\u0027t clear out the node, and LISTNODE_ATTACH doesn\u0027t\nset -\u003enext (since it assumes a fresh/zeroed listnode).  As a result, the\nnew listnode_move_to_tail() created a nice circular list, in turn\ncrashing ospfd in ospf_write() later.\n\nReported-by: Martin Winter \u003cmwinter@netdef.org\u003e\nFixes: 6d83113 (\"ospfd: Tweak previous iface RR write patch to avoid free/malloc \u0026 redundant log\")\nCc: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\n"
    },
    {
      "commit": "6d831139569dbee69acc631361db917e2c47feeb",
      "tree": "ba38e9354ffcc98245b03a5f50ef0e3cedb48d47",
      "parents": [
        "1c06334f51c00471b0731227384ef42dc463db54"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 16:05:15 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:47 2014 +0000"
      },
      "message": "ospfd: Tweak previous iface RR write patch to avoid free/malloc \u0026 redundant log\n\n* linklist.{c,h}: (listnode_move_to_tail) new unction to move a\n  listnode to tail of list.\n* ospf_packet.c: (ospf_write) remove debug that seemed to be mostly covered\n  by existing debug.\n  Use listnode_move_to_tail to just move the list node to the end of the\n  tail, rather than freeing the one to hand and allocing a new one.\n"
    },
    {
      "commit": "50f38b3500a6af6e1b0d1389d65c62d70c41e8c2",
      "tree": "0525b14ce3c53f891cd7f5a00fcf954f4893a99f",
      "parents": [
        "88d37b902bc8127379d3293b9671aa6a11479c23"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:53:28 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:09 2014 +0000"
      },
      "message": "Compute and display SPF execution statistics\n\nDetailed SPF statistics, all around time spent executing various pieces of SPF\nsuch as the SPF algorithm itself, installing routes, pruning unreachable networks\netc.\n\nReason codes for firing up SPF are:\nR - Router LSA, N - Network LSA, S - Summary LSA, ABR - ABR status change,\nASBR - ASBR Status Change, AS - ASBR Summary, M - MaxAge\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "93b344f3b14390e3952ea9025ac5996ae9131148",
      "tree": "26f9f14848768bd7bc77fc28c1469b970c41e84a",
      "parents": [
        "773224404cb33b2dbd3d8d8d2572013603995ce4"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Oct 28 14:52:49 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Oct 28 14:55:09 2014 +0100"
      },
      "message": "Revert \"zebra: Set link-detect on by default\"\n\nThis reverts commit 773224404cb33b2dbd3d8d8d2572013603995ce4.\n\nThis patch is nontrivial but wasn\u0027t passed along on the mailing list;\nthis is a revert purely on procedural reasons.\n\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "773224404cb33b2dbd3d8d8d2572013603995ce4",
      "tree": "43a4c9582fd6b8befbebbc35d3980458ac0309cf",
      "parents": [
        "aed1b556cf2f55680ae09d7ad1a1f22729dea8c5"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:39:24 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 28 11:06:00 2014 +0000"
      },
      "message": "zebra: Set link-detect on by default\n\nSigned-off-by: Roopa Prabhu \u003croopa@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "3790eb0d3f0bbb24b9c6be97f547cec144ee05d1",
      "tree": "08ccf694b43a92568a1278aa28374dcd09d4b0fe",
      "parents": [
        "bdd8cd70a042473477f9144c9cedb8dde11ba2c1"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Jan 13 00:32:43 2010 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 16:08:22 2014 +0100"
      },
      "message": "stream: remove unused stream_read_unblock\n\nThe one place this was being used in BGP is now gone,\ncan remove deprecated interface.\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "f6444e4f6e1664f49f7552f894c8c94e45dd3c35",
      "tree": "fd7c0c86bf0ab3525056a37d3fce9d70e2a0d6f9",
      "parents": [
        "055086f70febc30fdfd94bb4406e9075d6934cd8"
      ],
      "author": {
        "name": "Olivier Cochard-Labbé",
        "email": "olivier@cochard.me",
        "time": "Thu Oct 09 10:28:21 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "FreeBSD has changed its SOCK_RAW for being truly raw.\n"
    },
    {
      "commit": "b166ea2dda9f04a8b75e0bf5adb7064580695f22",
      "tree": "40b9468412819c0eab55798f816f6a8e1c58a4c0",
      "parents": [
        "18f420e9f99e7f6557cf5877673cd6e71ac32192"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "joakim.tjernlund@transmode.se",
        "time": "Thu Jun 25 16:40:06 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "[lib] Add support for backtrace on more platforms\n\n* lib/sigevent.c: (program_counter) extend to support more platforms. Joint\n  effort with Paul Jakma.\n"
    },
    {
      "commit": "18f420e9f99e7f6557cf5877673cd6e71ac32192",
      "tree": "1e43af3642283cb3660332624d2c58e558fe48ad",
      "parents": [
        "16f1606382b77ac6b951ea0de15384fcbc1df73f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 16:55:46 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:01 2014 +0100"
      },
      "message": "lib/plist: Add some required parentheses, according to clang-analyzer\n"
    },
    {
      "commit": "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49",
      "tree": "bd4a8d881336a1551146725d7ae06b3e68553e4d",
      "parents": [
        "010ebbbca6396f272cc2d50d147dd922dda68213"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 14:42:23 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:32:34 2014 +0100"
      },
      "message": "Fix most compiler warnings in default GCC build.\n\nFix lots of warnings. Some const and type-pun breaks strict-aliasing\nwarnings left but much reduced.\n\n* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to\n  (struct fifo), so just use that.  Makes it clearer the beginning of\n  (struct bgp_advertise) is compatible with with (struct fifo), which seems\n  to be enough for gcc.\n  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up\n  type-punning breaks strict aliasing warnings.\n* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.\n  (bgp_route_refresh_receive) fix an interesting logic error in\n  (!ok || (ret !\u003d BLAH)) where ret is only well-defined if ok.\n* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.\n* jhash.{c,h}: Can take const on * args without adding issues \u0026 fix warnings.\n* libospf.h: LSA sequence numbers use the unsigned range of values, and\n  constants need to be set to unsigned, or it causes warnings in ospf6d.\n* md5.h: signedness of caddr_t is implementation specific, change to an\n  explicit (uint_8 *), fix sign/unsigned comparison warnings.\n* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going\n  to fly given iov_base.\n* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always\n  true for address of static variable.  Correct but pointless warning in\n  this case, but use a 2nd pointer to shut it up.\n* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2\n  different 32 bit IDs into in (struct ospf6_route), and the resulting\n  type-pun strict-alias breakage warnings this causes.  Need to use 2\n  different fields to fix that warning?\n\ngeneral:\n\n* remove unused variables, other than a few cases where they serve a\n  sufficiently useful documentary purpose (e.g.  for code that needs\n  fixing), or they\u0027re required dummies.  In those cases, try mark them as\n  unused.\n* Remove dead code that can\u0027t be reached.\n* Quite a few \u0027no ...\u0027 forms of vty commands take arguments, but do not\n  check the argument matches the command being negated.  E.g., should\n  \u0027distance X \u003cprefix\u003e\u0027 succeed if previously \u0027distance Y \u003cprefix\u003e\u0027 was set?\n  Or should it be required that the distance match the previously configured\n  distance for the prefix?\n  Ultimately, probably better to be strict about this.  However, changing\n  from slack to strict might expose problems in command aliases and tools.\n* Fix uninitialised use of variables.\n* Fix sign/unsigned comparison warnings by making signedness of types consistent.\n* Mark functions as static where their use is restricted to the same compilation\n  unit.\n* Add required headers\n* Move constants defined in headers into code.\n* remove dead, unused functions that have no debug purpose.\n"
    },
    {
      "commit": "010ebbbca6396f272cc2d50d147dd922dda68213",
      "tree": "99e92b1795d61adfa554e1cc00e998697962fcc9",
      "parents": [
        "ea55500409651b0f8fd2c8a02fdbf245acc96dd8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 16 11:53:49 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Sep 19 22:14:55 2014 +0100"
      },
      "message": "Add missing GPL headers, and copyright claims that certainly apply.\n\n* Fix (a subset of)? files with non-trivial code that are missing GPL headers.\n\n* A few copyright claims added which I am certain apply, but which I had\n  missed out on the original commits.\n\nNB: Copyright claims are not exclusive and the addition of any copyright\nclaim should not be read as implying a lack of any further claims, or\ndenying the validity of any other claims.  All those with claims of\ncopyright over any portion of Quagga are welcome to submit them, ideally as\npatches to update copyright strings in files.\n"
    },
    {
      "commit": "ea55500409651b0f8fd2c8a02fdbf245acc96dd8",
      "tree": "74f195200f595ae96363e007103e77654ace3f4d",
      "parents": [
        "d4a8607d12e1d3f655055647f1633ec154685545"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jul 28 16:36:14 2009 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Sep 19 22:14:54 2014 +0100"
      },
      "message": "lib: Improve error reporting from broken config files\n\n* command.h: (config_from_file) Add variable to interface for line\n      number reporting.\n    * command.c: (config_from_file) Set \u0026 increment \u0027line_num\u0027 while parsing.\n    * vty.c: (vty_read_file) Report parse errors in the correct order to\n      stderr, with added line numbers.\n"
    },
    {
      "commit": "615f9f18fc025757a255f936748fc1e86e922783",
      "tree": "b9cd79ef71984932f4eb5f73437f9593ad2a2604",
      "parents": [
        "3493b7731b750cbc62f00be94b624a08ccccf0b2"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 18 23:52:02 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:38:56 2014 +0200"
      },
      "message": "lib: include thread information in backtraces\n\nnow that we know what thread we\u0027re currently executing, let\u0027s add that\ninformation to SEGV / assert backtraces.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3493b7731b750cbc62f00be94b624a08ccccf0b2",
      "tree": "4ea2444ddc197001b26f0b9b6e7cc2adb2bb29d2",
      "parents": [
        "621e2aaf33d8ab73bf44b0eea3f3900135d34996"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 18 23:04:27 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:38:48 2014 +0200"
      },
      "message": "lib: unstupidify thread debug information\n\nthe library\u0027s thread scheduling functions keep track of the thread\nfunction\u0027s name, so far so good.  However, copying the compiler-provided\nconstant into a buffer inside the thread structure is plain useless.\nAlso, strip_funcname() was trying to support something that never\nhappens.\n\nInstead, let\u0027s use some bytes here to track where threads are scheduled\nfrom.  Another commit will print that information on crashes.\n\nRipping out useless stuff:  -64 bytes in the thread structure\nRe-add as const ptr:         +8 bytes\nExtra debug info:           +12 bytes\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "90444ca35e3037ed43ec695428f0ef6d82f9a320",
      "tree": "441582b4f1ee1118f6b9b696fed65a2c38064503",
      "parents": [
        "ad2f92b6b07883f6a2a26499eab1776933185960"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jul 01 16:14:05 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 18:16:28 2014 +0200"
      },
      "message": "lib: unset ZEBRA_IFA_PEER if no dst addr present (BZ#801)\n\nOn OpenBSD, carp interfaces claim to be PtP interfaces with a 0.0.0.0/0\npeer address.  We process those in zebra and try to send them to\nclients, at which point they get encoded as all-0.  The client code,\nhowever, decodes that to a NULL pointer instead of 0.0.0.0.  This later\nturns into a SEGV when CONNECTED_PREFIX sees that ZEBRA_IFA_PEER is set\nand tries to access the peer prefix.\n\nThis is a band-aid fix for stable/0.99.23, a long-term solution needs\nsome conceptual improvements on the entire thing.\n\n(The usefulness of a PtP-to-0.0.0.0/0 is a separate question;  at this\npoint dropping the peer prefix seems the least intrusive solution.)\n\nReported-by: Laurent Lavaud \u003claurent.lavaud@ladtech.fr\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "16ffb26fbbf8b3d1fee7a14eb401ecb02eed5058",
      "tree": "f1abb4a88c2677f1e405a855be200056c5c2bc4e",
      "parents": [
        "28a8cfcbc3a5cc74bb3b87981b878f8b4edc2dd6"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Jul 29 09:41:54 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:50:19 2014 +0200"
      },
      "message": "*: fix detection and usage of sys/cdefs.h\n\nThis header is non-standard (though present on many systems) and\nthere is no standard for what it should or should not define.\n\nRemove it where it is not really needed. But add also a configure\ncheck, so it can be used if available but otherwise fallback to\ndefining the needed macroes.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6b0655a25194c7c0331154edaa6124cf783e5e5e",
      "tree": "c0c7d479f2684531249668210da27a60322ba395",
      "parents": [
        "fdb913aedb5a9807ad60715e8badb4f25d57acea"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:53:35 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:58:02 2014 +0200"
      },
      "message": "*: nuke ^L (page feed)\n\nQuagga sources have inherited a slew of Page Feed (^L, \\xC) characters\nfrom ancient history.  Among other things, these break patchwork\u0027s\nXML-RPC API because \\xC is not a valid character in XML documents.\n\nNuke them from high orbit.\n\nPatches can be adapted simply by:\n\tsed -e \u0027s%^L%%\u0027 -i filename.patch\n(you can type page feeds in some environments with Ctrl-V Ctrl-L)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "224e7e515747b74dd6d3610570a64b9726a27722",
      "tree": "7e461067f11c264931c3f2a03174db434a174c58",
      "parents": [
        "d9d4ae5157207b9b8bdb167983519a7ffb860f2c"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Apr 24 06:40:33 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:31:32 2014 +0200"
      },
      "message": "lib: remove redundant and incorrect sys/fcntl.h include\n\nPOSIX defines \u003cfcntl.h\u003e, \u003csys/fcntl.h\u003e is the same thing. However,\nit should not be used as it\u0027s existence can depend on C-library\nimplementation. E.g. musl gives warning if \u003csys/fcntl.h\u003e is used.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c71e481dae11b7ae3f1ef561a989624b2ae84b6",
      "tree": "4c13b76e1b9aedc45ad9b086be972ba4999ada03",
      "parents": [
        "2c13299a05e5544a5e79c2a970256a21f488a3fa"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Jan 15 06:57:57 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:32 2014 +0200"
      },
      "message": "bgpd: efficient NLRI packing for AFs !\u003d ipv4-unicast\n\nISSUE:\n\n  Currently, for non-ipv4-unicast address families where prefixes are\n  encoded in MP_REACH/MP_UNREACH attributes, BGP ends up sending one\n  prefix per UPDATE message. This is quite inefficient. The patch\n  addresses the issue.\n\nPATCH:\n\n  We introduce a scratch buffer in the peer structure that stores the\n  MP_REACH/MP_UNREACH attributes for non-ipv4-unicast families. This\n  enables us to encode multiple prefixes. In the end, the two buffers\n  are merged to create the UPDATE packet.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n[DL: removed no longer existing bgp_packet_withdraw prototype]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b4b359a265f1b6272b4eb17c11e9c6ef9817f34b",
      "tree": "f6721202e8ee9f44ccdc54a61e4b74c6552912c0",
      "parents": [
        "8afee5c1729e56f74d27ceb1766bea9f943f060c"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Mon Apr 28 10:58:06 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 14 16:46:41 2014 +0200"
      },
      "message": "ospfd: For an ABR, ensure the right LSID is MaxAge\u0027d\n\nPROBLEM:\n\nAccurate garbage collection of maxage LSAs. The global OSPF structure has\na maxage_lsa tree - the key to the tree is \u003cls-id, adv-router\u003e tuple. Suppose\nthe ABR has multiple areas and has originated some intra-area LSAs. The\nkey for all those LSAs is the same. The code then ends up in a state where\nall but the first LSA do not get cleaned up from the areas\u0027 LSDB. A subsequent\nevent would readvertise those LSAs.\n\nPATCH:\n\nSince the LSA is going to stick around till it actually gets cleaned up by\nthe maxage_walker, make the LSA pointer as the key. Each distinct LSA that\ngets maxage\u0027d then gets added to the tree and will get cleaned up correctly.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\n[CF: Use CHAR_BIT; use uintptr_t; use sizeof(field) instead of sizeof(type)]\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\n[DL: this must remain a temporary fix! needs to be redone after 0.99.23]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4becea724ccd87e88f8454622ae227308b5fa3ce",
      "tree": "a1e07f06ae43698a72a15ee801de86ce3d9ffdf4",
      "parents": [
        "514991c76366c2a9f4c644714ad0722df0eed532"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 19 14:11:42 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 22 21:17:00 2014 +0200"
      },
      "message": "lib: use heap to manage timers\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "514991c76366c2a9f4c644714ad0722df0eed532",
      "tree": "e9cb854e881c4733b3aa5145d7c17388ee99f035",
      "parents": [
        "ba32db1e854ff2b26861a2d4e4193a9f1b3816cd"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 19 14:11:41 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 22 21:16:10 2014 +0200"
      },
      "message": "lib: remove unused thread_master_debug function\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cd40b329a2e4da882bcad0431c048c876bbeafbd",
      "tree": "cfbdec5a7559c6d3e56766797896a18809aa1746",
      "parents": [
        "e712d0e3667ffad8109ef8bce3ce01927ee95bb7"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Sep 30 12:27:51 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 20:21:41 2014 +0200"
      },
      "message": "lib/command.c: rewrite command matching/parsing\n\nAdd support for keyword commands.\n\nIncludes new documentation for DEFUN() in lib/command.h, for preexisting\nfeatures as well as new keyword specification.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f7bf41534e885c7bc077529c591a1bce24a5f1e9",
      "tree": "2c119e01872468b249bba44e5f7d20da67147756",
      "parents": [
        "db19c85679b08668c3dce73a655c21753042cf06"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Oct 22 17:10:21 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:27:58 2014 +0200"
      },
      "message": "zebra: apply syntactic sugar to rib_dump()\n\nstrip the explicit __func__ present on all calls and make the prefix\nargument a transparent union.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "af514777f4327932a3e84f83d79e941967503e15",
      "tree": "68ddb2e6dd758b2c50f3a4facea1dfc925460312",
      "parents": [
        "6d729eeac91578dca29961e0e46f246f33c37f0c"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Wed Jul 31 16:16:05 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:14:44 2014 +0200"
      },
      "message": "lib: fix possible off-by-one in stream_put_prefix()\n\nThe STREAM_WRITEABLE() call only checks if there is space for the\nprefix in the stream but does not account for the prefixlen. The\nstream_putc() call reduces available space by 1 and we can end\ncopying one byte too much and with \"endp\" off by one if we are\nnear the buffer end.\n\nInstead of moving the stream_putc() call before STREAM_WRITEABLE(),\nwe check before hand for the required space, and open-code it. This\navoids a function call and verifying again the stream buffer.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6d729eeac91578dca29961e0e46f246f33c37f0c",
      "tree": "38727ce4ac7c9d6e06298e374ed1a526fe8effb3",
      "parents": [
        "4d474fa3297c0d5d632e2c0bff6ccb0edbedaa5d"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Wed Jul 31 15:01:18 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:13:02 2014 +0200"
      },
      "message": "lib: fix for dynamically grown hashes\n\nFixes commit 97c84db00c (hash: dynamically grow hash table). The\nno_expand field it\u0027s not initialized and could make the hashes to\nnever grow the table index.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4d474fa3297c0d5d632e2c0bff6ccb0edbedaa5d",
      "tree": "61ca2f19e552df821eb2dc06cd9e06c81993aacf",
      "parents": [
        "c78a46c27f6dfdd42fe0800cebabc1e49cb0a4bf"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 19 15:00:06 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Mar 21 06:28:48 2014 +0100"
      },
      "message": "lib: fix backtraces broken by 837d16c...\n\n837d16c (\"*: use array_size() helper macro\") accidentally changed one of\nthe expressions in the backtrace code, which afterwards read:\n\nzlog_backtrace_sigsafe():\n  if (((size \u003d backtrace(array,array_size(array)) \u003c\u003d 0) ||\n\nwhich boils down to: (size \u003d backtrace(...)  \u003c\u003d 0).  The braces were\nintended to go:      (size \u003d backtrace(...)) \u003c\u003d 0.\n\nAll in all, this makes a nice textbook example of the original author\nbeing too clever (trying to save a single line by pulling the assignment\ninto the condition) and the next person touching the code tripping over\nit...\n\nThis code occurs another time in zlog_backtrace() where it is actually\ncorrect.  Pulling out the assignment nonetheless.  Also, new test\nprogram.\n\nCc: Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\nCc: Balaji.G \u003cbalajig81@gmail.com\u003e\nCc: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e708ed69aa0b993527f48b1f31b645c00750927f",
      "tree": "8f33d73b2a85b51c042318d58a1750eeb8019616",
      "parents": [
        "a11e012e8661629d665e992e765741a5eaa7d017",
        "424cc3bd48da0f417c9056c5c2ade697a3386cd4"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 18 17:04:25 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 18 17:04:25 2014 +0100"
      },
      "message": "Merge volatile/cumulus_ospf6d\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a11e012e8661629d665e992e765741a5eaa7d017",
      "tree": "d6967d9c5044f8c924aa2f4b62bac8e3bda358e2",
      "parents": [
        "b52aef18a9f3acc8b24ab5c2631dc574b8e2ec70"
      ],
      "author": {
        "name": "Remi Gacogne",
        "email": "rgacogne-github@coredump.fr",
        "time": "Sun Sep 08 13:48:34 2013 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Tue Feb 11 10:28:03 2014 +0100"
      },
      "message": "security: Fix some typos and potential NULL-deref\n\nThis patch against the git tree fixes minor typos, some of them possibily\nleading to NULL-pointer dereference in rare conditions.\n\nSigned-off-by: Remi Gacogne \u003crgacogne-github@coredump.fr\u003e\nSigned-off-by: Joachim Nilsson \u003ctroglobit@gmail.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "6ee06fa9ed91412cb745668d462031cdbe2642e0",
      "tree": "107e951abc716c2ca15fbcc62bdb0858b35036e8",
      "parents": [
        "a83a1e9c2f035d3152451dcfc97ab13b4ac427b9"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sun Jan 12 18:30:13 2014 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Feb 10 09:37:30 2014 +0100"
      },
      "message": "bgpd: bgpd-set-v4-nexthop-for-v6-peering.patch\n\nBGP: While advertising v4 prefixes over a v6 session, set the correct v4 nexthop.\n\nISSUE:\n\nFor an IPv6 peer, BGPd sets the local router-id as the next-hop\u0027s v4 address.\nThis is incorrect as the router-id may not be a valid next-hop to be included\nin UPDATEs that contain v4 prefixes.\n\nPATCH:\n\nSet the v4 address in the next-hop field based on the interface that the\npeering is on (directly connected interface or loopback).\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "b81e97a8a7f85ecc7489dc8a7c7b9d403d9c4bc6",
      "tree": "48e2c8492f01cc177a6691878cf4e5a329fe4d2d",
      "parents": [
        "17d003da963d6294e5ab95c690de285eccf0bac0"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Sat Aug 24 07:55:50 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 07 18:15:43 2013 -0800"
      },
      "message": "ospf6d: correct nexthop through directly connected networks\n\nThis is implementing this part of RFC 2328:\n\nThis is the \"first case\", see below,\n\n16.1.1. The next hop calculation\n\n...\nIf there is at least one intervening router in the current\nshortest path between the destination and the root, the\ndestination simply inherits the set of next hops from the\nparent. Otherwise, there are two cases. In the first case,\nthe parent vertex is the root (the calculating router\nitself). This means that the destination is either a\ndirectly connected network or directly connected router.\nThe outgoing interface in this case is simply the OSPF\ninterface connecting to the destination network/router.\n...\n\nThe current Quagga code always tries to inherit the nexthop from\na parent vertex, but does not cover the case that the destination\nis directly connected to the root vertex. This patch adds support\nfor that case.\n\nSigned-off-by: James Li \u003cjli at cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c5926a92235874574b20e426a3752c1451a90ec7",
      "tree": "c8b8b66eee832e3db5e5d315e966b168918ef57e",
      "parents": [
        "bf986da797e7d2a0aaae313fea626ba433581f03"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Sat Aug 24 07:55:00 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 07 18:15:42 2013 -0800"
      },
      "message": "ospf6d: add p2p interface support\n\nSigned-off-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nSigned-off-by: Ayan Banerjee \u003cayabaner at gmail.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nReviewed-by: James Li \u003cjli at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2449fcd64ae95d5fbfd95d93468fc57003def57d",
      "tree": "8c152a482f2080ee425cd06381861d2bf69769d4",
      "parents": [
        "3810e06eebe14f75c66fb17a88574384573e95fa"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Sat Aug 24 07:54:17 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 07 18:15:42 2013 -0800"
      },
      "message": "ospf6d: reinvoke MaxAge remover thread if not all MaxAge LSAs were flushed.\n\nMaxAge LSAs are being flushed out only on an event, unlike OSPFv2 where they\u0027re flushed out\nperiodically. This causes certain LSAs to hang around forever, never getting flushed out.\nThis patch makes flushing out MaxAge LSAs periodic, retriggered after a certain period if\nnot all MaxAge LSAs were flushed out.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8551e6dadce41fb87a61767af723cb25ae611a04",
      "tree": "cb0854c2e216989a0fa211d56d2bf6fd6948b2d6",
      "parents": [
        "a83a1e9c2f035d3152451dcfc97ab13b4ac427b9"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Oct 22 17:42:18 2013 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Oct 22 18:01:31 2013 -0700"
      },
      "message": "ospf6d/ospfd: refactor some common defines\n\nRearranging common defs and structures for use betweeen OSPFv2 and\nOSPFv3.  Created a new file called libospf.h under lib directory to\nhold defines that are common between OSPFv2 and OSPFv3 code bases.\n\n[DL: split of defines refactor from timer refactor]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f7f740fe58fb838fc87e82dc7e1e2d4e5ccf085c",
      "tree": "5f3d9c866aaf7f8f23aaa5956eb7323d49ef472f",
      "parents": [
        "c7df92de2dc91d0a934cf892e543728cb1a10849"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Jan 24 14:04:48 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 17:51:16 2013 +0200"
      },
      "message": "zebra: add ZEBRA_IFC_QUEUED to keep track of kernel state\n\nAs there are timeframes when we don\u0027t get a notification from the kernel\nabout new addresses. (e.g. while Linux performs IPv6 DAD), we need to\nhave some information whether an address has been sent to the kernel or\nnot.\n\nOne case where this is relevant would be a user adding an IPv6 address,\nbut deleting it before DAD has been complete. With the next patch which\nremoves some (ill assuming) synchronous parts in address setup,\nipv6_address_uninstall would not know whether or not it has to actually\ndelete the prefix from the kernel. Resolving these windows where we lack\ninformation is what the flag ZEBRA_IFC_QUEUED is intended for.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c423d413e464913ee88c1ee700e2c4037e6bdb24",
      "tree": "9cd9cf277703b89736a888a2bbb5455220789046",
      "parents": [
        "c51443f4aa6b7f0b0d6ad5409ad7d4b215092443"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jul 30 15:36:26 2013 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Jul 30 18:14:13 2013 +0200"
      },
      "message": "lib: unconditionally include stddef.h\n\nI\u0027ve used offsetof() in the previous commit to paper over the security\nproblems in ospf_api.c.  This blows the build on FreeBSD 7.0, missing\noffsetof().  Let\u0027s add that to zebra\u0027s generally used includes.\n\nstddef.h (and offsetof) is defined in C89 section 4.1.5 (and not\ndeprecated/removed by any later standard).  If this causes problems, the\nbug report should go against the host OS/compiler...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "677bcbbf153fe73e57cb44f668977cbd26661fd4",
      "tree": "545636b73b23f02c3ec13261c71ec3058cf089b7",
      "parents": [
        "b68da446e977f8069fb72bce73402e2234ffc1d9"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Wed Feb 27 13:47:23 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 09 22:35:29 2013 +0200"
      },
      "message": "lib/vty: register vtysh socket in server socket vector (BZ#754)\n\nRegister the vtysh socket in Vvty_serv_thread so it will be\ncorrectly closed on vty_reset instead of being leaked.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8df55970b64984e5071afd510caad5e778569bc1",
      "tree": "9aedcd7fa1c9b8ced8a140aa2cf7292c9d48d879",
      "parents": [
        "58952492d2eedd4b7974274a578a1fa9707125bb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Mar 01 12:03:58 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 09 17:07:07 2013 +0200"
      },
      "message": "build: reference libcap from libzebra (BZ#393,626)\n\nWhile the actual build failures have been fixed independently by\nd1d3ac9 \"build: reorder libraries to address linker error\", libzebra\nstill does not reference libcap.  This will lead to more build failures\nif someone else tries to use libzebra and doesn\u0027t add libcap.\n\nLet\u0027s just add libcap here and be done with it.\n\nI\u0027ve not added libcap to the _DEPENDENCIES variable above since libcap\nis a system library.  Actually, the whole _DEPENDENCIES thing is rather\nfishy; automake automatically sets _DEPENDENCIES from _LIBADD.  For the\nsake of not breaking stuff that works (especially since most autotools\nstuff is arcane magic), I\u0027m leaving it alone...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4a014580ff85428aa41b28503554b2ce982805be",
      "tree": "b66414d21e1a19ab65b34682b2027de349f5d291",
      "parents": [
        "b58c90807c9d0bfa9601704c7490a16070906004"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 27 11:24:24 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 09 17:05:08 2013 +0200"
      },
      "message": "build: fix minimal mixup in gitinfo suffix\n\nthe original version of this had issues with tagless repositories; to\nfix that I removed the \"-g\" part from one of the regexes.  I then failed\nto add those 2 characters back, leading to version numbers like\n\"0.99.220123456\" instead of \"0.99.22-ga123456\".  Let\u0027s put the \"-g\"\nback...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "97c84db00c01b808337bedf69f696a1517e3d8c0",
      "tree": "1af03fc32c0fc938c148ebdf3ad1eb812e254efc",
      "parents": [
        "90645f5598ca8b25cd2692f2ac0d2778a3fd2755"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 11 18:25:26 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Feb 24 20:48:16 2013 +0100"
      },
      "message": "hash: dynamically grow hash table\n\nDynamically grow the hash table index if the chains get too long.\nIf expansion doesn\u0027t help keep chain length short, then stop expanding,\nto avoid bad behavior if there is a poor hash function.\nNot a new idea, based on concepts in uthash.\n\nDepends on my previous patch to restrict hash to power of 2.\n\nSigned-off-by: Stephen Hemminger \u003cshemminger@vyatta.com\u003e\n[profiling results: sum of cycles spent in hash_get/jhash with RIPE RIS\n test data (single simple BGP peer) improved to 69% of previously spent]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "90645f5598ca8b25cd2692f2ac0d2778a3fd2755",
      "tree": "2b5e67b020eb3f7a2fd9df4faf2f0914e0cbf0cf",
      "parents": [
        "44a86a0278c1678fd4b8dfa56c4f5f2feb6df3ad"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 04 22:29:21 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Feb 24 20:42:40 2013 +0100"
      },
      "message": "hash: force size to be a power of 2\n\nBy forcing the hash table size to be a power of 2, a potentially\nexpensive divide can be replaced by a mask operation. Almost all\nusage of the hash table was using default size of 1024. Only places\nwith different size was thread library (1011) and bgp aspath.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "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"
    }
  ],
  "next": "8046ba6ec4d6e87bf8da6563c0f3e5e66c4652b3"
}
