)]}'
{
  "log": [
    {
      "commit": "a3466abd93f83424f9f83e56282e42188e1f94ce",
      "tree": "ca3359fa701f5d1cac8e4d711c62fadb234d6563",
      "parents": [
        "3e9e2c9fb66895df42159b98a3743e25399760df"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:14:46 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:28 2015 +0200"
      },
      "message": "zebra: clean up misc_null pragmas\n\nThe no-op alternatives provided in misc_null trigger a few warnings\nsince they provide functions / use pragmas without prototypes.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3e9e2c9fb66895df42159b98a3743e25399760df",
      "tree": "5570f07b6e4c28d6bade800df0c49b9187dfd258",
      "parents": [
        "7e92322cfcc6c062acae3b550f90d36fe40763f1"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Apr 10 09:14:58 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:28 2015 +0200"
      },
      "message": "zebra: static int inline -\u003e static inline int\n\nThe BSD socket kernel interface had some weird ordering of function\nattribute keywords. (\"static int inline foobar()\")\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7e92322cfcc6c062acae3b550f90d36fe40763f1",
      "tree": "c3269438b6cc435c481913fe4d3467c0df592200",
      "parents": [
        "48ab06b43040bb27d267bb165eedf9e496eb865b"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 21:04:20 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:25 2015 +0200"
      },
      "message": "zebra: use SA_SIZE for RT_ROUNDUP on FreeBSD\n\nFreeBSD provides SA_SIZE (and none of the other options to infer padded\nsize of a struct sockaddr).  Just define SAROUNDUP to SA_SIZE if it is\navailable.\n\nThis also drops a superfluous-looking extra macro branch which would\nrequire ROUNDUP.  It seemed redundant to my eyes, but I have no idea\nwhat odd things might have triggered addition of this in the first\nplace...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "48ab06b43040bb27d267bb165eedf9e496eb865b",
      "tree": "cff2cd83453daa7ddb10b6098c1f8fad82ffa9df",
      "parents": [
        "872b0dc0537b62503d98bafd3075553795c847cb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Mar 04 07:05:39 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:21 2015 +0200"
      },
      "message": "zebra: use prototypes/includes in rt_netlink\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "872b0dc0537b62503d98bafd3075553795c847cb",
      "tree": "9b6ea87ff63cd46db494a9f57fcc06c3df022b5f",
      "parents": [
        "52f02b47685bc823c4c75560175a27aab0bd6709"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:57:49 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:18 2015 +0200"
      },
      "message": "zebra: remove unused netlink_route()/kernel_rtm_ipv6()\n\nkernel_delete_ipv6_old(), removed in 51bdeba a little while ago, was the\nlast user of netlink_route() and kernel_rtm_ipv6().  Everything else\nuses the _multipath variants of these functions.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "52f02b47685bc823c4c75560175a27aab0bd6709",
      "tree": "81f7e0fd01fd10d4433d3f67a36eea0296df75e4",
      "parents": [
        "60a4601e2270920958e221fbffd7b0743f498d3c"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Apr 10 09:14:30 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:17 2015 +0200"
      },
      "message": "zebra, isisd: cast to unsigned char for ctypes\n\nctype.h macros take int as arguments, but expect arguments to be in\nunsigned char\u0027s range.  Even though it probably works, this isn\u0027t\ncorrect on systems that have a signed char type.  Cast explicitly.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d43f8b39b075fe60e0c8fdb33b07b284d3fae503",
      "tree": "8c98dce915aaaabd0707a12c2c08199d0bfdec2e",
      "parents": [
        "b1672ce858cc9c16fd7cc67b673aa241d9583a59"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:54:54 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "bgpd, zebra: fix struct/pointer sizeof mixups\n\nTwo places were taking sizeof(pointer) instead of the sizeof(struct),\nwhile performing operations on the struct.  Both are initialisation\nfunctions;  I guess we haven\u0027t seen fallout since they weren\u0027t critical.\nFix anyway.\n\n[v2: fix mistake that actually broke bgpd RS workqueue init]\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": "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": "b7cce958649775600458f2fb3a8d33fc84683d26",
      "tree": "d33d2e70408fc0d13e4b0c9d7494fca02bfb8b26",
      "parents": [
        "5cd0e5c659d0ae7840748e83cd9f340568fa4204"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Mar 07 08:40:48 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Mar 07 08:40:48 2015 +0100"
      },
      "message": "zebra: don\u0027t print uninitialized string (3b02fe8)\n\nThis crept in as part of the MRIB improvements and I missed the compiler\nwarning between other noise.  Unfortunately, printing an uninitialised\nvariable can in fact make zebra crash, so this is not trivial.\n\nFixes: 3b02fe8 (\"zebra: add \"show ip rpf\" to get result of RPF lookup\")\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4c421215a0330b96d85879810558d40027a96ca6",
      "tree": "50667e33680a4f4ba3d5ced80668a8077b0e9546",
      "parents": [
        "75a3cf6cf69f6ab940f8421b0f79b2b1f689b904"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Mar 02 06:42:11 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Mar 02 07:00:57 2015 +0100"
      },
      "message": "zebra: print \"no link-detect\"\n\nThe default for this is slated to change, so let\u0027s print the current\ndefault value for preexisting configurations.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.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": "39b233f0d789a6b5273c3dd279f17a67c718ea1a",
      "tree": "14f304d8b422de93657b9beed22d45596dac0f48",
      "parents": [
        "29ed622f3dc32816236a89de6fce323e3b092cf0"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:49:18 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:02 2015 +0100"
      },
      "message": "zebra: remove rt_ioctl kernel interface\n\nNone of the BSDs uses ioctls to set routes anymore.\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": "29ed622f3dc32816236a89de6fce323e3b092cf0",
      "tree": "dd28d05145b4dd83bbdafd531302c5abfcbef523",
      "parents": [
        "51bdebad99fe813d1b7104543b352f0e39b1c8dc"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:42:25 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:00 2015 +0100"
      },
      "message": "build: remove ancient Linux/BSD IPv6 cruft\n\nIPv6 functions in a separate library... yeah, right.\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": "51bdebad99fe813d1b7104543b352f0e39b1c8dc",
      "tree": "b2040a5c538cd3168a6c8842b92e28e35fa17420",
      "parents": [
        "86a82e99aa3728d78a1ec65b60a2162914cd7519"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:28:50 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:18:56 2015 +0100"
      },
      "message": "zebra: remove kernel_delete_ipv6_old()\n\nThe only user of this was rib_bogus_ipv6(), which was removed in the\nprevious commit.  Good riddance.\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": "86a82e99aa3728d78a1ec65b60a2162914cd7519",
      "tree": "5eedc1965841fb529c6c5e44511c80f388b90681",
      "parents": [
        "6d6df30386423518b5daef93c2f047b4140f85f4"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:26:36 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:18:51 2015 +0100"
      },
      "message": "zebra, ripngd: remove ::/64 special-casing\n\nIn the 90ies, IPv4 was believed to exist within IPv6, with some kernels\nimplementing this belief in code...  Our code here is keyed to \"#ifdef\nLINUX\", yet no Linux from the past 10 years had this, making the code\ncompletely useless.\n\nFreeBSD 10.0 does in fact have a \"::/96 via ::1 dev lo0 reject\" route.\nIMHO we shouldn\u0027t mess with that, the admin can filter as neccessary\nanyway.\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\n[DL: slightly adjusted commit message to remove misunderstanding]\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": "2e5ca49758543cde69d98f4a6a7b39486e88311d",
      "tree": "478181eaff0d3064505edfb6eba3c88f4f0d400f",
      "parents": [
        "79f74962d20fa2c90df5a57335fc3b5e19bfeccf"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 20:54:31 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:18:40 2015 +0100"
      },
      "message": "build: remove Linux non-netlink config\n\nThis path is deprecated, completely untested, likely broken and will not\nbe maintained.  Kill it with fire.\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": "863f20c326758c8a97e0a7a41c87355b66c4012d",
      "tree": "dea3fc4a2a9e203c5a81715080349684a08b2a44",
      "parents": [
        "3b02fe84aae567c56ef63e74cdb0dc63c66e2968"
      ],
      "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 Feb 06 22:01:52 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": "3b02fe84aae567c56ef63e74cdb0dc63c66e2968",
      "tree": "9a24aa7caa14bee4c78142ebd1a0213c1cc4a5ec",
      "parents": [
        "bd0781296703cf2eddebced34258a1897a03b535"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jan 22 19:12:35 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:52 2015 +0100"
      },
      "message": "zebra: add \"show ip rpf\" to get result of RPF lookup\n\nChecking what route exactly a RPF lookup for a given source uses is\nessential for an administrator to debug multicast routing issues.  This\ncommand provides exactly that, using the multicst RPF lookup function\nand printing out its result to the CLI.\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": "bd0781296703cf2eddebced34258a1897a03b535",
      "tree": "7d52174915f5873c42902157b522b17520e58ac1",
      "parents": [
        "24480d426046e46fbcec098be1147650d6d3ff50"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 06 19:53:24 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:52 2015 +0100"
      },
      "message": "zebra: make MRIB lookup behaviour switchable\n\ndepending on the usage scenario (and availability of multitopology IGP\nprotocols, which is currently zero in Quagga), different approaches of\nMulticast RPF lookups are useful.\n\nReference behaviours from commercial vendors are urib-only/mrib-only\n(Juniper, depending on inet.2 availability) and lowest-distance (Cisco).\nAs we are currently without MT IGP support, mrib-first seems the most\nuseful default for Quagga.\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": "24480d426046e46fbcec098be1147650d6d3ff50",
      "tree": "3c1dba91df14565902b2e5a40456100ee0af05f6",
      "parents": [
        "7ce9e6a3e8f0318656c1e619f48f3935e41638f1"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jan 22 19:09:36 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:51 2015 +0100"
      },
      "message": "zebra: return route_node from rib_match_ipv4_safi\n\nThe multicast code needs to know the route_node in addition to the rib\nentry in order to perform distance or prefix-length comparisons.  Add it\nas optional \"out\" pointer parameter.\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": "7ce9e6a3e8f0318656c1e619f48f3935e41638f1",
      "tree": "6fb874cab6f0ecbbc109e54afb126f8104f5b0a0",
      "parents": [
        "a76681b66746a8b1cbaea7032044b93958473aa1"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jan 12 07:05:06 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:51 2015 +0100"
      },
      "message": "zebra: dummy kernel \"install\" multicast routes\n\nThis is a followup to 9511633 (\"zebra: MBGP routes should not be\ninstalled in the kernel\"), which was correct in disabling MRIB routes\nbeing installed in the kernel, yet broke the MRIB since now routes were\nnever marked as active.\n\nHence, push down the check into the kernel install functions, so that\nthe routes are still marked active.  At the same time, the FPM calls get\na check each since otherwise we\u0027d bump the FPM interface on MRIB\nupdates.\n\nFixes: 9511633 (\"zebra: MBGP routes should not be installed in the kernel\")\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": "a76681b66746a8b1cbaea7032044b93958473aa1",
      "tree": "6c0db1011215473fd7ed4f93f9a29c00e21d48b4",
      "parents": [
        "33d86db3df7052da33990b47ad5a171dad6df691"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jan 22 19:03:53 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:51 2015 +0100"
      },
      "message": "zebra: fix optional distance on static mrib route\n\nUnfortunately, the quagga CLI parser doesn\u0027t support [\u003c1-255\u003e].  Fix by\nworking around with an alias.\n\nReplaces the following commits:\n- zebra: mrib: [no] ip mroute - require distance.\n- zebra: mrib: [no] ip mroute - make distance optional.\n(Rewritten as alias)\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": "33d86db3df7052da33990b47ad5a171dad6df691",
      "tree": "79fbcd0e0374502ae105f85d99e5b56285a4160e",
      "parents": [
        "f598cf7ecc8dd72dca08e97eb766e5ccaabe3424"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Mon Jul 14 11:19:00 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:51 2015 +0100"
      },
      "message": "zebra: mrib: static route support\n\nWith the MRIB being independent from the Unicast RIB, there\u0027s currently\nnow way to add static routes to the MRIB.  Address that by adding a\nseparate set of commands for MRIB static routes.\n\nCombines these original patches:\n- zebra: mrib: ip mroute command to add unicast route to MRIB for multicast RPF.\n- zebra: mrib: no ip mroute: Fix removal of static multicast RPF route.\n- zebra: mrib: remove unused static_add/delete_ipv4\n- zebra: Cleanups to zebra_rib.\n- pimd: Merge pim-only branch.\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": "f598cf7ecc8dd72dca08e97eb766e5ccaabe3424",
      "tree": "7278c19c2ec054be9b8a78a4853822632e93dbca",
      "parents": [
        "83d711234a22a2e7996905667468b0276e5b2c57"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 22 14:44:20 2014 -0800"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:51 2015 +0100"
      },
      "message": "zebra: kill rib_match_ipv4()\n\nSince this function is internal to zebra, there is no reason to keep\nthis one-line indirect wrapper to rib_match_ipv4_safi() around.\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": "83d711234a22a2e7996905667468b0276e5b2c57",
      "tree": "e63196326515606976dd989bbeaf58ac95b7ecfd",
      "parents": [
        "4e5275befee4acd91edd835a0b037cc2161ff834"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Fri Sep 19 16:39:34 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:51 2015 +0100"
      },
      "message": "zebra: mrib: Include BGP routes in RPF lookups\n\nThe rib_match_ipv4() function was previously used only for iBGP\nrecursive nexthop lookups, which ignore eBGP routes.  This is not\ndesirable for PIM RPF lookups, which may well use an eBGP route.\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": "4e5275befee4acd91edd835a0b037cc2161ff834",
      "tree": "a7177152fe32df1343672c4ac3d80bd0dad26d54",
      "parents": [
        "f9b9234bae058a7d152c51c318997c459f54e59d"
      ],
      "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": "Fri Feb 06 22:01:51 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": "f9b9234bae058a7d152c51c318997c459f54e59d",
      "tree": "ee77c15626326143a9616b86217c1a25534fd419",
      "parents": [
        "3dea1780c98ab3717c9c61f401b66a9c08a23661"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Fri Nov 21 15:57:45 2014 -0800"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:51 2015 +0100"
      },
      "message": "zebra: point rib_match_ipv4() to ._safi()\n\nSince rib_match_ipv4() is just rib_match_ipv4_safi() for SAFI_UNICAST,\nthe former can be removed and pointed to the latter instead.\n\nCc: Balaji G \u003cbalajig81@gmail.com\u003e\nCc: Everton Marques \u003ceverton.marques@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3dea1780c98ab3717c9c61f401b66a9c08a23661",
      "tree": "0408f30e62295d0642969fc1e155475a0c54113e",
      "parents": [
        "ab2ba612320e011abbb1011823b66afc35859081"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Mon Sep 22 19:35:51 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:51 2015 +0100"
      },
      "message": "zebra: add rib_match_ipv4_safi()\n\nThis is the same as rib_lookup_ipv4(), without the SAFI hardcoded.\n\nCc: Balaji G \u003cbalajig81@gmail.com\u003e\nCc: Everton Marques \u003ceverton.marques@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ab2ba612320e011abbb1011823b66afc35859081",
      "tree": "63bb7982d9d1e1d8d211b6d8363798ad53927e86",
      "parents": [
        "9481374d4ff7cfbc6274954bff8b0e4c52578911"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jan 22 19:02:13 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:50 2015 +0100"
      },
      "message": "zebra: identify MRIB on debug messages\n\nsince the same code handles both URIB and MRIB, the debug messages can\nget rather confusing if the RIB isn\u0027t identified.  Mark the MRIB in\ndebug messages so we can distinguish that.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9481374d4ff7cfbc6274954bff8b0e4c52578911",
      "tree": "dda1133cddcc3546d4cee60d83ec62b47f05d88a",
      "parents": [
        "3c28aaf437d8d473adb89c5e74574a61a9ea7cc6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Apr 24 20:22:53 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 22:01:50 2015 +0100"
      },
      "message": "zebra: factor out rib debug logs\n\nIntroduces a logging function that takes a struct route_node * argument,\nand prefixes log output with that node\u0027s prefix.  While this removes\nsome duplication, it will also later be useful for srcdest route nodes.\n\nBehaviour before and after the patch should be exactly identical.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "273b1bd341afff86ba571e0be296d88dba627136",
      "tree": "b82720f4c6d11bb9c33c75e4eb5612e789f6da60",
      "parents": [
        "5e4ba81dc212b172e715afa7b6ea668cddd8485d"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Tue Dec 02 14:51:49 2014 -0500"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Tue Dec 02 20:24:23 2014 -0500"
      },
      "message": "zebra/kernel_socket.c: Use platform alignment\n\nUse the platform-provided RT_ROUNDUP macro to align sockaddrs on the\nrouting socket, rather than using hard-coded assumptions about\nalignment.  Emit a warning if the OS doesn\u0027t define alignment macros.\n\nResolves failure of ripngd on NetBSD 6 i386, which changed alignment\nto uint64_t from long.\n"
    },
    {
      "commit": "56a5f7752d9bf7297ea022544112909cf2ccba97",
      "tree": "557d29293e55e78f9f0cbb0c90a6acd1a111734c",
      "parents": [
        "d1b0991ad8404366811a7ccc86e76f70a1ba399e"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:58:04 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:30 2014 +0000"
      },
      "message": "Added show command to display only the routes in the RIB that does not count ECMPs\n\nSigned-off-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d1b0991ad8404366811a7ccc86e76f70a1ba399e",
      "tree": "08365369f345a4bbd1d3a3ff6c4abb32b13a97a1",
      "parents": [
        "b6eef003e1a79471addea0b01853b08aed812cc8"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:54:13 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:23 2014 +0000"
      },
      "message": "Make static IPv6 routes respect non-default routing tables.\n\nSigned-off-by: Nolan Leake \u003cnolan@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9511633e08ff15c23608983fdc1bc735d427332e",
      "tree": "afdafaae1cfcac87ac0934fdc32928e5aa8dc565",
      "parents": [
        "c68f6d9dbb9f910d3ee82e099655fff7c12ef856"
      ],
      "author": {
        "name": "Balaji",
        "email": "balajig81@gmail.com",
        "time": "Thu Oct 23 15:25:25 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 30 07:06:13 2014 +0100"
      },
      "message": "zebra: MBGP routes should not be installed in the kernel\n\nMBGP routes are used only for PIM RPF checks and hence should\nnot be installed in the kernel\u0027s FIB. Ignore route node set to Multicast\nSAFI.\n\nSigned-off-by: Balaji.G \u003cbalajig81@gmail.com\u003e\nAcked-by: Everton Marques \u003ceverton.marques@gmail.com\u003e\n[pushed down rn-\u003etable-\u003einfo assignment below assert]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "969d3550a8cbb07f8b4d5ebe8dde5064f8260140",
      "tree": "f43d5c74ed758af6b1181ce03163ebf2504a1271",
      "parents": [
        "384d7ad98c109e92eaf65bf10a3256e5657639c3"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Tue Oct 21 06:24:07 2014 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 14:37:55 2014 +0100"
      },
      "message": "zebra: route_unlock_node is missing in \"show ip[v6] route \u003cprefix\u003e\" commands\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Vincent Jardin \u003cvincent.jardin@6wind.com\u003e\n"
    },
    {
      "commit": "7a6eec54eaffa82f4f03363314bb81c400eb2a66",
      "tree": "b2dcf76eb7a2c769bdd0f173c31bbe207a609fd4",
      "parents": [
        "f6444e4f6e1664f49f7552f894c8c94e45dd3c35"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 10:51:41 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "zebra: Build the test client, can be useful, and add IPv6 to testrib.conf\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": "621e2aaf33d8ab73bf44b0eea3f3900135d34996",
      "tree": "a97a9b0c33a6591ade083afbe7ed8eb46100a651",
      "parents": [
        "0b74a0a5db7bcf65bf68c44b547b02b1310b5cdb"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Fri Jul 11 07:52:15 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:37:14 2014 +0200"
      },
      "message": "zebra: fix rtnh_len in the rt_netlink messages for multipath case\n\nIn _netlink_route_build_multipath():\n- Each time when appending a IPv4 gateway in the message, rtnh_len\n  is increased by sizeof (struct rtattr) + 4, where we should use\n  \"bytelen\" instead of the hard coding \"4\".\n- As what done for IPv4, we should increase rtnh_len accordingly\n  along with adding a IPv6 gateway, or else the IPv6 gateways will\n  be lost.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c299ed717eea4dbf7ca3581bcba05ff09f79276c",
      "tree": "1c5bcdf75892ef9958edc8f38dd7f01922f0e57d",
      "parents": [
        "16ffb26fbbf8b3d1fee7a14eb401ecb02eed5058"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Jul 29 09:41:55 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:50:23 2014 +0200"
      },
      "message": "zebra: fix struct msghdr initializers\n\nstruct msghdr field orders are not strictly specified in POSIX.\nImprove portability by using designated initializer. This fixes\nbuild against musl c-library where struct msghdr is POSIX\ncompliant (Linux kernel and glibc definitions are non-conforming).\n\nAs the result is also more readable, struct iovec initilizers\nwere also converted.\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": "8e998b1eb5fea53f2a2eddd9f7f2b8ab004406f3",
      "tree": "95b756ddc86e043189c49a930a016051128c949b",
      "parents": [
        "000e157c852653288c5a1e6d0dee821c1765d315"
      ],
      "author": {
        "name": "Michal Sekletar",
        "email": "msekleta@redhat.com",
        "time": "Fri May 16 14:13:43 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 27 19:50:45 2014 +0200"
      },
      "message": "zebra: raise the privileges before calling socket()\n\nBecause of recent changes when creating AF_NETLINK socket, kernel will\ncache capabilities of the caller and if file descriptor is used or\notherwise handed to another process it will check that current user has\nnecessary capabilities to use the socket. Hence we need to ensure we\nhave necessary capabilities when creating the socket and at the time we\nuse the socket.\n\nSee: http://www.spinics.net/lists/netdev/msg280198.html\n\nSigned-off-by: Michal Sekletar \u003cmsekleta@redhat.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "24c84dbe806084552d7bb14b9f1d00514a048b9d",
      "tree": "cb53212866638b8aa559e573aa320f027d7ed8b7",
      "parents": [
        "4becea724ccd87e88f8454622ae227308b5fa3ce"
      ],
      "author": {
        "name": "Ken Williams",
        "email": "kenneth.j.williams@intel.com",
        "time": "Tue Apr 15 02:23:11 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 22 21:17:26 2014 +0200"
      },
      "message": "zebra: Change the mechanism for comparing route ID\u0027s.\n\nThe current format uses subtraction of two ints. Unfortunately, the\nsubtraction method does not work for all combinations of numbers.\nFor example, the with numbers represented by 10.x.x.x and 192.x.x.x,\n10.x.x.x - 192.x.x.x will yield a very large positive number indicating\nthat 10.x.x.x is larger.\n\nSigned-off-by: Ken Williams \u003ckenneth.j.williams@intel.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\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": "2b00515a9b639fd1e057f3ebf10ded2dde920764",
      "tree": "1167cb145764208a132599e5d83980708501bac4",
      "parents": [
        "f7bf41534e885c7bc077529c591a1bce24a5f1e9"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Sep 30 12:27:49 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:32:49 2014 +0200"
      },
      "message": "bgpd, ospfd, zebra: fix some DEFUN definitions\n\nFixup some DEFUNS with incorrect command strings or mixed up helpstrings.\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": "db19c85679b08668c3dce73a655c21753042cf06",
      "tree": "d36e66a2a34265b9a31bd93ed6bf00d7973b1232",
      "parents": [
        "98a59492d9152df8c93612d2d12f170b5c034189"
      ],
      "author": {
        "name": "Brett Ciphery",
        "email": "brett.ciphery@windriver.com",
        "time": "Thu Oct 03 13:48:54 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:27:53 2014 +0200"
      },
      "message": "zebra: set metric for directly connected routes via netlink to 0\n\na value of 1 is hard coded for the metric field, much like the\nifconfig utility it may have roots in.  in order to be in line\nwith the metric used in the linux kernel itself, we switch this\nto 0.\n\nSigned-off-by: Brett Ciphery \u003cbrett.ciphery@windriver.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1db65fadf627637621c342b789b9a3604ca5fab5",
      "tree": "546c769ca03e71e6c7bb55a52b4f7ea525542864",
      "parents": [
        "e708ed69aa0b993527f48b1f31b645c00750927f"
      ],
      "author": {
        "name": "Ingo Flaschberger",
        "email": "if@xip.at",
        "time": "Sun Apr 17 18:28:20 2011 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Mar 21 06:28:23 2014 +0100"
      },
      "message": "ospf6d: solve segfaults with ospf6d on FreeBSD\n\nDo not send ospf6d hellos on fresh created interfaces without\nconfiguration (ie. no vlan configured).  Ospf6d use ip6_mtu, if it\u0027s not\ninitalised, Ospf6d tries to alloc indefinite size of memory.\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": "b52aef18a9f3acc8b24ab5c2631dc574b8e2ec70",
      "tree": "bfa979bb182304582f6c03884e8c4e3c27c22165",
      "parents": [
        "23f5f7c3dd805b7d6a46d86d23aaa5c71273a84a"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Wed Nov 27 17:06:15 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Feb 11 04:53:14 2014 +0100"
      },
      "message": "zebra: log routes w/o gateway in rib_delete_ipv4\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "23f5f7c3dd805b7d6a46d86d23aaa5c71273a84a",
      "tree": "9e512404ad6146e17ee689c16e1509e692d9101c",
      "parents": [
        "a25a1264a5615a90e9ca9f60ccc1f397ca55bc56"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Wed Nov 27 17:06:14 2013 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Feb 10 22:38:00 2014 +0100"
      },
      "message": "zebra: match gateway when deleting NEXTHOP_IPV4_IFINDEX routes\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "fed643f4093abc0ed5e796aab9047768f7036ed6",
      "tree": "ffa07bd17a939b386813f5b08c8f92f302d8c505",
      "parents": [
        "f3a1732eb3bb41c094ec558d2aeee2766878a91d"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue Oct 23 16:00:42 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Oct 22 10:38:35 2013 -0700"
      },
      "message": "zebra: make rib_dump() compatible with IPv6 RIB\n\n[DL: resolved conflicts in zebra_rib.c]\n[DL: fix usage with --disable-ipv6]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f3a1732eb3bb41c094ec558d2aeee2766878a91d",
      "tree": "9cc740a8d4b37bb5e1aa2c00ea1102a26d67809b",
      "parents": [
        "c3e6b595160cd3aa601ae7e1887e695710cde15d"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Jul 05 15:35:41 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 18:04:40 2013 +0200"
      },
      "message": "zebra: apply route-maps for interface routes\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c3e6b595160cd3aa601ae7e1887e695710cde15d",
      "tree": "d7face57a402bd5e4bbdbbeee071df52a84a6fac",
      "parents": [
        "e8d3d2991f72613edb76dea244a8c8e4684873dd"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Jul 05 15:35:40 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 18:04:40 2013 +0200"
      },
      "message": "zebra: fix recursive-routes via ifindex routes\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e8d3d2991f72613edb76dea244a8c8e4684873dd",
      "tree": "d02f768800ebaac51439368ff3d851e63ed6359e",
      "parents": [
        "48a53dc71cb422e619859b79d5069e02fcd867d0"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Jul 05 15:35:39 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 18:04:40 2013 +0200"
      },
      "message": "zebra: implement NEXTHOP_FLAG_ONLINK\n\nOn Linux, the kernel will only allow for a route to be installed when\nits gateway is directly attached according the kernel fib.\n\nThere are cases when this restriction by the kernel is too strong, in\nthose cases, we deploy the RTNH_F_ONLINK netlink flag.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "48a53dc71cb422e619859b79d5069e02fcd867d0",
      "tree": "ff5e8148efb422e0dd074657951f5dd5a1c0150b",
      "parents": [
        "fa713d9ee5ed30dedd0a290be9aaff780a2896be"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Jul 05 15:35:38 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 18:04:40 2013 +0200"
      },
      "message": "zebra: handle blackholes encountered in recursive resolution\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fa713d9ee5ed30dedd0a290be9aaff780a2896be",
      "tree": "1d263cce70c341f3f2a73a47d4b1cd5a38b09129",
      "parents": [
        "bfac8dcd2fe7ed099a679b5c8245599c6d0312ed"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Jul 05 15:35:37 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 18:04:40 2013 +0200"
      },
      "message": "zebra: rework recursive route resolution\n\nChange the datastructure for recursive routes. This brings the following\nbenefits:\n\nBy using struct nexthop also to store nexthops obtained by recursive\nresolution, we can get rid of quite a bit of code duplication in the fib\nmanagement. (rt_netlink, rt_socket, ...)\n\nWith the new datastructure we can make use of all available paths when\nrecursive routes are resolved with multipath routes.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "bfac8dcd2fe7ed099a679b5c8245599c6d0312ed",
      "tree": "7674e567b6824aac9dfe78f0e149871b4d49a44c",
      "parents": [
        "02b4805f3914ef6ba0242c6f4dd1b6759ef97bf2"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Jan 24 14:04:50 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 17:51:16 2013 +0200"
      },
      "message": "zebra: improve interface shutdown behaviour\n\nLinux removes IPv6 addresses when the interface is set down. Those\naddresses need to be readded when the interface is set up again.\n\nAlso, an interface should not be reactivated from shutdown by configuring\nan ip address.\n\nFinally, remove the three-state logic for the shutdown setting as its\nsole current use may be mild confusion.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "02b4805f3914ef6ba0242c6f4dd1b6759ef97bf2",
      "tree": "f5194e173f172e7c75cf869c7b7621e09e5e3557",
      "parents": [
        "f7f740fe58fb838fc87e82dc7e1e2d4e5ccf085c"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Jan 24 14:04:49 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 17:51:16 2013 +0200"
      },
      "message": "zebra: don\u0027t change connected state from zebra/interface.c\n\nTry to avoid changing connected state from zebra/interface.c as this\nmeans making assumptions about kernel behaviour which may be or may\nbecome wrong. This state should rather be updated by events from the\nkernel.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\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": "c7df92de2dc91d0a934cf892e543728cb1a10849",
      "tree": "81bbf6ded1b86ccd95cc76d17f9ff3cec55ad9fb",
      "parents": [
        "d7f5dad6d1ab3078fcabc79e15a88873940c074d"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Jan 24 14:04:47 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 17:51:16 2013 +0200"
      },
      "message": "zebra: warn if advertising connected with _REAL unset\n\nThe implementation in zebra and the zclient protocol allow to communicate\naddresses to clients which are not yet in the kernel.\n\nThis is usually not done and most clients seem to expect an address to be\nconfigured in the kernel when they receive it. Therefore, it seems\nreasonable to issue a warning when advertising an address to the clients\nthat is not yet in the kernel.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d7f5dad6d1ab3078fcabc79e15a88873940c074d",
      "tree": "54906529478fcfbd02168a3958430ddf4c4a5139",
      "parents": [
        "676e1a0142ec8b181d4d7ea1038f461bc67c1ee1"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Jan 24 14:04:46 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 17:51:16 2013 +0200"
      },
      "message": "zebra: consolidate connected_implicit_withdraw\n\nconnected_implicit_withdraw is used at two places and followed by exactly\nthe same code. Move that code into connected_implicit_withdraw and give\nthat function a more descriptive name.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "676e1a0142ec8b181d4d7ea1038f461bc67c1ee1",
      "tree": "69b6bd044d956a591a24bed2245cc48ef2a5c06b",
      "parents": [
        "9db047fcb1bedcf1a5a1962e49aa70f48f969b96"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Jan 24 14:04:45 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 17:51:16 2013 +0200"
      },
      "message": "zebra: clear ZEBRA_IFC_CONFIGURED on \"no ipv6 addr\"\n\nTo match the semantics of IPv4, the ZEBRA_IFC_CONFIGURED flag\nshould be cleared when an IPv6 connected is uninstalled via\nvty.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9db047fcb1bedcf1a5a1962e49aa70f48f969b96",
      "tree": "d09388f975d4201dc905cb00522e5d56b09a1cfe",
      "parents": [
        "599da95527ec8e09cd3d890dc3addc6f2e791a0c"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Jan 24 14:04:44 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 17:51:16 2013 +0200"
      },
      "message": "zebra: make if_subnet_delete a bit more strict\n\nEnhance if_subnet_delete so it will complain about improper use.\nAlso, fix one occurence of improper use where it was called for\nIPv6 as well.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "599da95527ec8e09cd3d890dc3addc6f2e791a0c",
      "tree": "8d1ba2663b01be4c2be0a05aceef927181f64eb8",
      "parents": [
        "23cd8fb7133befdb84b3a918f7b2f6147161ac6e"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Jan 24 14:04:43 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 17:51:00 2013 +0200"
      },
      "message": "zebra: process information about new addresses (BZ#486)\n\nBecause of a change of semantics in the Linux kernel, information\nabout changes made by zebra itself was not considered for updates.\nThis change should fix this by accounting for the new semantics.\n\nIt is based on a patch by lich posted to the bugzilla #486\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a12afd5e8e57c95505d4d0166af234c7f19e9fe1",
      "tree": "62f3d6a2d92ce06d857fd90240a8a8806ff38951",
      "parents": [
        "bb97e4622ed6f48e2b8e07f1f94edd03162223a1"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat May 25 14:01:36 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 06 12:41:46 2013 +0200"
      },
      "message": "bgpd, zebra: support NEXTHOP_IPV4_IFINDEX in bgp import check\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "bb97e4622ed6f48e2b8e07f1f94edd03162223a1",
      "tree": "5729ccb02f1de89d4d9bbe5b537de45803d1cf55",
      "parents": [
        "5b9f51828db732d56053500b1d257797f7f3401b"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat May 25 14:01:35 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 06 12:41:46 2013 +0200"
      },
      "message": "bgpd, zebra: Support NEXTHOP_IPV4_IFINDEX in nexthop_lookup api\n\nSince commit ba281d3d040, ospfd uses NEXTHOP_IPV4_IFINDEX\nroutes. The API between zebra and bgpd which is used to query\nnexthops for recursive routes did not support this nexthop\ntype and therefore, ospf changes (or any other IGP changes\nwhich use NEXTHOP_IPV4_IFINDEX) would never trigger any\nrecursive route update.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5b9f51828db732d56053500b1d257797f7f3401b",
      "tree": "d5f43ef09d6a8df6a2eef852bd61020c27395125",
      "parents": [
        "a0f6ce5b41dcfa059074d72c8fc61896d3e996a9"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat May 25 14:01:34 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 06 12:41:46 2013 +0200"
      },
      "message": "zebra: improve display of NEXTHOP_IPV4_IFINDEX in show ip route\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a52070899afed55ae44ed6a140ac090cdf07d141",
      "tree": "7779e6c597ccc4446f6aa239628263c01f2e8a96",
      "parents": [
        "67e7a2127c05a8c7dfddd7ffc6378edf6b666d55"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Apr 11 08:24:29 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 31 17:58:05 2013 +0200"
      },
      "message": "zebra: don\u0027t printf to stdout on ZEBRA_IPV6_NEXTHOP_LOOKUP\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f1ef81b2476ea533ac3d2129aa0e89653c427323",
      "tree": "107bc07162b377b16af43d59cca4ce1a82a747f0",
      "parents": [
        "66b63aa036c75737c3a8cea9693eff4dec84f903"
      ],
      "author": {
        "name": "Ulrich Weber",
        "email": "ulrich.weber@Sophos.com",
        "time": "Tue Jan 22 10:39:18 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 23 18:19:24 2013 +0100"
      },
      "message": "zebra: use SO_RCVBUFFORCE for netlink socket\n\nso net.core.rmem_max must not be adjusted. Requires\nlinux kernel \u003e\u003d 2.6.14, falls back to SO_RCVBUF on error\n\nSigned-off-by: Ulrich Weber \u003culrich.weber@sophos.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b2baffe8d255890b85d93aee653bed2c18371128",
      "tree": "59fd3cada2ac805f46641e4aaf6ee98edddee0bd",
      "parents": [
        "b0baf0740e3d6a01980cef7ea0af0a61c10b1bcd"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jan 27 04:46:02 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 09 03:00:12 2013 +0100"
      },
      "message": "build: fix \"pragma weak\" mixups\n\nNot only was there a minor typo in the \"pragma weak\" preprocessor\nchecks, but also were the tests not behaving as needed - they only\nindicated support for the /first/ method of implementing weak aliases,\nwhich on Linux is __attribute__ and not #pragma.\n\n* m4/ax_sys_weak_alias.m4: set defines for _all_ weak alias methods\n* zebra/kernel_null.c: fix typo\n\nCc: Doug VanLeuven \u003croamdad@sonic.net\u003e\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": "9499bf2bc6daf0a9b7170d3cf994daef2f1a8920",
      "tree": "da0c36589c64c385b2f2ace17b92076febb9afe6",
      "parents": [
        "15c713485699fd22dfa5b7ce3ca7c6be049f1033"
      ],
      "author": {
        "name": "Leonid Rosenboim",
        "email": "lrosenbo@wrs.com",
        "time": "Thu Dec 06 20:17:41 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jan 14 16:07:25 2013 +0100"
      },
      "message": "zebra: don\u0027t overrun afi/safi array boundaries\n\nzebra was not checking afi/safi values.  This was leading to crashes where\nthese values were coming directly from some protocol\u0027s on-wire fields.\nSafeguarding them in zebra is a good start.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "913ff66ba30093d2fdc26af215f4bc0b3d359d75",
      "tree": "c05c1df603a7ef8d73460777cd6017f720b29b3a",
      "parents": [
        "61be0ee8824b30e94ddd2bfe8b51fcfd330c41dd"
      ],
      "author": {
        "name": "高鹏",
        "email": "gpstrive@gmail.com",
        "time": "Wed Nov 21 18:15:43 2012 +0800"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 22:06:04 2013 +0100"
      },
      "message": "zebra: fix netlink NL_PKT_BUF_SIZE\n\nChange default value of variable NL_PKT_BUF_SIZE to 8192UL.  Cf.\nNLMSG_GOODSIZE definition of linux in include/linux/netlink.h for detail.\n\nPreviously, on platforms with a page size greater than 8192, if you had added\ntoo many interfaces, zebra would not have enough buffer space to get the entire\ninterface list.  This resulted in an incomplete interface list.\n\nFrom: 高鹏 \u003cgpstrive@gmail.com\u003e\n[updated to apply after FPM patches]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "327c4cdf7578debcc140f04f03d02479771c9e11",
      "tree": "a0e02a0614f12601d8a58eeeebf9e54b27198c9f",
      "parents": [
        "b2e5bdbe10c4145f508fcf1486ffe29d5ce516f7"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Fri Dec 14 14:58:30 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 21:50:06 2013 +0100"
      },
      "message": "testzebra: pragma weak: detect systems with weak alias and provide alternative\n\nLLVM clang does not support #pragma weak (bug 3679) on OS X. There are\nother systems where the #pragma weak has varying syntax.\n\nAdded m4 file from the autoconf archives:\nhttp://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html\n\nFix up zebra/*_null.c files to use #pragma weak alias or stub functions\nif not available. It\u0027s incomplete in that the different format #pragma\nenable easier fixes on need.\n\nTested on 64bit OS X 10.7, FreeBSD 9.0 amd64 \u0026 i386 (32bit) using\ngcc \u0026 clang. Tested on linux 64bit.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\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": "324ed1f87aedf30a45aea951edb2e717c5f9b7fb",
      "tree": "3e23528caf97c699bc2403a7e87443005f87f446",
      "parents": [
        "b9c24cd23091e817942d4eaab95712e84dbec8aa"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:49:01 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "zebra: include intf when sending IPv4 nexthop to FPM\n\n* zebra/zebra_fpm_netlink.c\n\n    Change the zebra FPM code to include an interface index when\n    encoding a nexthop even if the protocol only provided a gateway\n    address (e.g, NEXTHOP_TYPE_IPV4).\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5adc2528d386f037cc39e8029616295c3fec2db4",
      "tree": "2f54793f50a591d99a39d75fbf6bbd7dbe752dda",
      "parents": [
        "443b993777e3e86fceb988f647d1c5b57661a182"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:59 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "zebra: add module to communicate routes to FPM\n\nEnhance zebra to send routes to the (optional) Forwarding Path Manager\ncomponent using the interface defined by fpm/fpm.h.\n\n  * configure.ac\n\n    - Add --enable-fpm flag.\n\n      The FPM-related code in zebra is activated only if the build is\n      configured with \u0027--enable-fpm\u0027.\n\n    - Add HAVE_NETLINK automake conditional.\n\n      This allows us to conditionally build netlink-dependent C code.\n\n  * zebra/{rib.h,zebra_rib.c}\n\n    - Add the \u0027fpm_q_entries\u0027 field to the rib_dest_t structure. This\n      allows dests to be placed on the fpm queue.\n\n    - Define a couple new rib_dest_t flags that hold FPM-related\n      state.\n\n    - Invoke the zfpm_trigger_update() function for a route_node\n      whenever the information to be sent to the FPM changes.\n\n    - rib_can_delete_dest(): Return FALSE if we have to update the FPM\n      about the given dest. This ensures that the dest is not deleted\n      even if there are no ribs hanging off of it.\n\n  * zebra/zebra_fpm.c\n\n    This file holds most of the code for interacting with the FPM.\n\n    - If quagga was configured with \u0027--enable-fpm\u0027, periodically try\n      to connect to the FPM.\n\n    - When the connection comes up, enqueue all relevent dests to the\n      FPM queue.\n\n    - When the FPM socket is readable, dequeue the next rib_dest_t\n      from the FPM queue, encode it in to a message and send the\n      message to the FPM.\n\n    - When the connection to the FPM goes down, remove all dests from\n      the FPM queue, and then start trying to connect to the FPM\n      again.\n\n    - Expose the following new operational commands:\n\n      show zebra fpm stats\n      clear zebra fpm stats\n\n  * zebra/zebra_fpm_netlink.c\n\n    - zfpm_netlink_encode_route(): Function to encode information\n      about a rib_dest_t in netlink format.\n\n  * zebra/zebra_fpm_private.h\n\n    Private header file for the zebra FPM module.\n\n  * zebra/zebra_fpm.h\n\n    Header file exported by zebra FPM module to the rest of zebra.\n\n  * zebra/debug.c\n\n    Add the \u0027debug zebra fpm\u0027 command.\n\n  * zebra/main.c\n\n    Initialize the zebra-FPM code on startup.\n\n  * zebra/misc_null.c\n\n    Add stub for zfpm_trigger_update().\n\n  * zebra/Makefile.am\n\n    - Include new file zebra_fpm.c in build.\n\n    - Include zebra_fpm_netlink.c in build if HAVE_NETLINK is defined.\n\n  * vtysh/Makefile.am\n\n    Include zebra_fpm.c in list of files that define cli commands.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "78deec450cfa5ddcad290c13b36dd1d187da213e",
      "tree": "bf6e811b78c726db3fe00b168b35a67e9aa586c1",
      "parents": [
        "0915bb0ce2ca6b5fee2cd214be4499eeeaf1c9af"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:56 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "zebra: extern/extract some functions from rt_netlink.c\n\n* zebra/{rib.h,zebra_rib.c}\n\n    Add nexthop_type_to_str(), which returns a human-readable string\n    corresponding to a nexthop type.\n\n  * zebra/rt_netlink.[hc]\n\n    - Add new header file that exposes some existing and new\n      netlink-related functions from rt_netlink.c to the rest of\n      zebra.\n\n        addattr32\n        addattr_l\n        rta_addattr_l\n        nl_msg_type_to_str (new)\n        nl_rtproto_to_str (new)\n\n    - Use nexthop_type_to_str() instead of the static array\n      \u0027nexthop_types_desc\u0027.\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": "9234b382735b690f403ce018ce392316b2ad6e38",
      "tree": "291a65a85584a3435453676bd8ed1ab0f70123ab",
      "parents": [
        "a05df8fd279e4af0f077de181fb6c4e7d7174267"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Wed Oct 10 16:12:32 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 11:22:24 2012 -0500"
      },
      "message": "build: check actually-used BSD link state fields\n\nifi_link_state missing in OS X. There could be other *BSD\u0027s that haven\u0027t\nimplemented it and possibly affects older implementations.\n\nThe existing HAVE_BSD_LINK_DETECT configure.ac check is only confirming\nthe link state detection using ifmediareq.ifm_status found in\n\u003cnet/if_media.h\u003e. This is the link state detection used in\nzebra/ioctl.c. Later, *BSD redefined struct if_data in \u003cnet/if.h\u003e and\nincluded link state detection. This is the method used in\nzebra/kernel_socket.c\n\nAdditional test defined in config.ac to test for member struct\nif_data.ifi_link_state defined in \u003cnet/if.h\u003e separate from test for\n\u003cnet/if_media.h\u003e ifmediareq.ifm_status\n\nFixed #ifdef\u0027s in zebra/kernel_socket.c to use the new #define\nNo impact on older function calls in zebra/ioctl.c\n\nTested on 64bit OS X 10.7, FreeBSD 9.0 amd64 \u0026 i386 (32bit)\nusing gcc \u0026 clang. Tested on linux 64bit.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a05df8fd279e4af0f077de181fb6c4e7d7174267",
      "tree": "3b29c8d00b70dfbf9f9ff8ab90c29b970d0aea33",
      "parents": [
        "3b33de676ac8e84b82f40520ecd0f4722e16b349"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Wed Oct 10 16:11:36 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 11:12:08 2012 -0500"
      },
      "message": "zebra: kernel_socket: fix overflow in RTA_ADDR \u0026 RTA_ATTR\n\nIn zebra/kernel_socket.c, copying sockaddr from *_msghdr:\n\nThere are really 2 different lengths that need to be determined.\n  1) the length required to point to the next sockaddr in the mesg\n     buffer which might include any required padding and\n  2) the actual length of the sockaddr data that needs to be copied\n     into the destination field.\nThey may or may not be the same value.\n\nSizeof sockaddr_in6 is 28, which to pad for alignment purposes on 32\nbit systems with a long of 4 bytes is evenly divided and requires\nno padding. On 64 bit systems, with a long of 8 it is padded with 4\nextra bytes.So the current RTA_* macros are copying 32 bytes into a 28\nbyte field on 64 bitsystems, where the field overflow did not occur\non the 32 bit systems.\n\nSince using sa_len required the use of an #ifdef which couldn\u0027t be used\ndirectly inside a #define, it made sense to move the copy into the\nfunction to allow typdef checking throughout and eliminate the hack\nto suppress compiler warnings.\n\nFixed declaration of cp in ifm_read after compiler noticed type mismatch.\n\nTested on 64bit OS X 10.7, FreeBSD 9.0 amd64 \u0026 i386 (32bit)\nusing gcc \u0026 clang\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3b33de676ac8e84b82f40520ecd0f4722e16b349",
      "tree": "28b0d91a6d3946ac244f7784274196a43c8fe0b9",
      "parents": [
        "7d50ad444ffadd4110152113cc9583db96b3ad67"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Wed Oct 10 22:10:14 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 11:11:36 2012 -0500"
      },
      "message": "zebra: kernel_socket: fix 64bit MacOS X alignment\n\nIn OS X 10.7 zebra crashed on invalid execution address.\n\nsockaddr padding in *_msghdr is observed to be 4 bytes in 64bit OS X.\n\nThe ROUNDUP macro assumed alignment on sizeof(long) which\nallocates 8 bytes on 64bit systems, 4 bytes on 32bit systems\nwhich is true for BSD generally.\n\nTest for Apple and use sizeof(int) which allocates 4 bytes on 32 \u0026 64bit\nsystems.\n\nTested on 64bit OS X 10.7, FreeBSD 9.0 amd64 \u0026 i386 (32bit)\nusing gcc \u0026 clang\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d1d3ac9bad0caf7a9c465bb382b924009f0d9168",
      "tree": "ee76b87f2b3b18ac109bf8b4268bfa5251ac3b34",
      "parents": [
        "b07458a055493dd37cb955ae90f11ae8bc334d3a"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Thu Oct 04 16:21:34 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 01 23:03:24 2012 -0700"
      },
      "message": "build: reorder libraries to address linker error\n\nThe linker on some systems (for example, Ubuntu 12.04 LTS x86_64)\nappears to be sensitive to the order in which libraries are\nspecified. On these systems, if a library \u0027A\u0027 depends on a library\n\u0027B\u0027, it has to be specified before \u0027B\u0027 when linking an executable.\n\n  * zebra/Makefile.am: Make sure LIBCAP comes after libzebra.\n\n  * tests/Makefile.am: Ensure libm comes after libbgp.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\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": "b0145ddb4bf75d2c8853aa3d0bc7c522f4f17531",
      "tree": "01df97d02a64742e9dbd4238f77d627c9f08eee7",
      "parents": [
        "945ea293399af6c9ff3efd07686ff30c3d2a3e8b"
      ],
      "author": {
        "name": "Nolan Leake",
        "email": "nolan@cumulusnetworks.com",
        "time": "Thu Sep 13 17:17:31 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "zebra: make static routes respect table setting\n\nMake static routes respect non-default routing tables.\n\nBEFORE PATCH\n------------\n\n! in zebra.conf\ntable 1\n\n! add static route\nvtysh\u003e ip route 10.0.0.0/30 eth0\n\ncumulus@net-top0:~$ ip route\ndefault via 192.168.0.2 dev eth0\n10.0.0.0/30 dev eth0  proto zebra\n192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.15\n\n! nothing in table 1\ncumulus@net-top0:~$ ip route show table 1\n\nAFTER PATCH\n-----------\n\n! in zebra.conf\ntable 1\n\n! add static route\nvtysh\u003e ip route 10.0.0.0/30 eth0\n\ncumulus@net-top0:~$ ip route\ndefault via 192.168.0.2 dev eth0\n192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.15\n\n! static route in table 1\ncumulus@net-top0:~$ ip route show table 1\n10.0.0.0/30 dev eth0  proto zebra\n\nSigned-off-by: Nolan Leake \u003cnolan@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c963c20346c0e3cd75735b88beded98389607cd5",
      "tree": "24973f9f7859e03fafdbaec0921d5c279597a1f2",
      "parents": [
        "57c639f01ec6be70ac858f412d32b638a9756bed"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:13 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:44 2012 +0200"
      },
      "message": "zebra: Add support for ZEBRA_NEXTHOP_IPV4_IFINDEX\n\nActually implement the IPV4_IFINDEX nexthop type that has been drifting\naround as a definition forever (without any warning about it being a\nplaceholder).\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7f062c217b262e362a3362c677dea6c5e820adf1",
      "tree": "a74cb6fa04df4af9f60d770de5e485c37ba2866d",
      "parents": [
        "1080c13f5d3979149c1950a1c46f45e2d4bd0dc8"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Feb 01 16:41:26 2010 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jul 13 18:54:09 2012 +0200"
      },
      "message": "zebra: lingering IP address after deletion (BZ#486)\n\nzebra address bookkeeping is a mess. this is just a workaround to have\nIPv4 address deletion somewhat working on Linux.\n\nthe if_unset_prefix call is synchronous, when it returns success the\naddress deletion completed successfully. this is either signaled by a\nnetlink ACK or by an OK return value from ioctl().\n\nThis version is wrapped by #ifdef HAVE_NETLINK so we don\u0027t touch the\nBSDs for now.\n\n* zebra/interface.c: On Linux, update zebra internal state after\n  deleting an address.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8046ba6ec4d6e87bf8da6563c0f3e5e66c4652b3",
      "tree": "1b38b2eae4e1cee042f96a42217b14647159bf0f",
      "parents": [
        "0ff4b9c96793898429052de576d8da368e48997e"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Thu May 31 13:30:28 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "snmp: let handlers accept OID from a lesser prefix\n\nMost table handlers do not expect to be given an OID whose prefix is\noutside what they can handle. This is not a problem with the SMUX\nimplementation since it always correct the OID such that the prefix\nmatches. However, this is not the case for the AgentX\nimplementation. A new function, smux_header_table() is used to do this\nnormalization.\n"
    },
    {
      "commit": "08d7f6533ecc0f935a76918c462982004534864d",
      "tree": "0e67590a8a2aba551439c46bfa8b33d7fba4feb7",
      "parents": [
        "6b1e37f8537fa2a4560de32e83ca5089763e2d39"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue May 22 22:29:17 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "build: use net-snmp-config to configure NetSNMP\n\nThe correct method to link to NetSNMP is to use net-snmp-config (which\nis like pkg-config). Explicit link to libcrypto is also dropped\n(NetSNMP libs are linked to libcrypto, no need to link Quagga to\nit). Moreover, @SNMP_INCLUDES@ is dropped because useless. Due to a\nbug in configure.ac, it was properly populated.\n"
    },
    {
      "commit": "6b1e37f8537fa2a4560de32e83ca5089763e2d39",
      "tree": "941dfbfbe62981ec214ac1e5a3f607368f4bf1d4",
      "parents": [
        "9e7a548ce421660b0d22bfeb90c2b2b53742aac7"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue May 22 22:15:20 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "build: only define HAVE_SNMP\n\nNetSNMP is the only SNMP implementation for Quagga. We don\u0027t need two\ndifferent symbols.\n"
    },
    {
      "commit": "9e7a548ce421660b0d22bfeb90c2b2b53742aac7",
      "tree": "4c962403808f98806781fb4ad15594152bc1effa",
      "parents": [
        "a47c5838e9f445ab887ad927706b11ccbb181364"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue May 22 14:32:22 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "build: allow configure and build in a separate directory\n\nSome .h files in lib/ are autogenerated. The search path should\ninclude the build directory and the source directory. They usually\nmatch but sometimes, they may be different. For example:\n\n $ mkdir build\n $ cd build\n $ ../configure\n $ make\n"
    },
    {
      "commit": "36735ed988f96810e78d0ace2f7d8e6397db5c50",
      "tree": "3a8f876383d07a33aa7b76d7519a75d8678bbb1f",
      "parents": [
        "42cb6b6655d0cc141374ec373220d244f81fbba0"
      ],
      "author": {
        "name": "Joachim Nilsson",
        "email": "troglobit@gmail.com",
        "time": "Wed May 09 13:38:36 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 09 13:51:54 2012 +0200"
      },
      "message": "zebra: fix up compilation without rtadv/IPv6\n\nlet\u0027s ground the rtadv.h file if route advertisements are disabled. And\nfix up the CLI for it, as well as move the \"show ip mroute\" to its\nproper place.\n\n  * zebra/rtadv.h: #ifdef RTADV\n  * zebra/main.c: #ifdef RTADV\n  * zebra/zebra_vty.c: move \"show ip mroute\" out of #ifdef IPV6\n\nFrom: Joachim Nilsson \u003ctroglobit@gmail.com\u003e\n[moved #ifdef RTADV to rtadv.h]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "42cb6b6655d0cc141374ec373220d244f81fbba0",
      "tree": "e4161a0645594a56713ac939dd450f598aeb0592",
      "parents": [
        "a4c06dec1ebe41dd4444d387478500e6022e2209"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Mon Apr 02 23:31:29 2012 +0530"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:13:49 2012 +0200"
      },
      "message": "zebra: feed Connected routes into MRIB\n\nThe SAFI_MULTICAST RIB needs to contain Connected routes so that the\nnexthop lookup does not fail and so that multicast routing daemons do\nnot need to sidestep and look into SAFI_UNICAST to be aware of connected\nsubnets.\n\n  * zebra/connected.c: add \u0026 delete connected in SAFI_MULTICAST\n\nSigned-off-by: G.Balaji \u003cbalajig81@gmail.com\u003e\n[merged add/delete patches]\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "a4c06dec1ebe41dd4444d387478500e6022e2209",
      "tree": "0270c50d6b4c1a7dec292599890e0aaaae3f99a1",
      "parents": [
        "682ca04c4032bfbf31e51df2472345fda1ff7b2c"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Fri Apr 20 14:28:40 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:34 2012 +0200"
      },
      "message": "zebra: no need to clear memory of the netlink buffers\n\nThe memory is always written before sending. Clearing it before use\nslows netlink_route_multipath() down considerably and it\u0027s pretty\nnoticeable in a full-internet table scenario loading.\n\n  * zebra/rt_netlink.c: subtract bulk buffer size from clear\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\n[reworded commit message]\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    }
  ],
  "next": "128293286a8be01b99ed60db53e19ce6e2669558"
}
