)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "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": "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": "6b0655a25194c7c0331154edaa6124cf783e5e5e",
      "tree": "c0c7d479f2684531249668210da27a60322ba395",
      "parents": [
        "fdb913aedb5a9807ad60715e8badb4f25d57acea"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:53:35 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:58:02 2014 +0200"
      },
      "message": "*: nuke ^L (page feed)\n\nQuagga sources have inherited a slew of Page Feed (^L, \\xC) characters\nfrom ancient history.  Among other things, these break patchwork\u0027s\nXML-RPC API because \\xC is not a valid character in XML documents.\n\nNuke them from high orbit.\n\nPatches can be adapted simply by:\n\tsed -e \u0027s%^L%%\u0027 -i filename.patch\n(you can type page feeds in some environments with Ctrl-V Ctrl-L)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f7bf41534e885c7bc077529c591a1bce24a5f1e9",
      "tree": "2c119e01872468b249bba44e5f7d20da67147756",
      "parents": [
        "db19c85679b08668c3dce73a655c21753042cf06"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Oct 22 17:10:21 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:27:58 2014 +0200"
      },
      "message": "zebra: apply syntactic sugar to rib_dump()\n\nstrip the explicit __func__ present on all calls and make the prefix\nargument a transparent union.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b52aef18a9f3acc8b24ab5c2631dc574b8e2ec70",
      "tree": "bfa979bb182304582f6c03884e8c4e3c27c22165",
      "parents": [
        "23f5f7c3dd805b7d6a46d86d23aaa5c71273a84a"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Wed Nov 27 17:06:15 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Feb 11 04:53:14 2014 +0100"
      },
      "message": "zebra: log routes w/o gateway in rib_delete_ipv4\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fed643f4093abc0ed5e796aab9047768f7036ed6",
      "tree": "ffa07bd17a939b386813f5b08c8f92f302d8c505",
      "parents": [
        "f3a1732eb3bb41c094ec558d2aeee2766878a91d"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue Oct 23 16:00:42 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Oct 22 10:38:35 2013 -0700"
      },
      "message": "zebra: make rib_dump() compatible with IPv6 RIB\n\n[DL: resolved conflicts in zebra_rib.c]\n[DL: fix usage with --disable-ipv6]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f3a1732eb3bb41c094ec558d2aeee2766878a91d",
      "tree": "9cc740a8d4b37bb5e1aa2c00ea1102a26d67809b",
      "parents": [
        "c3e6b595160cd3aa601ae7e1887e695710cde15d"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Jul 05 15:35:41 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 18:04:40 2013 +0200"
      },
      "message": "zebra: apply route-maps for interface routes\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c3e6b595160cd3aa601ae7e1887e695710cde15d",
      "tree": "d7face57a402bd5e4bbdbbeee071df52a84a6fac",
      "parents": [
        "e8d3d2991f72613edb76dea244a8c8e4684873dd"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Jul 05 15:35:40 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 18:04:40 2013 +0200"
      },
      "message": "zebra: fix recursive-routes via ifindex routes\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "48a53dc71cb422e619859b79d5069e02fcd867d0",
      "tree": "ff5e8148efb422e0dd074657951f5dd5a1c0150b",
      "parents": [
        "fa713d9ee5ed30dedd0a290be9aaff780a2896be"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Jul 05 15:35:38 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 18:04:40 2013 +0200"
      },
      "message": "zebra: handle blackholes encountered in recursive resolution\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fa713d9ee5ed30dedd0a290be9aaff780a2896be",
      "tree": "1d263cce70c341f3f2a73a47d4b1cd5a38b09129",
      "parents": [
        "bfac8dcd2fe7ed099a679b5c8245599c6d0312ed"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Jul 05 15:35:37 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Sep 19 18:04:40 2013 +0200"
      },
      "message": "zebra: rework recursive route resolution\n\nChange the datastructure for recursive routes. This brings the following\nbenefits:\n\nBy using struct nexthop also to store nexthops obtained by recursive\nresolution, we can get rid of quite a bit of code duplication in the fib\nmanagement. (rt_netlink, rt_socket, ...)\n\nWith the new datastructure we can make use of all available paths when\nrecursive routes are resolved with multipath routes.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9499bf2bc6daf0a9b7170d3cf994daef2f1a8920",
      "tree": "da0c36589c64c385b2f2ace17b92076febb9afe6",
      "parents": [
        "15c713485699fd22dfa5b7ce3ca7c6be049f1033"
      ],
      "author": {
        "name": "Leonid Rosenboim",
        "email": "lrosenbo@wrs.com",
        "time": "Thu Dec 06 20:17:41 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jan 14 16:07:25 2013 +0100"
      },
      "message": "zebra: don\u0027t overrun afi/safi array boundaries\n\nzebra was not checking afi/safi values.  This was leading to crashes where\nthese values were coming directly from some protocol\u0027s on-wire fields.\nSafeguarding them in zebra is a good start.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5adc2528d386f037cc39e8029616295c3fec2db4",
      "tree": "2f54793f50a591d99a39d75fbf6bbd7dbe752dda",
      "parents": [
        "443b993777e3e86fceb988f647d1c5b57661a182"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:59 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "zebra: add module to communicate routes to FPM\n\nEnhance zebra to send routes to the (optional) Forwarding Path Manager\ncomponent using the interface defined by fpm/fpm.h.\n\n  * configure.ac\n\n    - Add --enable-fpm flag.\n\n      The FPM-related code in zebra is activated only if the build is\n      configured with \u0027--enable-fpm\u0027.\n\n    - Add HAVE_NETLINK automake conditional.\n\n      This allows us to conditionally build netlink-dependent C code.\n\n  * zebra/{rib.h,zebra_rib.c}\n\n    - Add the \u0027fpm_q_entries\u0027 field to the rib_dest_t structure. This\n      allows dests to be placed on the fpm queue.\n\n    - Define a couple new rib_dest_t flags that hold FPM-related\n      state.\n\n    - Invoke the zfpm_trigger_update() function for a route_node\n      whenever the information to be sent to the FPM changes.\n\n    - rib_can_delete_dest(): Return FALSE if we have to update the FPM\n      about the given dest. This ensures that the dest is not deleted\n      even if there are no ribs hanging off of it.\n\n  * zebra/zebra_fpm.c\n\n    This file holds most of the code for interacting with the FPM.\n\n    - If quagga was configured with \u0027--enable-fpm\u0027, periodically try\n      to connect to the FPM.\n\n    - When the connection comes up, enqueue all relevent dests to the\n      FPM queue.\n\n    - When the FPM socket is readable, dequeue the next rib_dest_t\n      from the FPM queue, encode it in to a message and send the\n      message to the FPM.\n\n    - When the connection to the FPM goes down, remove all dests from\n      the FPM queue, and then start trying to connect to the FPM\n      again.\n\n    - Expose the following new operational commands:\n\n      show zebra fpm stats\n      clear zebra fpm stats\n\n  * zebra/zebra_fpm_netlink.c\n\n    - zfpm_netlink_encode_route(): Function to encode information\n      about a rib_dest_t in netlink format.\n\n  * zebra/zebra_fpm_private.h\n\n    Private header file for the zebra FPM module.\n\n  * zebra/zebra_fpm.h\n\n    Header file exported by zebra FPM module to the rest of zebra.\n\n  * zebra/debug.c\n\n    Add the \u0027debug zebra fpm\u0027 command.\n\n  * zebra/main.c\n\n    Initialize the zebra-FPM code on startup.\n\n  * zebra/misc_null.c\n\n    Add stub for zfpm_trigger_update().\n\n  * zebra/Makefile.am\n\n    - Include new file zebra_fpm.c in build.\n\n    - Include zebra_fpm_netlink.c in build if HAVE_NETLINK is defined.\n\n  * vtysh/Makefile.am\n\n    Include zebra_fpm.c in list of files that define cli commands.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "78deec450cfa5ddcad290c13b36dd1d187da213e",
      "tree": "bf6e811b78c726db3fe00b168b35a67e9aa586c1",
      "parents": [
        "0915bb0ce2ca6b5fee2cd214be4499eeeaf1c9af"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:56 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "zebra: extern/extract some functions from rt_netlink.c\n\n* zebra/{rib.h,zebra_rib.c}\n\n    Add nexthop_type_to_str(), which returns a human-readable string\n    corresponding to a nexthop type.\n\n  * zebra/rt_netlink.[hc]\n\n    - Add new header file that exposes some existing and new\n      netlink-related functions from rt_netlink.c to the rest of\n      zebra.\n\n        addattr32\n        addattr_l\n        rta_addattr_l\n        nl_msg_type_to_str (new)\n        nl_rtproto_to_str (new)\n\n    - Use nexthop_type_to_str() instead of the static array\n      \u0027nexthop_types_desc\u0027.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0915bb0ce2ca6b5fee2cd214be4499eeeaf1c9af",
      "tree": "eb3cb410ed0dd341e2e565e71d74bba81c0dbf8a",
      "parents": [
        "1b5ed1b054b955275bb7cf0f80fb7767094bc28b"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:55 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add iterator for walking all tables in RIB\n\n* lib/zebra.h\n\n    Add macro ZEBRA_NUM_OF, which returns the number of elements in a\n    static array.\n\n  * zebra/rib.h\n\n    Add the rib_tables_iter_t structure and associated functions,\n    which allow one to walk all tables in the rib.\n\n  * zebra/zebra_rib.c\n\n    - Add vrf_id_get_next() to retrieve the first VRF id (if any) that\n      is greater than a given VRF id.\n\n    - Add rib_tables_iter_next().\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1b5ed1b054b955275bb7cf0f80fb7767094bc28b",
      "tree": "b8d886b85615f1b05679e6879c961e5dcb1496c4",
      "parents": [
        "9fd92e3c4bdcc78e0f0d94d53a2d4c7b0e893fcb"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:54 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add way to determine VRF/AFI/SAFI of table\n\nAdd some code that allows us to determine which VRF and AFI/SAFI a\ngiven RIB table corresponds to.\n\n  * zebra/rib.h\n\n    Add rib_table_info_t structure, which contains information about\n    the VRF, AFI and SAFI that a table is for.\n\n  * zebra/zebra_rib.c\n\n    - Add the vrf_table_create() function, which creates a table and\n      sets its \u0027info\u0027 pointer to a newly created rib_table_info_t.\n      The \u0027info\u0027 pointer allows us to go from a route_node or a table\n      to the associated vrf.\n\n    - vrf_alloc(): Use vrf_create_table() to create tables.\n\n  * lib/memtypes.c\n\n    Add memory type for rib_table_info_t.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9fd92e3c4bdcc78e0f0d94d53a2d4c7b0e893fcb",
      "tree": "a3adf090e5ef776b8c6dc6223890a2640217a95b",
      "parents": [
        "5aebb9c77fc2257c9d9df72db66668fabb24fc52"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:53 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add structure to hold per-prefix state in RIB\n\nAdd the rib_dest_t structure to hold per-prefix state in the routing\ninformation base. This gives us an appropriate place to maintain the\nqueueing state of a route_node. Queuing state was previously being\nstored on the first rib in the list of ribs hanging off the\nroute_node.\n\n  * zebra/rib.h\n\n    - Add new structure rib_dest_t.\n\n    - Remove the rn_status field from \u0027struct rib\u0027, it is no longer\n      required.\n\n    - Add macros (RNODE_FOREACH_RIB, RNODE_FOREACH_RIB_SAFE) for\n      walking all \u0027struct ribs\u0027 corresponding to a route_node. These\n      hide the fact that there is an intermediate rib_dest_t\n      structure.\n\n    - Add a few utility inlines to go between a rib_dest_t and\n      associated structures.\n\n  * zebra/zebra_rib.c\n\n    - rib_link()/rib_unlink()\n\n      Tweak for new behavior, where the \u0027info\u0027 pointer of a route_node\n      points to a rib_dest_t. The list of ribs for a prefix now hangs\n      off of the dest.\n\n      Change the way we ref count route_nodes. We now hold a single\n      ref count on a route_node if there is a corresponding\n      rib_dest_t.\n\n    - Maintain the queuing state of a route_node on the flags field of\n      the rib_dest_t.\n\n    - Add the rib_gc_dest() function, which deletes a rib_dest_t if it\n      is no longer required. A rib_dest_t can be deleted iff there are\n      no struct ribs hanging off of it.\n\n    - Call rib_gc_dest() any time we unlink a rib from the\n      rib_dest_t. Currently we only need to call it once, just before\n      we return from rib_process().\n\n  * zebra/{redistribute,zebra_rib,zebra_snmp,zebra_vty}.c\n\n    Use new macros to walk over route_node ribs.\n\n  * lib/memtypes.c\n\n    Add memory type for rib_dest_t.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "837d16ccbe0fca413f8927da6a34b1e97ccada8a",
      "tree": "7aed5a517b619c03d11bf567f6a14cda6f8f5efe",
      "parents": [
        "655071f44aab42e89bcece3a93da456fdd0d913a"
      ],
      "author": {
        "name": "Balaji.G",
        "email": "balajig81@gmail.com",
        "time": "Wed Sep 26 14:09:10 2012 +0530"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "*: use array_size() helper macro\n\nUse the array_size() helper macro.  Replaces several instances of local\nmacros with the same definition.\n\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b0145ddb4bf75d2c8853aa3d0bc7c522f4f17531",
      "tree": "01df97d02a64742e9dbd4238f77d627c9f08eee7",
      "parents": [
        "945ea293399af6c9ff3efd07686ff30c3d2a3e8b"
      ],
      "author": {
        "name": "Nolan Leake",
        "email": "nolan@cumulusnetworks.com",
        "time": "Thu Sep 13 17:17:31 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "zebra: make static routes respect table setting\n\nMake static routes respect non-default routing tables.\n\nBEFORE PATCH\n------------\n\n! in zebra.conf\ntable 1\n\n! add static route\nvtysh\u003e ip route 10.0.0.0/30 eth0\n\ncumulus@net-top0:~$ ip route\ndefault via 192.168.0.2 dev eth0\n10.0.0.0/30 dev eth0  proto zebra\n192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.15\n\n! nothing in table 1\ncumulus@net-top0:~$ ip route show table 1\n\nAFTER PATCH\n-----------\n\n! in zebra.conf\ntable 1\n\n! add static route\nvtysh\u003e ip route 10.0.0.0/30 eth0\n\ncumulus@net-top0:~$ ip route\ndefault via 192.168.0.2 dev eth0\n192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.15\n\n! static route in table 1\ncumulus@net-top0:~$ ip route show table 1\n10.0.0.0/30 dev eth0  proto zebra\n\nSigned-off-by: Nolan Leake \u003cnolan@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "128293286a8be01b99ed60db53e19ce6e2669558",
      "tree": "59bf4be72bc1905a404c572d0446390f1587c67b",
      "parents": [
        "c63b83fe8d1addecc949258479b8d54180c4da60"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Tue Apr 10 16:57:25 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:28 2012 +0200"
      },
      "message": "lib, zebra: extend use of sockunion2ip macro\n\n  * lib/sockunion.c,\n  * zebra/zebra_rib.c: replace -\u003esin.sin_addr.s_addr with sockunion2ip\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\n[reworded commit message]\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "9665856e3718e42068e7d897f5e2468e77fb8c17",
      "tree": "264cd6e05ee23bcf46d1ce42c38ffa228b5035f1",
      "parents": [
        "fa4094ac49b4cc23589f5c5b7e608c4b4ee6ca04"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Fri Apr 20 17:23:39 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Fri Apr 20 17:29:31 2012 +0200"
      },
      "message": "Revert \"zebra: clean up client routes when client goes away\"\n\nThis reverts commit af56d404cd56d94ad3b2ec3f159650eb72baef0a,\nwhich was accidentally duplicating functionality from commit\n2ea1ab1 \"zebra: ZEBRA_HELLO and mopping up routes (BZ#448)\"\n\nConflicts:\n\n\tzebra/zebra_rib.c\n\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "14d2bbaa3f4aa53152472694c29f336808e47313",
      "tree": "e39bdddef4ea53207dd8fb61e1fd6b54d8c7721d",
      "parents": [
        "51d4ef832c1e58150325630e25c442866e5a6cf5",
        "e96b312150d8e376c1ef463793d1929eca3618d5"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Wed Apr 11 23:51:08 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Wed Apr 11 23:51:08 2012 -0700"
      },
      "message": "Merge quagga mainline into the google ISIS code.\n\nThe steps were:\n\n  $ git checkout google-is-is\n  $ git merge quagga\n  $ git checkout google-is-is -- isisd\n\n  # Resolve conflicts in the following:\n  lib/md5.h\n  zebra/rt_netlink.c\n  zebra/zebra_rib.c\n  zebra/zserv.c\n\nNote that the content in the isisd directory is left unchanged in the\nmerge. As a result, changes made to isisd as part of the following\ncommits on the quagga mainline are dropped.\n\n  # 8ced4e82 is the merge base, e96b3121 is the current quagga master\n  $ git log --oneline --reverse 8ced4e82..e96b3121 -- isisd\n  5574999 isisd: fix crash on \"no router isis\" (BZ#536)\n  8998075 isisd: raise hello rate for DIS (BZ#539)\n  306ca83 isisd: include hash.h, not hash.c\n  b82cdeb delete CVS keywords\n  2f65867 isisd: indent longopts array\n  b511468 quagga: option \"-z\" (\"--socket \u003cpath\u003e\") added\n  05e54ee build: delete .cvsignore files\n  b4e45f6 fix zebra protocol after MP-BGP changes\n  7fd6cd8 isisd: fix circuit state machine\n  907fd95 isisd: send proper LSP after DIS election\n  d034aa0 isisd: fix wrong next-hops from SPF\n  c25eaff isisd: unexpected kernel routing table (BZ#544)\n  e6b03b7 isisd: implement MD5 circuit authentication\n"
    },
    {
      "commit": "af56d404cd56d94ad3b2ec3f159650eb72baef0a",
      "tree": "2d923b385dd21a5f0ced95d2430b4c998af18f94",
      "parents": [
        "fc328ac9d3d49b871c1139f36deb702a254c0d4f"
      ],
      "author": {
        "name": "Josh Bailey",
        "email": "joshb@google.com",
        "time": "Wed Mar 21 18:47:51 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sun Apr 08 00:28:50 2012 -0700"
      },
      "message": "zebra: clean up client routes when client goes away\n\n  * zebra/zebra_rib.c: Add code to clean up routes added by a client\n    (as identfied by \u0027rib type\u0027).\n\n  * zebra/zserv.[ch]: Maintain the type of the routes added by a\n    client on the \u0027zserv\u0027 structure -- assume that a given client uses\n    a single route type for now.\n\n    Clean up routes from a client when the client goes away (in\n    zebra_client_close()).\n\nFrom: Josh Bailey \u003cjoshb@google.com\u003e\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "fc328ac9d3d49b871c1139f36deb702a254c0d4f",
      "tree": "a7189a1286862a347834792e93a7b00df3c0cfac",
      "parents": [
        "e38e0df01ad305ad48ecf816b52fa99fd3f2a4e1"
      ],
      "author": {
        "name": "Subbaiah Venkata",
        "email": "svenkata@google.com",
        "time": "Tue Mar 27 16:35:22 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat Apr 07 23:52:40 2012 -0700"
      },
      "message": "zebra: add more logs/asserts to rib work queue code\n\n  * zebra/zebra_rib.c: (rib_queue_add, rib_queue_init) Add some more\n    logs and asserts.\n\nFrom: Subbaiah Venkata \u003csvenkata@google.com\u003e\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "26e2ae362baf207d82e4c1ac76bc1c2b2df6ccaa",
      "tree": "e0d060875b5eab622244977e58b2445d55d6d240",
      "parents": [
        "d531050b7bf0f93d4d29a7a2f7b745641778b483"
      ],
      "author": {
        "name": "Josh Bailey",
        "email": "joshb@google.com",
        "time": "Thu Mar 22 01:09:21 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat Apr 07 13:54:02 2012 -0700"
      },
      "message": "zebra: read multipath routes and hw addr from netlink\n\n  * zebra/rt_netlink.c:\n\n    - Pick up the hardware address of an interface when we receive a\n      netlink link change message. Extract code for parsing the\n      link-layer hardware address into a new function so we can reuse\n      it.\n\n    - netlink_routing_table(): Update to handle multipath routes.\n\n    - netlink_route_change(): Update to handle multipath routes. Fix\n      problem where the metric was not being read out.\n\n  * zebra/zebra_rib.[ch]: Extern nexthop_ipv4_ifindex_add() -- it is\n    now called from the netlink code.\n\nFrom: Josh Bailey \u003cjoshb@google.com\u003e\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "5734509c0545ebd95a5b8e3f22a911c1a39ffa1b",
      "tree": "2f35ad50d793080db1f858c2de2228cfd2946dfd",
      "parents": [
        "fe67e668881b8b8d71b1570575c913cd287fafcf"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Dec 25 17:52:09 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:51 2012 +0100"
      },
      "message": "babeld: Initial import, for Babel routing protocol.\n\n* Initial import of the Babel routing protocol, ported to Quagga.\n* LICENCE: Update the original LICENCE file to include all known potentially\n  applicable copyright claims.  Ask that any future contributors to babeld/\n  grant MIT/X11 licence to their work.\n* *.{c,h}: Add GPL headers, in according with the SFLC guidance on\n  dealing with potentially mixed GPL/other licensed work, at:\n\n  https://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html\n"
    },
    {
      "commit": "f768f367bcd1f37a53c563495176a5a134caf234",
      "tree": "57a0fff4f2a0e832623aa0d6d4d3bd2a3c951d98",
      "parents": [
        "c7ec179a95c1ed4fcd3d3be3f981c8c20dce534a"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat Nov 26 22:10:39 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:30:57 2012 +0400"
      },
      "message": "zebra: IPv6 MP-BGP Routes addition and deletion\n\nThis patch contains the following:\n1. Addition of IPv6 SAFI_MULTICAST BGP routes into the RTM\u0027s RIB.\n2. Deletion of IPv6 SAFI_MULTICAST BGP routes from the RTM\u0027s RIB.\n"
    },
    {
      "commit": "cddf391bf6839e9f093cef15508669c1f3f92122",
      "tree": "38dfaa5a7b98776ba67bb8a812beec8724810839",
      "parents": [
        "5a616c08ce089e25dc0e8da920727af4d11279bf"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat Nov 26 21:59:32 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:30:42 2012 +0400"
      },
      "message": "zebra: IPv4 MP-BGP Routes addition and deletion\n\nThis patch contains the following:\n1. Addition of IPv4 SAFI_MULTICAST BGP routes into the RTM\u0027s RIB.\n2. Deletion of IPv4 SAFI_MULTICAST BGP routes from the RTM\u0027s RIB.\n"
    },
    {
      "commit": "4f1735fd6ac5d0881bafa9bd421e00645b6c60fd",
      "tree": "ec6039710bef675594c4ce50aa488bfb64e4157b",
      "parents": [
        "cba1fab2d7e22921a03b8b886772daec8b5977c4"
      ],
      "author": {
        "name": "Matthias Ferdinand",
        "email": "mf@14v.de",
        "time": "Mon Dec 26 16:35:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:13:58 2012 +0400"
      },
      "message": "zebra: fix ifindex test condition (BZ#487)\n\nWhen the same ip address is used on several interfaces,\nand one of them gets deleted (or equivalent: set to down and\nthen address removed), rib_delete_ipv[46] will also remove\nthe connected route from other interfaces.\n\nrib_delete_ipv[46] is called twice when an interface is\ndeleted:\n    - for the \"ifdown\" event\n    - for the address removal\n(note: this may be specific to the netlink interface of linux)\nThe second call does not find the connected route to that same\nifindex anymore, but deletes similar connected routes to any\nother ifindex instead.\n\nReason: the ifindex check is on the same level as the check\nfor ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. If everything\nmatches except for the ifindex, the \"else\" part (intended for\ndifferent route types) is executed, thus removing the route\nfrom the wrong interface.\n\nfix: move ifindex check inside the \"then\" part of the check\nfor ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. Now connected\nroutes to other ifindexes will not spill over to the \"else\"\npart for different route types anymore.\n"
    },
    {
      "commit": "2ea1ab1c30c765cd4703794fcfaf044454fb533c",
      "tree": "650e97a5a9e8cc1fb8666ff6ce87647df3e0e604",
      "parents": [
        "2654e43ca2eaa8d93268c9ec85ac2dd968e5fb94"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Sun Dec 11 18:48:47 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:24 2012 +0400"
      },
      "message": "zebra: ZEBRA_HELLO and mopping up routes (BZ#448)\n\nZEBRA_HELLO message is used by routing daemons to inform zebra\nwhat type of routes daemon will be announcing to zebra. Also\nzebra uses route_type_oaths array to track which daemon announces\nwhich protocol. Zebra mops up routes if daemon didn\u0027t for some\nreason.\n"
    },
    {
      "commit": "7052f22880f439a6ee691dd9436e1bda932f7b3b",
      "tree": "d9e6713dd7c559039816e1c20347676e7d6c9cd1",
      "parents": [
        "ca9f342c2c35523b7bb34631b4f75cad1232355b"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Thu Aug 27 00:28:28 2009 +0200"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:12:49 2011 +0400"
      },
      "message": "rib: default distance value for new protocols (v2)\n\nadding protocols and forgetting to update zebra_rib.c currently causes\na beyond end of array access for the default distance value. fix by\nmaking 150 the default distance for unknown routing protocols.\n\n150 is higher than all other IGPs but lower than iBGP (200)\n"
    },
    {
      "commit": "cc2dd9280c4456586080d1cf4537d26c02fa9a36",
      "tree": "a7573e32187b87015f2a8efc6cbd9b8b7ef7057c",
      "parents": [
        "1352ef32d70dcc102074814de63b5d08e591dd2d"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 09 17:54:49 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 09 17:54:49 2009 +0300"
      },
      "message": "zebra: cleanup RIB meta queue code\n\n* zebra/zebra_rib.c\n  * rib_queue_add(): indent comments and simplify debug code\n  * rib_queue_init(): remove unneeded assert() calls and\n    extra return statements\n"
    },
    {
      "commit": "d02c56cdf0c2e01a986417ed973dd7a2a5368ac1",
      "tree": "59e92e74fefdddd8fd01b0fff98749922652b061",
      "parents": [
        "0d6388abc7a5da2a20a4854c400c8e176127e480"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Dec 08 13:14:27 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 08 13:14:27 2009 +0300"
      },
      "message": "zebra: fix more compiler warnings\n\n* zebra/zebra_rib.c\n  * nexthop_active_update(): make local int vars unsigned\n  * nexthop_active_check(): return unsigned for consistency\n  * rib_dump(): cast time in printf format\n  * vrf_free(): remove unused function\n  * vrf_lookup_by_name(): idem\n  * rib_if_up(): idem\n  * rib_if_down(): idem\n"
    },
    {
      "commit": "a50c107e3fbdaaea78a12a868a3865fd25136ad2",
      "tree": "cdc78feecf243768780ef784608f68386d41fef0",
      "parents": [
        "80b2a9418f0ee70318c677778d63f860f0f397c3"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Thu Dec 03 15:34:39 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 03 15:34:39 2009 +0300"
      },
      "message": "zebra: fix RIB debug message for IPv6\n\nApply changes from commit f304cb48f0d7d0ff8f36e7aca8293141a9fa9e60\nto rib_queue_add.\n\nAlso includes spelling fixes.\n"
    },
    {
      "commit": "67b9467f6cad5097a3e4c6e49348be4d6c17a5bb",
      "tree": "a4c14d2d2ad51f367c3e2a511942e8945bc22a16",
      "parents": [
        "228da42898c4f7bd72d9c1ee4135108e8d40d860"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sat Jul 18 04:02:26 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 10:13:11 2009 +0100"
      },
      "message": "[zebra] Silence noisy process_subq\n\nzebra_rib.c: process_subq(): #ifdef out debug code.\n"
    },
    {
      "commit": "c3a5606302777cdd33d4025fc30bed723fc84d79",
      "tree": "afa5d20dd20d6a05f99107655ce68d8788f847cc",
      "parents": [
        "3f4ab7f9e9ffaee7c448744f45d6e5e2176cce89"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Wed Jun 24 19:15:36 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 24 22:43:58 2009 +0100"
      },
      "message": "zebra: Static route does not reach kernel.\n\nA static route like below: ip route 172.16.1.0/30 192.168.101.162 11\ndoes not move properly to a new interface when the\ninterface used goes down. Zebra reports that it have\nmoved but kernel isn\u0027t informed so the route is lost.\n\n* zebra_rib.c: (nexthop_active_update) if ifindex has changed, then the\n  route should be considered to have changed.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\n"
    },
    {
      "commit": "81cce0185e23b6ecd2ab98ab34182901226bcf9e",
      "tree": "24a8fa282d80b9dab623bb26fbbec731c0c8b34a",
      "parents": [
        "82f5ee1ead0aa83f83f918abfc3f5071741a56e5"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Tue Apr 28 14:28:00 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:27 2009 +0100"
      },
      "message": "[cleanup] Use correct buffer size for inet_ntop()\n\nDon\u0027t need big buffer 1024 to hold IPV4 (INET_ADDRSTRLEN)\nor IPv6 (INET6_ADDRSTRLEN) message.\n"
    },
    {
      "commit": "6c684653f08fadf738ca52a3fbe512e3d1698ceb",
      "tree": "f5f48e6647a3158ad8b42785031b0bf986ed5fe5",
      "parents": [
        "5110a0c6222be91d3b2a786692949dd94fb0c9ac"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Sep 18 16:51:06 2008 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:25 2009 +0100"
      },
      "message": "[zebra] remove incorrect debug message\n"
    },
    {
      "commit": "5110a0c6222be91d3b2a786692949dd94fb0c9ac",
      "tree": "e7cd59e893c1f9be7f91f546bb84540b8f85857a",
      "parents": [
        "c84154977d822ceee9df66be535c56cb5f0fce10"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Aug 11 16:22:15 2008 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:25 2009 +0100"
      },
      "message": "[zebra] Cleanup meta-queue code\n\nDo some cleanup work on recently added meta-queue code:\n  * use table rather than switch\n  * indent with quagga standard indentation\n  * since meta_queue_new is only used at initialization\n    allocation failure should be fatal.\n"
    },
    {
      "commit": "393deb9bd663361e6b110d579a8b1d4c22667068",
      "tree": "e93ebf2f57bf92ff7a9cd045764b3cdbb99a07e5",
      "parents": [
        "3453a7122c1d585ad789ed0f63deb90cc5e89fae"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Aug 18 14:13:29 2008 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:07:49 2009 +0100"
      },
      "message": "[cleanup] Convert XMALLOC/memset to XCALLOC\n\nSimple conversion of XMALLOC/memset to XCALLOC\n"
    },
    {
      "commit": "ef9b113e2d4c0d49bd7d61458fa9acc113658d2c",
      "tree": "f2f57b5c771e7709be26daefa2861cd657764aeb",
      "parents": [
        "d145bc008a03889fff8949890cb8c532ee6aff74"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sun Aug 17 17:44:47 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:56:26 2008 +0100"
      },
      "message": "[zebra] trivia: static qualifiers for metaq\n\n2008-08-17 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* zebra_rib.c: (process_subq) mark static\n\t  (rib_meta_queue_add) ditto\n\t  (meta_queue_new) ditt\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "d145bc008a03889fff8949890cb8c532ee6aff74",
      "tree": "f8bb5b09a4ca2c3f8fa0e93ae6d8a8acd46d3889",
      "parents": [
        "16814f9698a3ee14b1412286c53711a562c348fc"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sun Aug 17 17:41:37 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:56:25 2008 +0100"
      },
      "message": "[zebra] make some data local\n\n2008-06-17 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* zebra_rib.c: static qualifier on local data\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "16814f9698a3ee14b1412286c53711a562c348fc",
      "tree": "9fb7ec8e786b648f0c74f0aeff5ff959dc663d18",
      "parents": [
        "4c699477d24e7104893130d072963df5cea17214"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sun Aug 17 17:39:31 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:56:25 2008 +0100"
      },
      "message": "[zebra] ignore dead routes in RIB update\n\n2008-08-17 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* zebra_rib.c: When doing a RIB update, routes in process of removal\n\t  should be ignored. This fixes bugs where a route is removed but a\n\t  recursive route is not changed.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "e96f92034dad1a70c92ad4ad863a5259c122cecb",
      "tree": "c3b9bebef0fe2059182b31b43243289b5c7248e3",
      "parents": [
        "a15cfd16fcdec39588ce2f780671ba7c6de0b919"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "message": "+ initial edition of meta-queue for RIB updates processing (bug #431)\n"
    },
    {
      "commit": "20e5ff0a8893ffad6d31739d68d224931c4a7992",
      "tree": "8ecd9184d2d7268e0fc51bcd612790301780efda",
      "parents": [
        "dea04441fb51f74dc25f6ab4bd756b4159d961b6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Feb 26 14:02:24 2008 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Feb 26 14:02:24 2008 +0000"
      },
      "message": "+ fix bug#326 by rib_lookup_and_pushup()\n"
    },
    {
      "commit": "3f087670efa606021cde2f6a9615ac7e07aec2a5",
      "tree": "c2d884aa51da1a95614380c813900e6f18a85c60",
      "parents": [
        "912df1e8ab61962c29eb4faff17a7d75c4905b84"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Jan 08 20:12:46 2008 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Jan 08 20:12:46 2008 +0000"
      },
      "message": "[link-detect] Static interface routes should behave properly with link-detect.\n\n2008-01-08 Michael Larson \u003cmike@vyatta.com\u003e\n\n\t* zebra_rib.c: (nexthop_active_check) Replace if_is_up with\n\t  if_is_operative to solve problems with static interface\n\t  routes not behaving properly with link-detect.\n"
    },
    {
      "commit": "a3aaf5b0ceb8c5b3821793333b4057df872fbedd",
      "tree": "c4c95460aff0f7332f84546e9dd0d651abc8868a",
      "parents": [
        "f304cb48f0d7d0ff8f36e7aca8293141a9fa9e60"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Thu Oct 04 10:49:21 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Thu Oct 04 10:49:21 2007 +0000"
      },
      "message": "+ rib_process() speedup for multi-nexthop route nodes\n"
    },
    {
      "commit": "f304cb48f0d7d0ff8f36e7aca8293141a9fa9e60",
      "tree": "85b0f508c0175bc9078640207c2f31a3e2b96b9c",
      "parents": [
        "6b148faa291f68dd43bba37fbc0e6b75a2e1e078"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Wed Oct 03 12:27:16 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Wed Oct 03 12:27:16 2007 +0000"
      },
      "message": "+ Minor bugfix: IPv6 prefixes were logged incorrectly in RIB debugging calls. Fixed.\n"
    },
    {
      "commit": "03e232a4588187992f3538985d541289dc272464",
      "tree": "6bb2c36ccb39c678b49d29fd3d379e0de313a17d",
      "parents": [
        "dc95824ae13d65156dd873a6e784d9a0eed2f39f"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Aug 14 09:46:48 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Aug 14 09:46:48 2007 +0000"
      },
      "message": "Merged own patch for bug #390 (rewrite zebra/zebra_rib.c:nexthop_active_update())\n"
    },
    {
      "commit": "dc95824ae13d65156dd873a6e784d9a0eed2f39f",
      "tree": "fa53aa99e517d9cfe5c56474051afdaa1bc9a666",
      "parents": [
        "068fd77cff0ce09b6390641abd84fc09a89c49db"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Aug 13 16:03:06 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Aug 13 16:03:06 2007 +0000"
      },
      "message": "Merged own patch for the bug #391 (debugging and comments mostly).\n"
    },
    {
      "commit": "93bdadae74a9b391152f5511dbced6f08fad6d94",
      "tree": "95e5f9b12164dfc4b7ffe8d2221641f416c7f369",
      "parents": [
        "7591d8b862439dfae8b4b16d148ce567b6ff8cb7"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 19:25:11 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 19:25:11 2007 +0000"
      },
      "message": "[zebra] Add extra debug logging for RIB and RIB queueing\n\n2007-08-06  Denis Ovsienko\n\n\t* zebra_rib.c: (general) Add extra debug logging for RIB and\n\t  RIB queue.\n"
    },
    {
      "commit": "0b8c4f1d811170224e467b305137ac94861daee6",
      "tree": "1f334740ab6492fd10b882b59f459ad470e9c6e3",
      "parents": [
        "fbf24544a2e2ac97192502d34729f57933d1eb4c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Jun 27 11:12:38 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Jun 27 11:12:38 2007 +0000"
      },
      "message": "[zebra] rib loop check for RIB_ENTRY_REMOVED checks wrong var\n\n2007-06-25 Denis Ovsienko\n\n\t* zebra_rib.c: (rib_add_ipv4_multipath) Loop through RIB\n\t  is using \u0027same\u0027 variable, but RIB_ENTRY_REMOVED check\n\t  is testing the constant \u0027rib\u0027 variable, fix. Impact\n\t  unknown at this point.\n"
    },
    {
      "commit": "7514fb7739f74311830e9ddd1381d0d228224f61",
      "tree": "4d4b9a4fdfcea4cb6fa496085327f1aae9a9a380",
      "parents": [
        "5fa05099567bbe42aae87a9bef8fd630b3666a4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed May 02 16:05:35 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed May 02 16:05:35 2007 +0000"
      },
      "message": "[zebra] Routemap support on received routes, with \u0027set src\u0027 command (linux)\n\n2007-05-01 David L Stevens \u003cdlstevens@us.ibm.com\u003e\n\n\t* (general) These changes collectively add route-map and\n\t  prefix-list support to zebra and fix a bug in \"show\n\t  route-map\" (with no argument).\n\t* doc/main.texi: added route-map, prefix-list, ip protocol\n\t  and set src documentation\n\t* lib/command.h: added PROTOCOL_NODE type\n\t* lib/log.c: (proto_name2num) new function, protocol name to\n\t  number translation.\n\t* lib/routemap.c: (vty_show_route_map) fixed \"show route-map\"\n\t  without route-map name\n\t* lib/routemap.h: added RMAP_ZEBRA type\n\t* lib/zebra.h: added proto_name2num() prototype\n\t* vtysh/extract.pl.in: added VTYSH_ZEBRA flag for route-map and\n\t  plist\n\t* vtysh/Makefile.am: added zebra_routemap.c\n\t* vtysh/vtysh.h: added VTYSH_ZEBRA flag to VTYSH_RMAP\n\t* zebra/connected.c: (connected_up_ipv4) added src preference argument\n\t  to rib_add_ipv4()\n\t* zebra/kernel_socket.c: (rtm_read) ditto\n\t* zebra/main.c: added prefix list initialization\n\t* zebra/Makefile.am: added zebra_routemap.c source file\n\t* zebra/rib.h: added generic address union \"g_addr\" and use in\n\t  existing places that had an explicit union.\n\t  Added \"src\" to struct nexthop.\n\t  Added preferred src arg to nexthop_ipv4_add and rib_add_ipv4.\n\t* zebra/rt_netlink.c: (netlink_routing_table) set preferred source on\n\t  netlink messages.\n\t  (netlink_route_change) ditto\n\t  (netlink_route_multipath) ditto.\n\t* zebra/rtread_getmsg.c: (handle_route_entry) added (NULL) src to\n\t  rib_add_ipv4() call.\n\t* zebra/rtread_proc.c: (proc_route_read) ditto\n\t* zebra/zebra_rib.c: (nexthop_ipv4_add) add src argument.\n\t  (nexthop_ipv4_ifindex_add) ditto\n\t  (rib_add_ipv4) ditto\n\t  (nexthop_active_check) Add route-map processing.\n\t* zebra/zebra_routemap.c: new file for zebra route-map commands.\n\t* zebra/zebra_vty.c: (ip_protocol_cmd) Apply route-map to protocol\n\t  (vty_show_ip_route_detail) added \"src\" printing\n\t  (vty_show_ip_route) ditto\n\t  (show_ip_protocol_cmd) new command, list routemaps.\n\t  (config_write_protocol) write out routemap protocl config.\n\t  (zebra_vty_init) Install the new routemap protocol commands.\n\t* zebra/zserv.c: (zread_ipv4_add) added (NULL) src arg\n\t  (zebra_init) init zebra route-maps.\n\t* zebra/zserv.h: add zebra_route_map_init\n"
    },
    {
      "commit": "3c0755dc9772deccff2ba6e9dc0511a9af2b9d1b",
      "tree": "320e64867af564f2f943742f2a895132606f2e16",
      "parents": [
        "95fdcd8a793d6c271996da221c4030d8ee277891"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Dec 08 00:53:14 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Dec 08 00:53:14 2006 +0000"
      },
      "message": "[zebra] Changes of nexthops of static routes didnt take effect\n\n2006-12-08 Piotr Chytla \u003cpch@packetconsulting.pl\u003e\n\n\t* zebra_rib.c: (static_install_ipv{4,6}) Case where existing\n\t  RIB is updated must explicitely rib_addqueue the route_node,\n\t  to ensure the update actually takes effect.\n"
    },
    {
      "commit": "6d691129594f87958ecaf4169b2e1f62f90d3616",
      "tree": "4c1fb7ec763de18938af31f1f261f47db8da3391",
      "parents": [
        "b0498dc6ff0510efe9467fbaed41945f3f056af4"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 21:49:00 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 21:49:00 2006 +0000"
      },
      "message": "[zebra] Bug #268, Fix race between add/delete of routes, sanitise rib queueing\n\n2006-07-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* rib.h: (struct rib) Add a route_node rn_status flag field,\n\t  this has to be copied every time head RIB of a route_node\n\t  changes.\n\t  Remove the rib lock field, not needed - see below.\n\t  Add a status field for RIB-private flags.\n\t* zebra_rib.c: Add a global for the workqueue hold time, useful\n\t  for testing.\n\t  (general) Fix for bug #268. Problem originally\n\t  detailed by Simon Bryden in [quagga-dev 4001].\n\t  Essentially, add/delete of a RIB must happen /before/ the\n\t  queue. Best-path selection (ie rib_process) and reaping of\n\t  freed RIBs can then be done after queueing. Only the route_node\n\t  is queued - no important RIB state (i.e. whether a RIB is to be\n\t  deleted) is queued.\n\t  (struct zebra_queue_node_t) Disappears, no longer need to\n\t  track multiple things on the queue, only the route_node.\n\t  (rib_{lock,unlock}) removed, RIBs no longer need to be\n\t  refcounted, no longer queued.\n\t  (rib_queue_qnode_del) Removed, deleted RIBs no longer deleted\n\t  via the queue.\n\t  (rib_queue_add_qnode) deleted\n\t  (rib_queue_add) Only the route_node is queued for best-path\n\t  selection, we can check whether it is already queued or\n\t  not and avoid queueing same node twice - struct rib * argument\n\t  is not needed.\n\t  (rib_link/unlink) (un)link RIB from route_node.\n\t  (rib_{add,del}node) Front-end to updates of a RIB.\n\t  (rib_process) Reap any deleted RIBs via rib_unlink.\n\t  Unset the route_node \u0027QUEUED\u0027 flag.\n\t  (General) Remove calls to rib_queue_add where add/del node was\n\t  called - not needed, update calls where not.\n\t  Ignore RIB_ENTRY_REMOVEd ribs in loops through route_nodes\n"
    },
    {
      "commit": "457eb9af72e6e7aa85c26b65ba4d053f9ecbffac",
      "tree": "ca93002285032e0c845749cfd770a446a9fc702b",
      "parents": [
        "1893740016d35d75de567a5f6b74db2314ffdc52"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 19:59:58 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 19:59:58 2006 +0000"
      },
      "message": "[zebra] Add test rig code, for testing the zebra RIB\n\n2006-07-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* {ioctl,kernel}_null.c: Dummy/Null kernel method implementations,\n\t  useful for testing zebra code that calls such methods.\n\t* {redistribute,misc}_null.c: Dummy/Null methods, as above. But\n\t  for zclient, and for various misc functions.\n\t* test_main.c: Test harness for zebra, currently just to test the\n\t  RIB.\n\t* Makefile.am: Build testzebra using above.\n\t* zebra_rib.c: Add a global for the workqueue hold time, useful\n\t  for testing.\n"
    },
    {
      "commit": "171eee31edbddbd8906447dc8725e0513227d013",
      "tree": "edf6f16fe912232d92dac1eeb6d9adadb93082c6",
      "parents": [
        "1fe6ed38cd0136c514aabae01389653beab27fb9"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 16:11:02 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 16:11:02 2006 +0000"
      },
      "message": "[zebra] Connected routes must always be added to main table\n\n2006-07-27 Rumen Svobodnikov \u003crumen@telecoms.bg\u003e\n\n\t* connected.c: (connected_up_ipv4) interface connected routes always\n\t  go to table main (or otherwise they cannot be used by linux as\n          nexthops)\n\t* zserv.c: (zread_ipv4_add) send route to the correct routing table\n\t* zebra_rib.c (static_install_ipv4) set routing table\n"
    },
    {
      "commit": "27b472533bc8bb0fdb37dcda7596c385d3b9f414",
      "tree": "60e09c43d4d016b32eb47ec0ba4a0263f0b40bbc",
      "parents": [
        "33d5ab9ef197ce281859f12251df4e412c469c65"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Jul 02 16:38:54 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Jul 02 16:38:54 2006 +0000"
      },
      "message": "[zebra] Fix CID #104, check addr for null, and #18, check nexthop type args\n\n2006-07-02 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* rt_netlink.c: (netlink_interface_addr) Fix CID #104, can not\n\t  proceed if addr is NULL.\n\t* zebra_rib.c: (static_add_ipv6) Fix CID #18, double check\n\t  required arguments are supplied for the given nexthop type.\n"
    },
    {
      "commit": "a1038a15658d2fd4ab3314a9036bbd63f8f471c1",
      "tree": "5cef40b1e66fd105d0d0d6e4ecf52089ed15e803",
      "parents": [
        "a8d9c1f9caae29410b74f138f81d9b07645c47ce"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 30 14:08:51 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 30 14:08:51 2006 +0000"
      },
      "message": "[zebra] Fix pauls zebra_rib/rib_process commit mistakes, again.\n\n2006-01-30 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra_rib.c: (rib_process) Fourth time lucky on this jinxed\n\t  commit, last commit had a hole that could allow connected\n\t  route selection to escape beyond the connected route logic.\n\t  This time I cross-checked with Gunnar first. ;)\n"
    },
    {
      "commit": "a8d9c1f9caae29410b74f138f81d9b07645c47ce",
      "tree": "ee5285e9e8932ebf89b16bb051c1af78755ade08",
      "parents": [
        "5c78b3d006e6926f938796cffa08e8e14fb8e7af"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 25 06:31:04 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 25 06:31:04 2006 +0000"
      },
      "message": "[zebra] Fix incorrect changes made in RIB metric selection patch\n\n2006-01-25 Gunnar Stigen \u003cgunnar.stigen@axxessit.no\u003e\n\n\t* zebra_rib.c: (rib_process) Application of Gunnar\u0027s earlier\n\t  metric selection RIB change included incorrect tidy-ups made\n\t  by commiter. Fix. (NB: any errors here are again due to paul).\n"
    },
    {
      "commit": "e8e1946edf6ba87ef53832cdceccc39d7f0c3f26",
      "tree": "fcdaf92bf4129a8a58825bd21ae841a6b3b2bda8",
      "parents": [
        "779adb0147cfff1a831b08853976342ad2110fcd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:16:55 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:16:55 2006 +0000"
      },
      "message": "[compiler] miscellaneous trivial compiler warning fixes\n\n2006-01-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n        * (general) various miscellaneous compiler warning fixes.\n          Remove redundant break statements from switch clauses\n          which return.\n          return from main, not exit, cause it annoys SOS.\n          Remove stray semi-colons which cause empty-statement\n          warnings.\n\t* zebra/main.c: (sighup) remove private declaration of external\n\t  function.\n"
    },
    {
      "commit": "af887b5111ada0e8cd961e9479aa9d39796a80c8",
      "tree": "0bc5674824e5cebe0c0bd17ef34eac99f7b68a48",
      "parents": [
        "eac314c7c49f6c0ec502be08e244f91bfc778739"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 18 14:52:52 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 18 14:52:52 2006 +0000"
      },
      "message": "2006-01-18 Gunnar Stigen \u003cgunnar.stigen@axxessit.no\u003e\n\n\t* zebra_rib.c: Take interface metric into account.\n"
    },
    {
      "commit": "0fb58d5d7993b638fc46085944d17d3a54d66046",
      "tree": "9b1195ad505d2c14fdf09036db4f324ff3ec7f18",
      "parents": [
        "76367ea9753aa9cef7cf5d3c954f55b5725f31da"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:31:49 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:31:49 2005 +0000"
      },
      "message": "2005-11-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra_rib.c: (rib_process) convert to new workqueue specs and\n\t  shut up gcc, which complains about cast from void via\n\t  function parameters, for some dumb reason. Do the cast\n\t  inside the function instead.\n\t  (rib_queue_qnode_del) ditto.\n\t  (rib_queue_init) no need for the casts anymore.\n"
    },
    {
      "commit": "ebf1ead0326bf18293c24ee151d22071e8bebc10",
      "tree": "a39df91000789222ca622fec1325f4acaf2d564e",
      "parents": [
        "75b2dd025af1d839279a21ee4b3035085d17331c"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Sep 21 14:58:20 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Sep 21 14:58:20 2005 +0000"
      },
      "message": "\t* zebra_rib.c: Reduce the height of some staircases. Fix\n\t  rib_delete_ipv6() to match routes in the RIB by their gateway as\n\t  well as by destination.\n"
    },
    {
      "commit": "319572cc52267bfd55cca5eaab405df4db27ddaf",
      "tree": "576a148fe8515caf60bde98505a41845068c1d4d",
      "parents": [
        "5339cfdb7c3f6187452982173aa55ff525d1f6fe"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 21 12:30:08 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Sep 21 12:30:08 2005 +0000"
      },
      "message": "2005-09-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra_rib.c: (static_uninstall_ipv{4,6}) Fix regression wrt\n\t  removal of static routes with multiple-hops introduced with\n\t  the workqueue conversion. We should free the relevant\n\t  nexthop and then get rib_process to run, otherwise we just\n\t  get same static route back again (with no way to unconfigure\n          it, because its already deleted from configuration).\n"
    },
    {
      "commit": "be61c4eb59b8df1aab496176d87bb2e1763f185e",
      "tree": "063e8baa7cd4a863e72d246d7c14f14842cbb604",
      "parents": [
        "b7395791a31f7b734094d032998ab632136f36f1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Aug 27 06:05:47 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Aug 27 06:05:47 2005 +0000"
      },
      "message": "\t* zebra_rib.c, rib.h: Add distance and metric arguments to the\n\t  rib_add_ipv6() function so that IPv6 routes in RIB can have correct\n\t  metric. No IPv6 routing daemon uses distance yet though.\n\t* zserv.c, connected.c, kernel_socket.c, rt_netlink.c,\n\t  rtread_proc.c,zserv.c: Pass metric and distance info to the\n\t  rib_add_ipv6().\n\n\tForwardport from stable branch.\n"
    },
    {
      "commit": "a1ac18c4d5b4f8f4f279efb2ae12b46258f22282",
      "tree": "e37732ef4b00ae98d1be693e721b01cc2566ba39",
      "parents": [
        "94f2b3923e9663d0355a829f22e4e31cf68ee7b8"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 17:17:12 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 17:17:12 2005 +0000"
      },
      "message": "2005-06-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) Extern and static\u0027ification, with related fixups\n\t  of declarations, ensuring files include their own headers, etc.\n\t  if_ioctl.c: (interface_info_ioctl) fix obvious arg mis-order in\n\t  list loop\n"
    },
    {
      "commit": "4d38fdb421ee04430ac2f4d4e8ef4a4e27c1020b",
      "tree": "a7bdb41cd18be9f612c54531efef5a5ccaab36f1",
      "parents": [
        "8b70d0b04f6bba2f30827d71084dd74fd00808b3"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 28 17:35:14 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 28 17:35:14 2005 +0000"
      },
      "message": "2005-04-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* rib.h: (struct rib) Add lock field for refcounting.\n\t* zserv.h: (struct zebra_t) Add a ribq workqueue to the zebra\n\t  \u0027master\u0027 struct.\n\t* zserv.c: (zread_ipv4_add) XMALLOC then memset should be XCALLOC.\n\t* zebra_rib.c: Clean up refcounting of route_node, make struct rib\n\t  refcounted and convert rib_process to work-queue. In general,\n\t  rib\u0027s should be rib_addnode\u0027d and delnode\u0027d to route_nodes, and\n\t  these symmetrical functions will manage the locking of referenced\n\t  route_node and freeing of struct rib - rather than having users\n\t  manage each seperately - with much scope for bugs..\n\t  (newrib_free) removed and replaced with rib_lock\n\t  (rib_lock) new function, check state of lock and increment.\n\t  (rib_unlock) new function, check lock state and decrement. Free\n\t  struct rib if refcount hits 0, freeing struct nexthop\u0027s, as\n\t  newrib_free did.\n\t  (rib_addnode) Add RIB to route_node, locking both.\n\t  (rib_delnode) Delete RIB from route_node, unlocking each.\n\t  (rib_process) Converted to a work-queue work function.\n\t  Functional changes are minimal, just arguments, comments and\n\t  whitespace.\n\t  (rib_queue_add_qnode) Helper function to setup a ribq item.\n\t  (rib_queue_add) Helper function, same arguments as old\n\t  rib_process, to replace in callers of rib_process.\n\t  (rib_queue_qnode_del) ribq deconstructor.\n\t  (rib_queue_init) Create the ribq.\n\t  (rib_init) call rib_queue_init.\n\t  (remainder) Sanitise refcounting of route_node\u0027s. Convert to\n\t  rib_queue_add, rib_addnode and rib_delnode. Change XMALLOC/memset\n\t  to XCALLOC. Remove calls to nexthop_delete and nexthop_free.\n"
    },
    {
      "commit": "55468c86040081320f557b696e509b76ddfd6c83",
      "tree": "3ee726f155f8776d4a220997681d14c0b09addd0",
      "parents": [
        "909a215508fd42473fcbe4f5292a59404e5473af"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Mar 14 20:19:01 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Mar 14 20:19:01 2005 +0000"
      },
      "message": "2005-03-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) update all c files to match the lib/vector.h rename of\n\t  (struct vector).active to max, and vector_max macro to\n\t  vector_active.\n\t* lib/vector.h: Rename to (struct vector).max to slightly less\n\t  confusing active, for the number of active slots, distinct from\n\t  allocated or active-and-not-empty. Rename vector_max to\n\t  vector_active for same reason.\n"
    },
    {
      "commit": "b6178002270192fe3ab2403dafac12e5babe11e6",
      "tree": "6b9c352d814185e16a353d17752059eb995019e0",
      "parents": [
        "8ddca7040da413cd283a4beba4634744f4e61ac8"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 21:12:56 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 21:12:56 2004 +0000"
      },
      "message": "2004-12-07 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* *.c: Change level of debug messages to LOG_DEBUG.\n"
    },
    {
      "commit": "39db97e4e02eae08a1e18528367b6e9b07eb6a93",
      "tree": "2fb3a0269f4f2fe235ef722e3ad9cc8e6005bb6c",
      "parents": [
        "39ff11dc92d004b59d1ec786fd54b27111fee0b5"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 12 20:50:58 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 12 20:50:58 2004 +0000"
      },
      "message": "Some compiler warnings fixes and fix for bugzilla #119.\n"
    },
    {
      "commit": "fce954f8de1456dd62d26b52902a4a352ef17a93",
      "tree": "3dee77fa141697940a9ff3203ea453e454e88d95",
      "parents": [
        "1cd80845dc5262ff7d3d38deb1921f0b8390f4df"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Oct 07 20:29:24 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Oct 07 20:29:24 2004 +0000"
      },
      "message": "Fix warnings. Didn\u0027t even look at files not compiled in Linux though.\n"
    },
    {
      "commit": "9e867fe663c4eb43c36f35067c0dd092e8c83c14",
      "tree": "f29461b6a2dc8c38037dc0cf91e70392f9ed4ab2",
      "parents": [
        "eb5d44eb8dcf25a1b328e57d1eabb1f89e3bc59b"
      ],
      "author": {
        "name": "jardin",
        "email": "jardin",
        "time": "Tue Dec 23 08:56:18 2003 +0000"
      },
      "committer": {
        "name": "jardin",
        "email": "jardin",
        "time": "Tue Dec 23 08:56:18 2003 +0000"
      },
      "message": "Merge isisd into the Quagga\u0027s framework:\n  - add privs support\n  - use misc quagga\u0027s definitions\n  - make it compile\"able\"\n  - fix segfault cases related to hostname()\n  - add debug isis xxx command\n\nThis patch has been approved by Paul Jakma.\n"
    },
    {
      "commit": "b5f4502146e38ee34efa5336ec82b4501a1cf705",
      "tree": "60393dde529ecb841d8ada365006d65291420a67",
      "parents": [
        "af5cd0a52c89c73ec8c0fec808ab866cdda96f30"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Nov 02 07:28:05 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Nov 02 07:28:05 2003 +0000"
      },
      "message": "2003-11-02 Krzysztof Oledzki \u003coleq@ans.pl\u003e\n\n        * zebra/zebra_rib.c: Revert patch (dating from zebra.org) which\n          caused zebra to read all routes in all tables, rather than just\n          the main table. See [quagga-dev 280].\n"
    },
    {
      "commit": "6baeb98892ee1c574af5cd3896a3a6d65cef0117",
      "tree": "ea244accc69fe5778a747c3a2c2e5c1387df7b63",
      "parents": [
        "948cf55c4447257960fda0d89fb45e93644393b1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 28 03:47:15 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 28 03:47:15 2003 +0000"
      },
      "message": "2003-10-27 Gilad Arnold \u003cgilad.arnold@terayon.com\u003e\n\n        * zebra/zebra_rib.c: (nexthop_active_update) Check for multipath\n          limit when setting changed flag to avoid spurious changes.\n          (static_install_ipv{4,6}) dont uninstall by default, might not be\n          required - avoid spurious uninstalls.\n          (static_uninstall_ipv{4,6}) only uninstall the route if its\n\t  actually FIB route.\n"
    },
    {
      "commit": "143a385f0cb858126e79bb7c637c2aede234c4ab",
      "tree": "50114b91a57e3fde3c03030d20a19663c3d576ba",
      "parents": [
        "5ae016eeecc8f0ce353b875b98a7c64ce70931dd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 29 20:06:13 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 29 20:06:13 2003 +0000"
      },
      "message": "2003-09-29 Gilad Arnold \u003cgilad.arnold@terayon.com\u003e\n\n\t* zebra/zebra_rib.c: Fix possible dangling reference to rib\n \troute_nodes - unlock it the appropriate number of times. (twice,\n\tbecause of the implicit lock). see [quagga-dev 251].\n"
    },
    {
      "commit": "7021c425a9f5bd9f62b934124becbaadd961cac0",
      "tree": "cf386f6923eac9f1c665400d0557448c4f5a89e0",
      "parents": [
        "8fc0f64b143ed2155567f5c9f0faad756252146a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jul 15 12:52:22 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jul 15 12:52:22 2003 +0000"
      },
      "message": "2003-07-15 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * lib/version.h: add ZEBRA_URL (unused for now)\n        * lib/vty.c: CMD_ERR_NOTHING_TODO when reading conf file should not\n          be fatal. slight reformating.\n        * ospfd/ospf_zebra.c: ignore reject/blackhole routes if zebra sends\n          these type of routes. probably should be a new type of route to\n          allow daemons to more easily choose whether to redistribute them\n          - rathen than just a flag (eg for reject/blackhole).\n          reorder the is_prefix_default test for ZEBRA_IPV4_ROUTE_DELETE to\n          avoid the inverted test - slightly more readable.\n        * redhat/zebra.spec.in: Add ospfapi port to services file, if\n          with_ospfapi.\n        * zebra/rib.h: Change nexthop types to an enum.\n        * zebra/rt_netlink.c: run it through indent -nut.\n          Add nexthop_types_desc[] descriptive array for nexthop types.\n          (netlink_route_multipath) debug statements indicate which branch\n          they are in and print out nexthop type.\n        * zebra/zebra_rib.c: slight reformatting.\n        * zebra/zebra_vty.c: Pass ZEBRA_FLAG_BLACKHOLE flag to\n          static_add_ipv4() if Null0 route is configured. print out Null0 if\n          STATIC_IPV4_BLACKHOLE route, and ignore flags (shouldnt be\n          possible to set flags from vty) for config and show route.\n"
    },
    {
      "commit": "5ec90d28c9268c54e000c2bcfb9b164abfacbacd",
      "tree": "ab5d297f68b94182647d043d790ffab4a2b44c93",
      "parents": [
        "dd488a78add05f10f58f4096dca622c6b5f1f0c9"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jun 19 01:41:37 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jun 19 01:41:37 2003 +0000"
      },
      "message": "2003-06-19 Vladimir Ivaschenko \u003chazard@francoudi.com\u003e\n\n\t* zebra/rt_netlink.c: Debug statements added to\n          netlink_route_multipath()\n\t* zebra/zebra_rib.c: If route has a gateway, delete only existing\n          route with that specified gateway.\n"
    },
    {
      "commit": "b21b19c5785487f2ff4a6ce38f45c2e6c35f4363",
      "tree": "c79f90ce7bd798b3f1391010153d9fdf7c7418f0",
      "parents": [
        "0e4f190ebf5a26e4b66fb49cd74ae0ff0c7e0863"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Jun 15 01:28:29 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Jun 15 01:28:29 2003 +0000"
      },
      "message": "2003-06-15 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* lib/vty.{c,h}: Remove vty layer depending on a \u0027master\u0027 global,\n\t  pass the thread master in explicitly to vty_init. Sort out some\n\t  header dependency problems with lib/command.h\n\t* zebra/: Move globals to struct zebrad. Update vty_init().\n\t* (.*)/\\1_main.c: update call to vty_init().\n"
    },
    {
      "commit": "368aa3f0f5edc4daed09055b641c47a9e9dc48c9",
      "tree": "da46e98e5c9f8a1c94189dc2de43542ffd5e266a",
      "parents": [
        "b3516a791d7d44469b9a2a51557347958fe506d1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 25 23:24:50 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 25 23:24:50 2003 +0000"
      },
      "message": "Fix missing else in static_add_ipv4() which was causing case of (!ifname)\nto always be considered to be a blackhole route. (if gate is passed in, it\ncant be).\n"
    },
    {
      "commit": "595db7f16506d2c82a3478e9f8dab00c8733d386",
      "tree": "240d477dd4b5262ba78cc50fda4b81de09e2c91c",
      "parents": [
        "726f9b2bbdd5a607f7b0a10a64547739b807e361"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 25 21:35:06 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 25 21:35:06 2003 +0000"
      },
      "message": "Add back support for null0 interface blackhole routes.\n"
    },
    {
      "commit": "726f9b2bbdd5a607f7b0a10a64547739b807e361",
      "tree": "9c46a6ce71cf4ea96553a85a231e38b462b3dee0",
      "parents": [
        "71c0fb50fe75928f8fbe1bbff1995d9d91b3702b"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 21:04:54 2003 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 21:04:54 2003 +0000"
      },
      "message": "Last fixes from 6Wind patch.\n"
    },
    {
      "commit": "81dfcaa2e27d53f4eb61c549e03065dcb1b8eec3",
      "tree": "2aed449138a4833fe343052cdfa505be74332cb4",
      "parents": [
        "15291357d130b804dcdcfd81bdb1b86a84567fd0"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 19:21:25 2003 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 19:21:25 2003 +0000"
      },
      "message": "Route (reject|blackhole) support from 6Wind patch.\n"
    },
    {
      "commit": "a4b70768b4d08683d16a1e8225411e429fb531d3",
      "tree": "7292e9fb8c75d76120bbf67c63d141d6cad37ec3",
      "parents": [
        "a0f6acd8a49906399e2ac73fde6406da552b2443"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 16 17:19:48 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 16 17:19:48 2003 +0000"
      },
      "message": "From: Gilad Arnold \u003cgilad.arnold@terayon.com\u003e\nSubject: [zebra 19084] Re: suspected memory leakage upon static route\n\nI believe this is a more complete patch, it also addresses\nallocating/freeing of nexthop-\u003eifname string buffer (1) using\nXSTRDUP/XFREE macros (thus correctly updating memory statistics), and\n(2) for all nexthop-\u003etype cases that carry an ifname string.\n"
    },
    {
      "commit": "a0f6acd8a49906399e2ac73fde6406da552b2443",
      "tree": "e89a2bd710f70fe860bfe8f7963b880fec65a0c3",
      "parents": [
        "843521964f801b1266e59df3b005b1b4bf48fdc7"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed May 14 18:29:13 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed May 14 18:29:13 2003 +0000"
      },
      "message": "From: Gilad Arnold \u003cgilad arnold at terayon com\u003e\nSubject: [zebra 19080] suspected memory leakage upon static route deletion\n\nupon deletion of a static route entry, at the end of\nzebra/zebra_rib.c/static_delete_ipv4(), there\u0027s a call to XFREE to\ndeallocate the \u0027struct static_ipv4\u0027. However, in the case of a static with\nifname as nexthop (type\u003d\u003dSTATIC_IPV4_IFNAME), this struct holds a pointer to\na dynamically allocated ifname string buffer (si-\u003egate.ifname, see its\nallocation within static_add_ipv4() using XSTRDUP). IMO, the attached patch\nis required.\n\nNotes: the same applies to IPv6 statics as well (fix included in patch);\nand, I admit I haven\u0027t yet tested that, but it seems simple enough to be\nworking... ;-\u003e\n"
    },
    {
      "commit": "d753e9eec96f03aa02a7648e4279c524c376908d",
      "tree": "5434dea114f81d8596fc87a619f65c36629b4300",
      "parents": [
        "d4f5031c5c2ca3953d071cfce0a3faa34f9b073d"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 22 19:45:50 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 22 19:45:50 2003 +0000"
      },
      "message": "Matthew Grant \u003cgrantma@anathoth.gen.nz\u003e\nSubject: [zebra 17290] [PATCHES] - Fixes for problems in 0.93b\n\nAdded ifupstaticfix\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
