)]}'
{
  "log": [
    {
      "commit": "40278bd4c51939ccf8ec06ef1f33aedf8f05e86c",
      "tree": "569686df98a09491cf051593b91ea43206f956f4",
      "parents": [
        "b05c6ca57130f079f8a8a6686d9d4ffa5ff440f0"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:45 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:41 2016 +0000"
      },
      "message": "zebra: additional redistribute related logging\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b05c6ca57130f079f8a8a6686d9d4ffa5ff440f0",
      "tree": "5533689d6a3ff733280cd7a5458a562a8fe032d7",
      "parents": [
        "d7be042378eac103634ab62abf4b2a5ca225092d"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:44 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:41 2016 +0000"
      },
      "message": "zebra: make RTF_LLINFO optional to fix FreeBSD\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d7be042378eac103634ab62abf4b2a5ca225092d",
      "tree": "63901594ccd70f4fa15d9f9b90a578e8573f931b",
      "parents": [
        "0490729cc033a3483fc6b0ed45085ee249cac779"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:41:43 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:40 2016 +0000"
      },
      "message": "zebra: wire up \"debug zebra packet detail\"\n\nThere was no way to actually set ZEBRA_DEBUG_DETAIL, even though some\ndebug output was conditional to it.  Add CLI command.\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "eae18d16fefed42af33e63e096a2889b9c70b9cb",
      "tree": "ca1a184a44902f2d6a9c7dfa92cf50225b8e8cd8",
      "parents": [
        "0d27129ac5fd70b90820e3dde05c085d1a0f63a8"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Sat Nov 21 07:55:42 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Dec 09 08:54:37 2015 -0500"
      },
      "message": "zebra: Fix solaris build issue\n\nThe number of parameters to rib_add_ipv4 has been increased.\nSubmitter of original patch failed to modify solaris code path.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "0d27129ac5fd70b90820e3dde05c085d1a0f63a8",
      "tree": "c0267ab193459bd71f217dcbd0905ad0b9db012e",
      "parents": [
        "64e0ac29ddc43bb5b1a2999a8ebedbdff115e3ca"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Nov 19 07:21:30 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:16:24 2015 -0500"
      },
      "message": "zebra: Fix non usage of VRF_DEFAULT\n\nA vrf_id was being set to 0 instead of VRF_DEFAULT\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "642577340cfb7ad66d021ab2b86d72f7cdde03bc",
      "tree": "981104744f3fb913ec3e5a006199e6810101ab55",
      "parents": [
        "8253b73c3c71d4102c0010f63b59b2829f3b0f90"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Nov 20 08:33:30 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:16:12 2015 -0500"
      },
      "message": "zebra: Cleanup RTADV define\n\nThe RTADV define was not being set correctly or consistently.\nMake the code consistent with our HAVE_IPV6 define.\n\nIf the user wants to explicitly turn it off then they should\nrun --disable-rtadv from the configure cli\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "c1900e09a7fdd70437f3ba0329868f1eee3f5a1a",
      "tree": "5f1032936f4413f7dc12935eabbdf62f940ffd12",
      "parents": [
        "949b719eac0c8b51c73f144eb035fab27a16c2a6"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:40 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Fix change of distance on ipv6 route creating duplicate routes\n\nIf you enter:\n\nipv6 route 2002:44:44:44::44/128 swp1 4\nipv6 route 2002:44:44:44::44/128 swp1 99\n\nYou get:\n\nhost-111# show ipv6 route\nCodes: K - kernel route, C - connected, S - static, R - RIPng,\nO - OSPFv6, I - IS-IS, B - BGP, A - Babel, T - Table,\n\u003e - selected route, * - FIB route\nS 2002:44:44:44::44/128 [99/0] is directly connected, swp1\nS\u003e* 2002:44:44:44::44/128 [4/0] is directly connected, swp1\n\nThis problem is fixed in the ipv4 code path.  Copying the same\ncode from the ipv4 into the ipv6 code path fixes the issue.\n\nWith the fix:\n\nhost-111(config)# ipv6 route 2002:44:44:44::44/128 swp1 4\nhost-111(config)# do show ipv6 route\nCodes: K - kernel route, C - connected, S - static, R - RIPng,\n       O - OSPFv6, I - IS-IS, B - BGP, A - Babel, T - Table,\n       \u003e - selected route, * - FIB route\n\nS\u003e* 2002:44:44:44::44/128 [4/0] is directly connected, swp1\nC * fe80::/64 is directly connected, swp1\nC\u003e* fe80::/64 is directly connected, eth0\nhost-111(config)# ipv6 route 2002:44:44:44::44/128 swp1 99\nhost-111(config)# do show ipv6 route\nCodes: K - kernel route, C - connected, S - static, R - RIPng,\n       O - OSPFv6, I - IS-IS, B - BGP, A - Babel, T - Table,\n       \u003e - selected route, * - FIB route\n\nS\u003e* 2002:44:44:44::44/128 [99/0] is directly connected, swp1\nC * fe80::/64 is directly connected, swp1\nC\u003e* fe80::/64 is directly connected, eth0\nhost-111(config)#\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "949b719eac0c8b51c73f144eb035fab27a16c2a6",
      "tree": "ca22748a46ab77ab04354d13890335a3bcb690a1",
      "parents": [
        "a979ab70e0ec51f3cf779edae509f3c52be0b0f4"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:39 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Combine static_uninstall_ipv[4|6] into one function\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "a979ab70e0ec51f3cf779edae509f3c52be0b0f4",
      "tree": "f81b6472598e824ea37e3f17e1dd8b167044fbeb",
      "parents": [
        "9bcdd1a252ba84424eb06e84adf7fb48ae66ce1f"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:38 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: combine static_ipv[4|6]_nexthop_same into one function\n\nCombine the static_ipv[4|6]_nexthop_same into static_nexthop_same.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "9bcdd1a252ba84424eb06e84adf7fb48ae66ce1f",
      "tree": "e604d71dcc41c9449d91c6d85c732320d6a112ec",
      "parents": [
        "0d955affd51df42dd5ae24b0d41edd992fb59a78"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:37 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Combine static_install_ipv[4|6]\n\nCombine the static_install_ipv[4|6] function calls into\nstatic_install_route.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "0d955affd51df42dd5ae24b0d41edd992fb59a78",
      "tree": "8cdf0f263b5c9950c598e6ef2908efbb55004845",
      "parents": [
        "d4c27d656d072fbd81003a71c4f3391c96852c60"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:36 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Remove HAVE_IPV6 from rib.h and zebra_rib.c\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d4c27d656d072fbd81003a71c4f3391c96852c60",
      "tree": "27f40829775ca271f6a7d7b5031284b264c0f479",
      "parents": [
        "b11f3b54c842117e22e2f5cf1561ea34eee8dfcc"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 04 13:26:35 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: Collapse struct static_ipv[4|6] into struct static_route\n\nThe \u0027struct static_ipv4\u0027 and \u0027struct static_ipv6\u0027 structures\nare essentially the same.  Collapse them into one data structure\n\u0027struct static_route\u0027.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "b11f3b54c842117e22e2f5cf1561ea34eee8dfcc",
      "tree": "c31f9893baa2a05db24ea72d1370fb6b11f59c20",
      "parents": [
        "7eb6136b2732d4782360f9f376336c6d4f667ff0"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Mon Nov 02 16:50:07 2015 +0200"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: implement per-route mtu handling\n\nThis commits allow overriding MTU using netlink attributes on\nper-route basis. This is useful for routing protocols that can\nadvertice prefix specific MTUs between routers (e.g. NHRP).\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "7eb6136b2732d4782360f9f376336c6d4f667ff0",
      "tree": "5e77b44139cf542a18a949d1204ace4316b474f1",
      "parents": [
        "929a26a7cf80b2df9981595e6bcfcfc4a970052a"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Mon Nov 02 16:50:05 2015 +0200"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:10 2015 -0500"
      },
      "message": "zebra: make ZEBRA_FLAG_CHANGED internal status\n\nThis flag is used internally in zebra only. And it makes no sense\nto expose it over the zclient API, as having it set from client\ncould corrupt the internal state.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "983525e8b560fc44d2214ca3f6d72af809b6ebd9",
      "tree": "e746b161aa9266c270d80e2a51e01e49dad87e44",
      "parents": [
        "6d853c43d9dd315eb42211150b7a4a43bae4cb62"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Oct 22 11:35:16 2015 +0300"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:18 2015 -0500"
      },
      "message": "zebra: fix rtadv detection\n\nThe GLIBC macro tests were just plain wrong. Glibc 2.1 is ancient\nand the support should be detected via configure.ac test, not\nmacro test. Build with HAVE_RTADV but !RTADV is broke after vrf,\nso for now, just define RTADV always if HAVE_RTADV is there.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "283596fd6d49a5b2861a6923db9a88628ef0eca4",
      "tree": "1b461a1fea8840efaafd1250f729831be91fea9f",
      "parents": [
        "be62b17c736ea06181f2788e3011066830555610",
        "fc1c114aab24fe47bc6a1976c1c602d507fa4e69"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "message": "Merge \u0027patch-tracking/4/proposed/netdef-solaris\u0027 into accepted\n"
    },
    {
      "commit": "7125293d65d73a451ec203c8c1630c236171f5a3",
      "tree": "f9d118c9a8f8374d69fb9c75c87531a2ca478fb2",
      "parents": [
        "fd1c1a133af47ae5533a5ed41b73ff62e7aa1058"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Sep 24 09:25:19 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:21 2015 +0000"
      },
      "message": "lib: zclient.c remove extern struct thread_master *\n\nzclient.c depended upon link time inclusion of a\nextern struct thread_master *master.  This is a violation of the\nnamespace of the calling daemon.  If a library needs the pointer\npass it in and save it for future use.\n\nThis code change also makes the zclient code consistent with\nthe other lib functions that need to schedule work on your behalf\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7904509bdf9ec7fad3ac1aee763ae39e7c308c52",
      "tree": "3bb692701804c22e215828b87f4c11451b5a93e1",
      "parents": [
        "8fa1d027f23115dcb1c38b09c6e46edf5b8f7238"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 22:09:30 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:47 2015 -0700"
      },
      "message": "zebra/if_ioctl_solaris: Make foo static\n\nmake interface_ioctl_ioctl() and if_get_index() static\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8fa1d027f23115dcb1c38b09c6e46edf5b8f7238",
      "tree": "73ed587d0f0967ee78e93f64d95be6ba3b9aaf68",
      "parents": [
        "ebd2687a531a0f9b9449f6fcf7001f53afa99d02"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 21:55:38 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:47 2015 -0700"
      },
      "message": "zebra/rt_socket: Fix warnings\n\nFix warning about unused sin_masklen / sin6_masklen\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ebd2687a531a0f9b9449f6fcf7001f53afa99d02",
      "tree": "b37a4a6bdb5a3b5dfc3e69a6e882f5dad76925ba",
      "parents": [
        "f90ce64d68cf0ad56ff0370338ec58c883a3448d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 21:40:31 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "zebra/rtread_getmsg: fix sign warnings\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "da1b7eaa0ac5d590818e1cde92a9807a2f0e07f2",
      "tree": "17bfadeef20983eb5cd070734f0d2b02f23a9663",
      "parents": [
        "a2b503131b188292ede08df99309bcbef4bd1a52"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 20:36:20 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "solaris: more warnings fixed\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a2b503131b188292ede08df99309bcbef4bd1a52",
      "tree": "9e834012068d8f2106fd3846fac62d080e3248d8",
      "parents": [
        "fe56125bbcbc0c503ae6bd0b934a4940c4693b4f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 19:35:41 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "solaris: no ROUNDUP\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fe56125bbcbc0c503ae6bd0b934a4940c4693b4f",
      "tree": "25dc1d7b525c4c5cfead2fec9d4061eed4f9399a",
      "parents": [
        "ba6cd587b4114528c8d6af439c4f49c7bb95a92b"
      ],
      "author": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Tue Sep 15 19:12:31 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "zebra/ioctl_solaris: Fix use of prefix2str in if_prefix_add/delete_ipv6\n\nFirst argument of prefix2str pointed to ifc-\u003eaddress-\u003eprefix, but\nno prefix exists in address. Should have been ifc-\u003eaddress.\n\nSigned-off-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6d9362274e8ba2d57ffe17aa735eb941ac3d5fbc",
      "tree": "690bb673621812ce671cac14927933af460a457c",
      "parents": [
        "285ed0c62af4f57902d5deacc621f290fdeec276"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:59:04 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "zebra/solaris: fix uninitialised vars\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "285ed0c62af4f57902d5deacc621f290fdeec276",
      "tree": "ef1559318aef1e718f09d829c586c009e02920cf",
      "parents": [
        "12bbd62112724483f72c4040a4c4b585aff8eb54"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:46:53 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "build/solaris: create ioctl_solaris.h\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c8394ace7081ef0e71f3d162067c83c2629fc088",
      "tree": "7736d5d1ca6d3ea79c3f43e32dccf4baf0fa1094",
      "parents": [
        "75daab1784f515104ceef747d134981ecee7b0af"
      ],
      "author": {
        "name": "Morgan Stewart",
        "email": "morgan@cumulusnetworks.com",
        "time": "Thu Sep 17 19:04:30 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:46 2015 +0100"
      },
      "message": "Fixed if_add_update possible null dereference\n\nCoverity Scan #1221454\nIn zebra/interface.c if_data could be null dereferenced without early\ncheck.\n\nSigned-off-by: Morgan Stewart \u003cmorgan@cumulusnetworks.com\u003e\nReviewed-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "26b663da7ea8a3efae816d6e7fda293bdc1082f5",
      "tree": "dfaf1057216d4dd0e750ff1a2aa2a2653a1c6202",
      "parents": [
        "782c882077b5a63213b3d160535d5e8259f6df61"
      ],
      "author": {
        "name": "Morgan Stewart",
        "email": "morgan@cumulusnetworks.com",
        "time": "Wed Sep 16 13:17:54 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "zebra: Fix leaked sockets in rtadv.c\n\nCoverity Scan #709790\nIn zebra/rtadv.c: rtadv_make_socket leaks socket for error cases.\nAdded lines to close the socket for each error case or return.\n\nSigned-off-by: Morgan Stewart \u003cmorgan@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "782c882077b5a63213b3d160535d5e8259f6df61",
      "tree": "31a9ed3f8d228f41080e684557b48939943ee6a8",
      "parents": [
        "8ccd74c29f5242f312c1e0561497558482c9be65"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Mon Sep 14 13:29:37 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "zebra: rib-\u003enexthop_num is double incremented\n\nWhile reading linux kernel netlink messages, rib-\u003enexthop_num is incremented\nin the read loop as well as the underlying nexthop_add() function call.  This\nnumber should only be incremented in one spot.  Removing the increment from\nthe read loop and allowing the underlying code to track this data as it is\nalready.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "8ccd74c29f5242f312c1e0561497558482c9be65",
      "tree": "5cfa8948b7f55bce37923a2607c4d7a4c21b241d",
      "parents": [
        "8965be4baaa1a4c619cbb4a8a10d15a72d80b60d"
      ],
      "author": {
        "name": "Hiroshi Yokoi",
        "email": "hiroshi.yokoi.0313@gmail.com",
        "time": "Tue Sep 08 11:52:20 2015 +0900"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "zebra: fix addr sent in ZEBRA_IPV6_NEXTHOP_LOOKUP\n\nI found that zebra doesn\u0027t set correct IPv6 address in its result because of\nusing *addr\u0027s address.  Although I\u0027m using 0.99.22, the latest version has\nalso use \"\u0026addr\".  Shouldn\u0027t it use \"addr\"?\n\nSigned-off-by: Hiroshi Yokoi \u003chiroshi.yokoi.0313@gmail.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "52c0bc739b1184621525e64720b944268d6b0eeb",
      "tree": "a556a51ef56f6ccaa63c942c9880c684fc4b3bae",
      "parents": [
        "c8ee940cc695cbcf9c0156ee6f72730f1fff9814"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Thu Aug 20 21:30:17 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 03 16:44:48 2015 +0100"
      },
      "message": "build: Remove the old PIC/PIE patch, let libtool sort it out\n\n* Remove the old change from \u002708 to add in PIE arguments at automake level.\n  Versions of libtool since then know how to deal with -fpie and do the right\n  thing according to whether its building shared or executable objects.\n  So just pass \u0027-fpie\u0027 as CFLAG and let libtool do its thing.\n"
    },
    {
      "commit": "8b84c2762ccd2d47a115824ee083d33e697a7741",
      "tree": "6f561e4d5b78e3cc5b8388d7cbaf6dbe512ce50b",
      "parents": [
        "8c56b44de0fa8100b6f0b367dbc604d41b94025f"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Sat May 30 18:57:54 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 04 16:39:27 2015 +0100"
      },
      "message": "Removal of \u0027show ip mroute\u0027\n\nThe \u0027show ip mroute\u0027 in zebra_vty.c collided with the\n\u0027show ip mroute\u0027 command in pim_cmd.c.  The \u0027show ip rpf\u0027\ncommand is functionally equivalent to the zebra_vty.c\n\u0027show ip mroute\u0027.  Therefore remove the \u0027show ip mroute\u0027 command\nin zebra_vty.c.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "8c56b44de0fa8100b6f0b367dbc604d41b94025f",
      "tree": "c7f04ccf33183b461c10b636dbe48ded10222e06",
      "parents": [
        "9487b4fcfc0754109e49240214e283fd58756843"
      ],
      "author": {
        "name": "Kaloyan Kovachev",
        "email": "kkovachev@varna.net",
        "time": "Mon Jun 15 17:08:48 2015 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:47:57 2015 +0100"
      },
      "message": "Fix _netlink_route_debug message\n"
    },
    {
      "commit": "c99f3481a598e9cadd1de96714f6b5df9ad85c4a",
      "tree": "aac6df566f28c13fce5c9f02275f159fab73a24d",
      "parents": [
        "758fb8f99a7bfac3d31c419fd1a5694fc5f33f6a"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Oct 16 09:52:36 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 10:24:12 2015 +0200"
      },
      "message": "*: add VRF ID in the API message header\n\nThe API messages are used by zebra to exchange the interfaces, addresses,\nroutes and router-id information with its clients. To distinguish which\nVRF the information belongs to, a new field \"VRF ID\" is added in the\nmessage header. And hence the message version is increased to 3.\n\n* The new field \"VRF ID\" in the message header:\n\n    Length    (2 bytes)\n    Marker    (1 byte)\n    Version   (1 byte)\n    VRF ID    (2 bytes, newly added)\n    Command   (2 bytes)\n\n  - Client side:\n\n    - zclient_create_header() adds the VRF ID in the message header.\n    - zclient_read() extracts and validates the VRF ID from the header,\n      and passes the VRF ID to the callback functions registered to\n      the API messages.\n    - All relative functions are appended with a new parameter \"vrf_id\",\n      including all the callback functions.\n    - \"vrf_id\" is also added to \"struct zapi_ipv4\" and \"struct zapi_ipv6\".\n      Clients need to correctly set the VRF ID when using the API\n      functions zapi_ipv4_route() and zapi_ipv6_route().\n    - Till now all messages sent from a client have the default VRF ID\n      \"0\" in the header.\n    - The HELLO message is special, which is used as the heart-beat of\n      a client, and has no relation with VRF. The VRF ID in the HELLO\n      message header will always be 0 and ignored by zebra.\n\n  - Zebra side:\n\n    - zserv_create_header() adds the VRF ID in the message header.\n    - zebra_client_read() extracts and validates the VRF ID from the\n      header, and passes the VRF ID to the functions which process\n      the received messages.\n    - All relative functions are appended with a new parameter \"vrf_id\".\n\n* Suppress the messages in a VRF which a client does not care:\n\n  Some clients may not care about the information in the VRF X, and\n  zebra should not send the messages in the VRF X to those clients.\n\n  Extra flags are used to indicate which VRF is registered by a client,\n  and a new message ZEBRA_VRF_UNREGISTER is introduced to let a client\n  can unregister a VRF when it does not need any information in that\n  VRF.\n\n  A client sends any message other than ZEBRA_VRF_UNREGISTER in a VRF\n  will automatically register to that VRF.\n\n  - lib/vrf:\n\n    A new utility \"VRF bit-map\" is provided to manage the flags for\n    VRFs, one bit per VRF ID.\n\n    - Use vrf_bitmap_init()/vrf_bitmap_free() to initialize/free a\n      bit-map;\n    - Use vrf_bitmap_set()/vrf_bitmap_unset() to set/unset a flag\n      in the given bit-map, corresponding to the given VRF ID;\n    - Use vrf_bitmap_check() to test whether the flag, in the given\n      bit-map and for the given VRF ID, is set.\n\n  - Client side:\n\n    - In \"struct zclient\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          default_information\n      These flags are extended for each VRF, and controlled by the\n      clients themselves (or with the help of zclient_redistribute()\n      and zclient_redistribute_default()).\n\n  - Zebra side:\n\n    - In \"struct zserv\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          redist_default\n          ifinfo\n          ridinfo\n\n      These flags are extended for each VRF, as the VRF registration\n      flags. They are maintained on receiving a ZEBRA_XXX_ADD or\n      ZEBRA_XXX_DELETE message.\n\n      When sending an interface/address/route/router-id message in\n      a VRF to a client, if the corresponding VRF registration flag\n      is not set, this message will not be dropped by zebra.\n\n    - A new function zread_vrf_unregister() is introduced to process\n      the new command ZEBRA_VRF_UNREGISTER. All the VRF registration\n      flags are cleared for the requested VRF.\n\n  Those clients, who support only the default VRF, will never receive\n  a message in a non-default VRF, thanks to the filter in zebra.\n\n* New callback for the event of successful connection to zebra:\n\n  - zclient_start() is splitted, keeping only the code of connecting\n    to zebra.\n\n  - Now zclient_init()\u003d\u003ezclient_connect()\u003d\u003ezclient_start() operations\n    are purely dealing with the connection to zbera.\n\n  - Once zebra is successfully connected, at the end of zclient_start(),\n    a new callback is used to inform the client about connection.\n\n  - Till now, in the callback of connect-to-zebra event, all clients\n    send messages to zebra to request the router-id/interface/routes\n    information in the default VRF.\n\n    Of corse in future the client can do anything it wants in this\n    callback. For example, it may send requests for both default VRF\n    and some non-default VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "758fb8f99a7bfac3d31c419fd1a5694fc5f33f6a",
      "tree": "4aa860a2b96ec03622376bf3753840155ab478fe",
      "parents": [
        "d6cf5134c05a7890738411852d9357ee5bb322f3"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Jul 03 18:23:09 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 10:23:32 2015 +0200"
      },
      "message": "zebra, lib/memtypes.c: the netlink sockets work per VRF\n\nThis patch lets the netlink sockets work per VRF.\n\n* The definition of \"struct nlsock\" is moved into zebra/rib.h.\n\n* The previous global variables \"netlink\" and \"netlink_cmd\" now\n  become the members of \"struct zebra_vrf\", and are initialized\n  in zebra_vrf_alloc().\n\n* All relative functions now work for a specific VRF, by adding\n  a new parameter which specifies the working VRF, except those\n  functions in which the VRF ID can be obtained from the interface.\n\n* kernel_init(), interface_list() and route_read() are now also\n  working per VRF, and moved from main() to zebra_vrf_enable().\n\n* A new function kernel_terminate() is added to release the\n  netlink sockets. It is called from zebra_vrf_disable().\n\n* Correct VRF ID, instead of the previous VRF_DEFAULT, are now\n  passed to the functions of processing interfaces or route\n  entries.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d6cf5134c05a7890738411852d9357ee5bb322f3",
      "tree": "d39b1880b82497d68b1d44623278eec27f4ef349",
      "parents": [
        "49f76097fc191761db8482aa3bf6e6322c52c647"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 08:31:38 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 08:31:38 2015 +0200"
      },
      "message": "zebra: fix VRF code for *BSD\n\nThere seems to be no rtm_table in struct rt_msghdr, at least on the\nsystems I have access to...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "49f76097fc191761db8482aa3bf6e6322c52c647",
      "tree": "c7aef97b17e3dd41b19fa53535ecf1a9ca8aafb9",
      "parents": [
        "267ceb2ce3adf4ce1357deb7ce48f151d6c58b92"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:10 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: maintain RTADV per VRF\n\nThis moves the global variable \"rtadv\" into the \"struct zebra_vrf\",\nso that RTADV feature can work per VRF.\n\n* rtadv.c/rtadv.h:\n\n  Add a proper parameter to the functions so that the entity of the\n  \"struct zebra_vrf\" and interfaces can be obtained from the specified\n  VRF.\n\n  The old rtadv_init() is splitted into:\n  - rtadv_cmd_init(): it installs the RTADV commands; is called from\n                      main();\n  - new rtadv_init(): it creates the socket; is called from\n                      zebra_vrf_enable().\n\n  rtadv_terminate() is added to stop the threads, close the socket and\n  clear the counters. It is called from zebra_vrf_disable().\n\n  rtadv_make_socket() now calls vrf_socket() to create a socket in\n  the VRF.\n\n* interface.h and rib.h: define the macro RTADV.\n* main.c: according changes, refer to rtadv.c.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "267ceb2ce3adf4ce1357deb7ce48f151d6c58b92",
      "tree": "0b86ed01d5d2ea61f0bb509a60cad32916de061e",
      "parents": [
        "fb2bfc1ba2416c1561bc9bfb30dfb5adf3e65616"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:09 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: add hooks upon enabling / disabling a VRF\n\nzebra_vrf_enable() is the callback for VRF_ENABLE_HOOK.\nIt presently needs do nothing.\n\nzebra_vrf_disable() is the callback for VRF_DISABLE_HOOK.\nIt presently withdraws routes, shuts down interfaces, and\nclears the router-id candidates in that VRF.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ac19a449261bf69e83827f4bb0c6e5526277b41b",
      "tree": "a93cc7cde55a9c0c65da4b09fc309b503807ffda",
      "parents": [
        "7aaf4ea990398335bd40b56cc9586ab6a7178a4f"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:07 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: maintain the router-id per VRF\n\nA router may need different identifier among the VRFs. So move the\nmaintenance of router-id per VRF.\n\n* rib.h:\n\n  Move the previous global variables in router-id.c into the\n  \"struct zebra_vrf\":\n  - struct list _rid_all_sorted_list/*rid_all_sorted_list\n  - struct list _rid_lo_sorted_list/*rid_lo_sorted_list\n  - struct prefix rid_user_assigned\n\n* router-id.c/router-id.h:\n\n  A new parameter \"vrf_id\" is added to all the router-id APIs.\n  Their operations are done only within the specified VRF.\n\n  A new command \"router-id A.B.C.D vrf N\" is added to allow\n  manual router-id for any VRF.\n\n  The old router_id_init() function is splitted into two:\n  - router_id_cmd_init(): it only installs the commands\n  - router_id_init(): this new one initializes the variables for\n                      a specified VRF\n\n* zebra_rib.c: Add new functions zebra_vrf_get/lookup() called\n               from router-id.c.\n\n* main.c: Replace router_id_init() with router_id_cmd_init() and\n          call the new router_id_init() in zebra_vrf_new().\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7aaf4ea990398335bd40b56cc9586ab6a7178a4f",
      "tree": "12800739e1a926cff27d4d676323be35318ef8ac",
      "parents": [
        "8970f74ec77f93eb862ab8803d9d7c76c7128940"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:06 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: configure static routes in any VRF\n\nIntroduce new commands to configure static routes in any VRF, by\nappending the old static route commands with a new parameter\n\"vrf N\".\n\nA new parameter \"const char *vrf_id_str\" is added to the functions\nzebra_static_ipv4() and static_ipv6_func() to get the configured\nVRF ID.\n\nA new member \"vrf_id\" is added to the \"struct static_ipv4\" and\n\"struct static_ipv6\", indicating which VRF this static route is\nconfigured in.\n\nBut till now, no interface can exist in any non-default VRF. So\nthese static routes in non-default VRFs are kept inactive.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8970f74ec77f93eb862ab8803d9d7c76c7128940",
      "tree": "9659720ad515d0aea454ab42bc424ea34150f7b9",
      "parents": [
        "1885d0a5274cd78e46ad6c22171a5240a2f27f64"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:05 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: lookup the address in all VRFs when set the route-map rule \"set src\"\n\nWhen configuring the route-map rule \"set src A.B.C.D\", it checked\nwhether the source address exists on some interface.\n\nNow it checks the source address throughout all VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1885d0a5274cd78e46ad6c22171a5240a2f27f64",
      "tree": "acaf9496dcdd722400d5634e58180f17350cc0b6",
      "parents": [
        "4364ee5b6f65008fe19225f05e489ad8257a7df8"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:04 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "zebra: let the route-map rule \"match interface\" work for VRFs\n\nIntroduce a new \"struct nexthop_vrfid\" to specify a nexthop together\nwith the VRF ID it belongs to.\n\nThus in route_match_interface(), we can lookup the interface from\nthe correct VRF.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4364ee5b6f65008fe19225f05e489ad8257a7df8",
      "tree": "dd6b5e9e5e5e7cf5c212b3b9182d6231d8166e97",
      "parents": [
        "0d0686f98e64017415071e590bde262f0ab5a4c9"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:03 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:30 2015 +0200"
      },
      "message": "zebra: show routes in a specified VRF or all VRFs\n\nThe present \"show ip[v6] [m]route [xxx]\" and \"show ip rpf [xxx]\"\ncommands now show routes only in the default VRF.\n\nA new option is introduced to show routes in a specified VRF:\n    show ip[v6] [m]route [xxx] vrf N\n    show ip rpf [xxx] vrf N\n\nand a new option is used to show routes through all VRFs:\n    show ip[v6] [m]route [xxx] vrf all\n    show ip rpf [xxx] vrf all\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\n[DL: conflicts resolved]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0d0686f98e64017415071e590bde262f0ab5a4c9",
      "tree": "a8ffef2548d24ce9a7662a20573d2a26a8e17142",
      "parents": [
        "a2854770ff839553c9444193e84a1593645fa848"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:02 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:46:17 2015 +0200"
      },
      "message": "zebra: let FIB stand for its respective VRF\n\nA new member \"vrf_id\" is added to \"struct rib\", reflecting the VRF\nwhich it belongs to.\n\nA new parameter \"vrf_id\" is added to the relative functions where\nneed, except those:\n- which already have the parameter \"vrf_id\"; or\n- which have a parameter in type of \"struct rib\"; or\n- which have a parameter in type of \"struct interface\".\n\nAll incoming routes are set to default VRF.\n\nIn fact, all routes in FIB are kept in default VRF. And the logic\nis not changed.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\n[DL: conflicts fixed + compile warning fix]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a2854770ff839553c9444193e84a1593645fa848",
      "tree": "f10e20591ccf74ae1e5a9015cb9dd6aadfecd67d",
      "parents": [
        "471ea39ce54537194ff2f22420589ddec5ef5ada"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:01 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:22:58 2015 +0200"
      },
      "message": "zebra: show interfaces in a specified VRF or all VRFs\n\nThe following commands only show interfaces in the default VRF:\n    show interface\n    show interface IFNAME\n    show interface description\n\nNew options are introduced to show interfaces in a specified VRF:\n    show interface vrf N\n    show interface IFNAME vrf N\n    show interface description vrf N\n\nor all VRFs:\n    show interface vrf all\n    show interface IFNAME vrf all\n    show interface description vrf all\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "471ea39ce54537194ff2f22420589ddec5ef5ada",
      "tree": "65b04ef42d4ece7e4a44d230fcc0a15f388755c4",
      "parents": [
        "5a5702fac5458d63d7a099c4db7ac387afefd2de"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:00 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:59:36 2015 +0200"
      },
      "message": "lib, zebra, vtysh: configure an interface in non-default VRF\n\nIntroduce a new command \"interface IFNAME vrf N\" to configure an\ninterface in the non-default VRF.\n\nTill now, only zebra uses this command. Other daemons will install\nthe command when they support multiple VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "126215c1238eb42cc92d23aefbe1fac3b204438f",
      "tree": "22910b50f39003e297efc6236711581cbf3b2ada",
      "parents": [
        "2fc97f6335dd5d7df2c285b363c6ef56bb98dcf8"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:58 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "*: call if_init()/if_terminate() from vrf_init()/vrf_terminate()\n\nLater, an interface will belong to a specific VRF, and the interface\ninitialization will be a part of the VRF initialization. So now call\nif_init() from vrf_init(), and if_terminate() from vrf_terminate().\n\nDaemons have the according changes:\n- if if_init() was called or \"iflist\" was initialized, now call\n  vrf_init() instead;\n- if if_terminate() was called or \"iflist\" was destroyed, now call\n  vrf_terminate() instead.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2fc97f6335dd5d7df2c285b363c6ef56bb98dcf8",
      "tree": "22361093e3faf9587d055474c1163796aae94194",
      "parents": [
        "41f44a23e86a65a5cad7e5e8cafd7e935f153232"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:57 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "lib, zebra: add \"vrf_id\" into the \"struct interface\"\n\nLater, an interface will belong to a specific VRF. Now we add a\nproperty \"vrf_id\" to the \"struct interface\", and keep it as the\ndefault value 0.\n\nThis property is shown when displaying interfaces information.\nIt is also added in some logs.\n\nThis is just the preparation to move the interace list into the\n\"struct vrf\". The main logic is not changed.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "41f44a23e86a65a5cad7e5e8cafd7e935f153232",
      "tree": "1fcffa568b188ae66e5f18df09f6960522dfe564",
      "parents": [
        "395828eea809e8b2b8c5824d3639cefedd7aa9f0"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:56 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "lib, zebra: move \"struct vrf\" to be a lib module\n\nPreviously \"struct vrf\" is defined locally in zebra. Now it is moved\nto be a lib module.\n\nThis is the first step to support multi-VRF in quagga. The\nimplementation is splitted into small patches for the purpose of\neasy review.\n\n* lib:\n    \"struct vrf\" with basic members is defined in vrf.c. The member\n    \"void *info\" is for user data.\n\n    Some basic functions are defined in vrf.c for adding/deleting/\n    looking up a VRF, scanning the VRF table and initializing the\n    VRF module.\n\n    The type \"vrf_id_t\" is defined specificly for VRF ID.\n\n* zebra:\n    The previous \"struct vrf\" is re-defined as \"struct zebra_vrf\";\n    and previous \"vrf\" variables are renamed to \"zvrf\".\n\n    The previous \"struct vrf\" related functions are removed from\n    zbera_rib.c. New functions are defined to maintain the new\n    \"struct zebra_vrf\".\n\n    The names vrf_xxx are reserved for the functions in VRF module.\n    So:\n    - the previous vrf_table() are renamed to zebra_vrf_table();\n    - the previous vrf_static_table() are renamed to\n      zebra_vrf_static_table().\n\n    The main logic is not changed.\n\n    BTW: Add a statement to zebra_snmp.c telling that the SNMP is\n         running only for the MIBs in the default VRF.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "be6335d682c5ee1b6930345193eda875705fbab2",
      "tree": "2107740224a8a6b3f44241ba71d9be562f138232",
      "parents": [
        "53a5c39c705f917567d5b1764f1fe12ad5c5e577"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Sat May 23 11:08:41 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jun 01 16:50:58 2015 +0200"
      },
      "message": "zebra: use prefix2str for logging where possible\n\nThis makes code more robust, consice and readable.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "53a5c39c705f917567d5b1764f1fe12ad5c5e577",
      "tree": "fd116539e632b8c5a0cbdd0312134767e1966f78",
      "parents": [
        "41eb9a4305fbcb206c900a18af7df7115d857d60"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Sat May 23 11:08:40 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jun 01 16:31:21 2015 +0200"
      },
      "message": "zebra/vty: use prefix2str and unify show ip/ipv6 route code\n\nUse prefix2str where possible. As now ip/ipv6 are practically\nidentical, they are merged removing unneeded code duplication.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f85592e05ae6463727433893e61afd1081fcf7e0",
      "tree": "2a87863a6f00342334d260a25d02ccda99128a89",
      "parents": [
        "483abc037b0ac4b3ed168c4810bb14ea338fa80c"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri May 22 13:41:00 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri May 29 07:31:01 2015 +0200"
      },
      "message": "zebra: simplify redistribution code\n\nMerge the conditionals as one to avoid code duplication.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b40e178af12570467f0116d6b1684cb1b961e407",
      "tree": "652143a283cdfaa1f9d735b29798b2f09fb3633a",
      "parents": [
        "e38545bb2cd155306fd78223e0c579117fcfae90"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:43:00 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 09:38:03 2015 +0200"
      },
      "message": "zebra: fix rtadv check for non-glibc linux\n\nDefault RTADV enabled for non-glibc linux (fixes check for musl libc).\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e38545bb2cd155306fd78223e0c579117fcfae90",
      "tree": "d9cd5f1b36d67d081e564314c7b3f2b6a0bc5547",
      "parents": [
        "491417ac6383e2ea557951b24eb7bd3fffb69394"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:42:59 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 09:37:55 2015 +0200"
      },
      "message": "zebra: fix build with rtadv disabled\n\nOtherwise we get warning on rtadv_init() prototype not being\ndefined when compiling rtadv.c (as dummy stub is provided always).\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "dc684eb9976f8a1170312be42d142effce26b568",
      "tree": "1d1354118bc0b063e7048c86154339aa2f141d1c",
      "parents": [
        "06bd420d4646333bc7ed9964e348f19a942fcfe2",
        "e691c3bb972c0baf610d9e210ce20ea6546e1de0"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Apr 23 13:31:17 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Apr 23 13:36:08 2015 +0200"
      },
      "message": "Merge branch \u0027volatile/fix_warnings\u0027\n\nThanks to Donald Sharp and Greg Troxel for providing feedback!\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "193e78f2460a537695e34368a29fc5cd02e4e1f5",
      "tree": "50f23a15fd6847b8f39b8d003b0a6a6ff716a706",
      "parents": [
        "6ed810d986df5d843c89166fee6b73a71222b7bd"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:42:30 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:44:57 2015 +0200"
      },
      "message": "zebra: fix NetBSD interface stats printf\n\n\"format \u0027%qu\u0027 expects type \u0027long long unsigned int\u0027, but argument 3 has\ntype \u0027__uint64_t\u0027\"\n\nMove to %llu, which is more standard.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6ed810d986df5d843c89166fee6b73a71222b7bd",
      "tree": "86ac070fc69ae3e62fc6bf5d8750990bf0fa6c3e",
      "parents": [
        "c313895dec3c176584d99f7b8684ddc3f9141d88"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:13:07 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:44:56 2015 +0200"
      },
      "message": "*: fix more initialisers (for BSD)\n\nFreeBSD and NetBSD spew a few more warnings about variable initialisers.\nFound with OSR\u0027s/NetDEF\u0027s fancy new CI system.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4b6c33282973c9e1545a519f2a51bda3cf42ae21",
      "tree": "1feeb189ff45197527e7a45d24976a27f44596c1",
      "parents": [
        "940b19911209d8ad2ea326c4a46e0fb044568edc"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 09:47:57 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:20:18 2015 +0200"
      },
      "message": "zebra: silence zebra_serv_un unused warning\n\nzebra_serv_un() is unused if --enable-tcp-zebra is given.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c0bedebfe9ca1a1ded02f1f481762dd41defa63e",
      "tree": "9c040f71733fb7509c03457bc146373e65e95536",
      "parents": [
        "3a7e83c2387885075c9ecf1912dd6c9399c6947a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 10:00:43 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:33 2015 +0200"
      },
      "message": "build: add --enable-werror\n\nThis allows enabling -Werror in a consistent way.  Note that this is\ndifferent from just specifiying it in CFLAGS, since that would either\nbreak configure tests (if done on ./configure), or would override\nconfigure\u0027s CFLAGS (if done on make).\n\nUsing --enable-werror instead provides a new WERROR variable that is\nadditionally used during make with a consistent set of warning flags.\n\nThe tests/ directory is exempt.  (Rationale being, better to have more\ntests than pedantically complain about them.)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "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": "941789e470199df4f612368f669ecc0fd096fb9a",
      "tree": "7320a1dad4346e06a77d786274d8e8962688db00",
      "parents": [
        "ec62e1438ece9af0546f9028aa1403f2c84bf177"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Mon Mar 23 15:16:29 2015 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Mon Mar 23 15:16:29 2015 -0400"
      },
      "message": "Fix alignment assumptions on non-RT_ROUNDUP platforms.\n\nThe comment said that apple uses int and BSD traditionally used long,\nbut the code was backwards.  This fixes apple to be int, and otherwise\nlong.  That should make FreeBSD, which aligns to long, work correctly,\neven without using SA_SIZE.\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"
    }
  ],
  "next": "621e2aaf33d8ab73bf44b0eea3f3900135d34996"
}
