)]}'
{
  "log": [
    {
      "commit": "5e558004594497ea91dee123ff14e5e487275d73",
      "tree": "ce3c91bd45bedda42d42e2fdee867ab4f465ea4d",
      "parents": [
        "6a48343cd6e392a3ae48dbb735008f911e60420d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Thu Mar 09 00:56:32 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:56 2017 +0000"
      },
      "message": "doc: Nearly all the world uses A4 paper, set as default for TeX output\n"
    },
    {
      "commit": "6a48343cd6e392a3ae48dbb735008f911e60420d",
      "tree": "9e0419498dccf52ac72ee5799cfd62cfb0ee641f",
      "parents": [
        "1bfd6551c9d1b9e3e0f2d04bbbc636ef33e4a2fd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Thu Mar 09 00:54:44 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:56 2017 +0000"
      },
      "message": "doc: Clean the tex index files up\n"
    },
    {
      "commit": "1bfd6551c9d1b9e3e0f2d04bbbc636ef33e4a2fd",
      "tree": "d635ae7bfb1a68bcc8939434d1782c8e9a70afa5",
      "parents": [
        "7ecc5f5f2c8d967670b0bf4bb4cd6d2684daa94a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Mar 08 23:31:47 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:56 2017 +0000"
      },
      "message": "doc: Fix overfull hboxes errors that cause PDF build to return fail\n\n* overfull hboxes cause texi2dvi to return fail, even if the PDf is written.\n  We hacked around this by running it with \u0027...  || true\u0027, but that\n  sucks for buildboting the docs.\n\n  Fix all the overfull hboxes.\n\n* ospfd.texi: Long command definitions can cause hbox overruns in the\n  columnar command definitions index.  This leads to strange errors\n  about \"Missing number, treated as zero.\" when building the index -\n  very hard to figure out.\n\n  \u0027show ip ospf database ...\u0027 was the culprit.  Use a distinct deffnx\n  alias for each option instead of trying to stuff them into 1 line.\n"
    },
    {
      "commit": "7ecc5f5f2c8d967670b0bf4bb4cd6d2684daa94a",
      "tree": "bd335c6782d6e5e81a224d71c6b31b690c657e01",
      "parents": [
        "3db7c8743a87c77f2e00254dd171b1eca4315a35"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Mar 08 23:31:03 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:55 2017 +0000"
      },
      "message": "doc: Remove refs to removed topology figures\n"
    },
    {
      "commit": "3db7c8743a87c77f2e00254dd171b1eca4315a35",
      "tree": "d52287e9019c02d7de1530310167656a7f21389e",
      "parents": [
        "974511e28a30f478dbc38d782f2dc0dbf4bc7d04"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Mar 08 23:29:08 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:55 2017 +0000"
      },
      "message": "doc: Explicit quagga.pdf rule can go now\n\n* Makefile.am: The Quagga specific PDF dependency is gone.  The\n  overfull boxes that caused texi2dvi to return fail code are gone.  So\n  the custom rule can go.\n"
    },
    {
      "commit": "974511e28a30f478dbc38d782f2dc0dbf4bc7d04",
      "tree": "9f24edbeb34fe2df652a9f25768babf9ea6c67df",
      "parents": [
        "dcfb4809158ade2b5070229297b95c944660cdf2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Mar 08 22:01:37 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:55 2017 +0000"
      },
      "message": "doc/routeserver: Remove needless figures, centre and tweak other figs\n\n* routeserver.texi: The full-mesh v RS topology diagrammes are fairly obvious\n  and don\u0027t deserve so much space.  As smaller wrap-floats they might be\n  acceptable, but there seems no way to access that TeX feature from\n  Texinfo.  So nuke them.\n\n  Centre the 2 other figures. Tweak size to avoid bbox overflow messages.\n"
    },
    {
      "commit": "dcfb4809158ade2b5070229297b95c944660cdf2",
      "tree": "06120f86bf0614dced424d35c12352cb48f845a8",
      "parents": [
        "69c62987e47a8c6c852b3bf90bc5e48f8b70ee5f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Mar 08 21:58:30 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:55 2017 +0000"
      },
      "message": "doc: Tweak internal layout of fig-rs-processing slightly\n"
    },
    {
      "commit": "69c62987e47a8c6c852b3bf90bc5e48f8b70ee5f",
      "tree": "9204cb593bbca756fbe98f6309b8e35ad922f8ff",
      "parents": [
        "69f8d5df72b6bd9c39c3a262ae0ed07f2cd566e9"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Mar 08 21:54:09 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:55 2017 +0000"
      },
      "message": "doc: pdftex works with PNGs now, remove dependency on PDF figures\n\n* Makefile.am: pdftex seems to work fine with PNGs now. So the need to build\n  PDF versions of the figures using ImageMagick convert is gone. Remove\n  the dependency. Can leave the rule for now, no benefit removing it.\n"
    },
    {
      "commit": "ca7399f165f892620cbabdeb2b62cf792a6fc9d6",
      "tree": "aaff60a1ad0a65e2a48eb7f30f5052bf5b992169",
      "parents": [
        "72e3b8b8d222e43bf74d4a9cd4cba63aa4d83fb5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Mar 08 17:15:00 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:50 2017 +0000"
      },
      "message": "doc: Add a nice CSS file for HTML texinfo\n"
    },
    {
      "commit": "d04f9ec9a6f3df61fc2f0cab2afd552567f83191",
      "tree": "0fe51ab4d6f52c0295e9ae4a7a915e2a1b890fa4",
      "parents": [
        "55b11c2e01d0761064863247df9c4af943cd304e"
      ],
      "author": {
        "name": "Jakub Zawadzki",
        "email": "darkjames-ws@darkjames.pl",
        "time": "Sat Mar 04 20:41:02 2017 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 06 10:37:02 2017 +0000"
      },
      "message": "doc: make netmasks in 4.3 Static Route Commands the same\n\nIn 4.3 documentation shows example for defining static routes:\n--------------------------------------------------------------\n  ip route 10.0.0.0/8 10.0.0.2\n  (...)\n  ip route 10.0.0.0 255.255.255.0 10.0.0.2\n  (...)\n  These statements are equivalent to those in the previous example.\n--------------------------------------------------------------\n\n10.0.0.0/8 is not equivalent to 10.0.0.0/255.255.255.0, fix it.\n\nshould fix #811 after html regenerating.\n"
    },
    {
      "commit": "db2dafa63bd527fc9ef49c1997f385c79294e65a",
      "tree": "c45f617eb2efcd3587a67ceb637b1c0f1908abd0",
      "parents": [
        "db968b6d3277794f2a615a5292c33eec2b9e26e3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Fri Mar 03 18:08:03 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:33 2017 +0000"
      },
      "message": "build: Fix distcheck errors\n\n* doc/Makefile.am: Clean up the info files.  Ignore errors with DVI\n  building, who cares.\n\n* tests/Makefile.am: cleanup stuff to fix distcleancheck\n"
    },
    {
      "commit": "db968b6d3277794f2a615a5292c33eec2b9e26e3",
      "tree": "d0c8fd7e4ae63c38ecb7fb2c81a7d1c92ad445f7",
      "parents": [
        "45c5426ac96a2ef815a9c21396678e1710ac4e52"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sat Mar 04 00:11:57 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:33 2017 +0000"
      },
      "message": "doc: stop generating defines.texi from configure\n\n* generating defines.texi from configure means quagga.info will always have\n  to be rebuilt by end-users, even from dist tarballs. Also breaks\n  distcheck assumptions that info won\u0027t need to be built - which can be\n  fixed with \u0027info-in-builddir\u0027 automake option, but that\u0027s too recent\n  to rely on.\n* doc/defines.texi.in: nuke\n* doc/defines.texi: Add static version.\n* {doc/Makefile.am,configure}: nuke autogen of above\n* doc/quagga.texi: remove the 1 use of PACKAGE_STRING\n"
    },
    {
      "commit": "461649d3346a15a4b8be64156181bc2dac7a538e",
      "tree": "ee4dde8788127e9f5dfb01d8633a1e20aec89e35",
      "parents": [
        "ac728fd929f5b949364089c4f0d95cfa322a7683"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Fri Jan 27 11:19:48 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:31 2017 +0000"
      },
      "message": "doc: nhrpd.texi needs to referenced by Makefile for dist tarballs\n"
    },
    {
      "commit": "b1887c852c5c040e109925887ec8c1ca8c428730",
      "tree": "651a4a1197bd54ef160c2d3420ae32a2c32f36b1",
      "parents": [
        "23426d21d5ceccec47d80288e8cf411e44f59e58"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Jan 24 16:42:19 2017 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:30 2017 +0000"
      },
      "message": "doc: add initial nhrpd documentation\n"
    },
    {
      "commit": "126b0e7c2915fb7ec3e5f72e625433a83568c7d6",
      "tree": "c864b9af705854b133a96a417057b5605ff4b37d",
      "parents": [
        "f5a4488a0dda521f19e96f2615f4a8b134c5878b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Nov 18 14:40:41 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 17:20:51 2017 +0000"
      },
      "message": "vty: Add ctrl-v \u003cliteral\u003e to allow, e.g., \u0027?\u0027 to be input for regex\n\n* Support the standard ctrl-v \u003cliteral\u003e control sequence. Otherwise there\n  is no way to do this from the venerable telnet vty. vtysh supports this\n  (configurably) via readline.\n* lib/vty.c: (VTY_ESC_LITERAL) New mode, for ctrl-v.\n  (vty_read) Additional mode to go ctrl-v -\u003e VTY_ESC_LITERAL, and\n  always insert next char.\n\nAcked-by: Vincent.Jardin@6wind.com\n"
    },
    {
      "commit": "083e5e2d7bc8098b92572792ab807da381db95ea",
      "tree": "740c756c2d0483b194f801bbef763f4483a489d1",
      "parents": [
        "5cf768a3f53029ecc482367a1ceaf7578237b06a"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Mon Nov 09 20:21:54 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:45 2016 +0100"
      },
      "message": "bgpd, doc: Allow route-map policy modifications to also affect route reflectors.\n\nBy default, attribute modification via route-map policy out is ignored on\nreflected routes. This patch provides an option to allow this modification\nto occur. Once enabled, it affects all reflected routes.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "5cf768a3f53029ecc482367a1ceaf7578237b06a",
      "tree": "9cff44b2582ae8dcdf37749cbb5055b156d04488",
      "parents": [
        "af309fa58f41457eed226d6650d0b780c053c4d8"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Mon Nov 09 20:21:53 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:45 2016 +0100"
      },
      "message": "bgpd: Support matching on local preference in route-map\n\nThis patch adds support for matching on local preference in\nBGP route-map.\n\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "60cc95921ae663de325ca3e76e8c05d8224986ab",
      "tree": "7d78102aa9650da4bba1355b2a6601135d687b37",
      "parents": [
        "4feb0d02c029e2e4f229f6283f579b8673b0ac11"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Mon Nov 09 20:21:41 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:44 2016 +0100"
      },
      "message": "bgpd, doc, lib, zebra: nexthop-tracking in zebra\n\n0. Introduction\n\nThis is the design specification for next hop tracking feature in\nQuagga.\n\n1. Background\n\nRecursive routes are of the form:\n\n   p/m --\u003e n\n  [Ex: 1.1.0.0/16 --\u003e 2.2.2.2]\n\nwhere \u0027n\u0027 itself is resolved through another route as follows:\n\n   p2/m --\u003e h, interface\n  [Ex: 2.2.2.0/24 --\u003e 3.3.3.3, eth0]\n\nUsually, BGP routes are recursive in nature and BGP nexthops get\nresolved through an IGP route. IGP usually adds its routes pointing to\nan interface (these are called non-recursive routes).\n\nWhen BGP receives a recursive route from a peer, it needs to validate\nthe nexthop. The path is marked valid or invalid based on the\nreachability status of the nexthop.  Nexthop validation is also\nimportant for BGP decision process as the metric to reach the nexthop\nis a parameter to best path selection process.\n\nAs it goes with routing, this is a dynamic process. Route to the\nnexthop can change. The nexthop can become unreachable or\nreachable. In the current BGP implementation, the nexthop validation\nis done periodically in the scanner run. The default scanner run\ninterval is one minute. Every minute, the scanner task walks the\nentire BGP table. It checks the validity of each nexthop with Zebra\n(the routing table manager) through a request and response message\nexchange between BGP and Zebra process. BGP process is blocked for\nthat duration. The mechanism has two major drawbacks:\n\n(1) The scanner task runs to completion. That can potentially starve\n    the other tasks for long periods of time, based on the BGP table\n    size and number of nexthops.\n\n(2) Convergence around routing changes that affect the nexthops can be\n    long (around a minute with the default intervals). The interval\n    can be shortened to achieve faster reaction time, but it makes the\n    first problem worse, with the scanner task consuming most of the\n    CPU resources.\n\n\"Next hop tracking\" feature makes this process event-driven. It\neliminates periodic nexthop validation and introduces an asynchronous\ncommunication path between BGP and Zebra for route change notifications\nthat can then be acted upon.\n\n2. Goal\n\nStating the obvious, the main goal is to remove the two limitations we\ndiscussed in the previous section. The goals, in a constructive tone,\nare the following:\n\n- fairness: the scanner run should not consume an unjustly high amount\n  of CPU time. This should give an overall good performance and\n  response time to other events (route changes, session events,\n  IO/user interface).\n\n- convergence: BGP must react to nexthop changes instantly and provide\n  sub-second convergence. This may involve diverting the routes from\n  one nexthop to another.\n\n3. Overview of the changes\n\nThe changes are in both BGP and Zebra modules.  The short summary is\nthe following:\n\n- Zebra implements a registration mechanism by which clients can\n   register for next hop notification. Consequently, it maintains a\n   separate table, per (VRF, AF) pair, of next hops and interested\n   client-list per next hop.\n\n- When the main routing table changes in Zebra, it evaluates the next\n   hop table: for each next hop, it checks if the route table\n   modifications have changed its state. If so, it notifies the\n   interested clients.\n\n- BGP is one such client. It registers the next hops corresponding to\n   all of its received routes/paths. It also threads the paths against\n   each nexthop structure.\n\n- When BGP receives a next hop notification from Zebra, it walks the\n   corresponding path list. It makes them valid or invalid depending\n   on the next hop notification. It then re-computes best path for the\n   corresponding destination. This may result in re-announcing those\n   destinations to peers.\n\n4. Design\n\n4.1. Modules\n\nThe core design introduces an \"nht\" (next hop tracking) module in BGP\nand \"rnh\" (recursive nexthop) module in Zebra. The \"nht\" module\nprovides the following APIs:\n\nbgp_find_or_add_nexthop() : find or add a nexthop in BGP nexthop table\nbgp_find_nexthop() : find a nexthop in BGP nexthop table\nbgp_parse_nexthop_update() : parse a nexthop update message coming\n                              from zebra\n\nThe \"rnh\" module provides the following APIs:\n\nzebra_add_rnh() : add a recursive nexthop\nzebra_delete_rnh() : delete a recursive nexthop\nzebra_lookup_rnh() : lookup a recursive nexthop\n\nzebra_add_rnh_client() : register a client for nexthop notifications\n                         against a recursive nexthop\n\nzebra_remove_rnh_client(): remove the client registration for a\n                            recursive nexthop\n\nzebra_evaluate_rnh_table(): (re)evaluate the recursive nexthop table\n                            (most probably because the main routing\n                            table has changed).\n\nzebra_cleanup_rnh_client(): Cleanup a client from the \"rnh\" module\n                            data structures (most probably because the\n                            client is going away).\n\n4.2. Control flow\n\nThe next hop registration control flow is the following:\n\n\u003c\u003d\u003d\u003d\u003d      BGP Process       \u003d\u003d\u003d\u003d\u003e|\u003c\u003d\u003d\u003d\u003d      Zebra Process      \u003d\u003d\u003d\u003d\u003e\n                                  |\nreceive module     nht module     |  zserv module        rnh module\n----------------------------------------------------------------------\n              |                   |                  |\nbgp_update_   |                   |                  |\n      main()  | bgp_find_or_add_  |                  |\n              |        nexthop()  |                  |\n              |                   |                  |\n              |                   | zserv_nexthop_   |\n              |                   |       register() |\n              |                   |                  | zebra_add_rnh()\n              |                   |                  |\n\nThe next hop notification control flow is the following:\n\n\u003c\u003d\u003d\u003d\u003d     Zebra Process    \u003d\u003d\u003d\u003d\u003e|\u003c\u003d\u003d\u003d\u003d      BGP Process       \u003d\u003d\u003d\u003d\u003e\n                                |\nrib module         rnh module   |     zebra module        nht module\n----------------------------------------------------------------------\n              |                 |                   |\nmeta_queue_   |                 |                   |\n    process() | zebra_evaluate_ |                   |\n              |     rnh_table() |                   |\n              |                 |                   |\n              |                 | bgp_read_nexthop_ |\n              |                 |          update() |\n              |                 |                   | bgp_parse_\n              |                 |                   | nexthop_update()\n              |                 |                   |\n\n4.3. zclient message format\n\nZEBRA_NEXTHOP_REGISTER and ZEBRA_NEXTHOP_UNREGISTER messages are\nencoded in the following way:\n\n/*\n *     0                   1                   2                   3\n *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |     AF                        |  prefix len   |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      Nexthop prefix                                           .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .                                                               .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |     AF                        |  prefix len   |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      Nexthop prefix                                           .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n\nZEBRA_NEXTHOP_UPDATE message is encoded as follows:\n\n/*\n *     0                   1                   2                   3\n *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |     AF                        |  prefix len   |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      Nexthop prefix getting resolved                          .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |        metric                                                 |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |  #nexthops    |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | nexthop type  |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      resolving Nexthop details                                .\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .                                                               .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | nexthop type  |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * .      resolving Nexthop details                                .\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n\n4.4. BGP data structure\n\nLegend:\n\n/\\   struct bgp_node: a BGP destination/route/prefix\n\\/\n\n[ ]  struct bgp_info: a BGP path (e.g. route received from a peer)\n\n _\n(_)  struct bgp_nexthop_cache: a BGP nexthop\n\n   /\\         NULL\n   \\/--+        ^\n       |        :\n       +--[ ]--[ ]--[ ]--\u003e NULL\n   /\\           :\n   \\/--+        :\n       |        :\n       +--[ ]--[ ]--\u003e NULL\n                :\n  _             :\n (_).............\n\n4.5. Zebra data structure\n\nrnh table:\n\n           O\n          / \\\n         O   O\n            / \\\n           O   O\n\n        struct rnh\n        {\n          u_char flags;\n          struct rib *state;\n          struct list *client_list;\n          struct route_node *node;\n        };\n\n5. User interface changes\n\nquagga# show ip nht\n3.3.3.3\n resolved via kernel\n via 11.0.0.6, swp1\n Client list: bgp(fd 12)\n11.0.0.10\n resolved via connected\n is directly connected, swp2\n Client list: bgp(fd 12)\n11.0.0.18\n resolved via connected\n is directly connected, swp4\n Client list: bgp(fd 12)\n11.11.11.11\n resolved via kernel\n via 10.0.1.2, eth0\n Client list: bgp(fd 12)\n\nquagga# show ip bgp nexthop\nCurrent BGP nexthop cache:\n 3.3.3.3 valid [IGP metric 0], #paths 3\n  Last update: Wed Oct 16 04:43:49 2013\n\n 11.0.0.10 valid [IGP metric 1], #paths 1\n  Last update: Wed Oct 16 04:43:51 2013\n\n 11.0.0.18 valid [IGP metric 1], #paths 2\n  Last update: Wed Oct 16 04:43:47 2013\n\n 11.11.11.11 valid [IGP metric 0], #paths 1\n  Last update: Wed Oct 16 04:43:47 2013\n\nquagga# show ipv6 nht\nquagga# show ip bgp nexthop detail\n\nquagga# debug bgp nht\nquagga# debug zebra nht\n\n6. Sample test cases\n\n     r2----r3\n    /  \\  /\n  r1----r4\n\n- Verify that a change in IGP cost triggers NHT\n  + shutdown the r1-r4 and r2-r4 links\n  + no shut the r1-r4 and r2-r4 links and wait for OSPF to come back\n    up\n  + We should be back to the original nexthop via r4 now\n- Verify that a NH becoming unreachable triggers NHT\n  + Shutdown all links to r4\n- Verify that a NH becoming reachable triggers NHT\n  + no shut all links to r4\n\n7. Future work\n\n- route-policy for next hop validation (e.g. ignore default route)\n- damping for rapid next hop changes\n- prioritized handling of nexthop changes ((un)reachability vs. metric\n  changes)\n- handling recursion loop, e.g.\n   11.11.11.11/32 -\u003e 12.12.12.12\n   12.12.12.12/32 -\u003e 11.11.11.11\n   11.0.0.0/8 -\u003e \u003cinterface\u003e\n- better statistics\nAddresses upstream comments.\n\n\"show ip bgp nexthop detail\" couldn\u0027t display multiple NHs due to a bug.\nFix that.\n\nFix reference counts for the nexthop cache entries\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nSigned-off-by: Vivek Venkatraman \u003cvivek@cumulusnetworks.com\u003e\n\nFix reference counts for the nexthop cache entries.\n\nSigned-off-by: Vivek Venkatraman \u003cvivek@cumulusnetworks.com\u003e\n\nEdited-by: Paul Jakma \u003cpaul.jakma@hpe.com\u003e\n- Fix nexthop_ipv6_add defs in rib.h not having been modified with rib_ prefix.\n- Remove rib_lookup_and_pushup, appears not to be used except for\n  !HAVE_NETLINK \u0026\u0026 HAVE_STRUCT_IFALIASREQ case of ioctl.c::if_set_prefix,\n  so it\u0027s not being used at all on platform with most testing of RIB.\n"
    },
    {
      "commit": "6112d11a978af54f87ac55daa9e965d949cb0041",
      "tree": "3cffda401e4fdebce481b463bfe09345ed400efd",
      "parents": [
        "5779fda137803a4b1e534f6ba70781681baf3fda"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@sproute.com",
        "time": "Mon Apr 04 10:54:59 2016 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:42 2016 +0100"
      },
      "message": "doc: add blurb on use of protobuf with FPM\n\nAdd text about using protobuf as an alternative format for the FPM\ninterface.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@sproute.com\u003e\n"
    },
    {
      "commit": "0ffd69a9bf58ab2e0105336f10753293230a4360",
      "tree": "4754dc8d7e943c17145d201c29a0c5eb3b4a1ff8",
      "parents": [
        "3676cb0c029c8f8f06ab703dd441c1e23e5ef333"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Aug 03 15:22:39 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:39 2016 +0100"
      },
      "message": "doc: Add isisd.texi to quagga_TEXINFOS so it gets in dist tarball\n"
    },
    {
      "commit": "ec04b9faf9ec55ccf7d5bb16cf17a85051fc8270",
      "tree": "3966ebeaf299c3400079a8b3bf4a396f2e454e47",
      "parents": [
        "4f593574c41deb598cbbefde5c6d938799e81d5a"
      ],
      "author": {
        "name": "Olivier Dugeon",
        "email": "olivier.dugeon@orange.com",
        "time": "Tue Apr 19 19:18:18 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:39 2016 +0100"
      },
      "message": "doc: Update documentation for Traffic Engineering\n\nSigned-off-by: Olivier Dugeon \u003colivier.dugeon@orange.com\u003e\n"
    },
    {
      "commit": "86b2a0a12ace817e64e8e4a719b1ba9a8e6af253",
      "tree": "d077de18b7d595f88dc4fb423a5dba91f8650741",
      "parents": [
        "f53585d59b62b12d68282154af346796b75c7f2f"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue May 17 12:19:51 2016 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:29 2016 +0100"
      },
      "message": "lib: change command logging to be off by default\n\n* lib/vty.c: add \u0027log_command\u0027 to enable logging of vty commands executed.\n  Default command logging to off.\n"
    },
    {
      "commit": "ac6ff4643645315db648604771926218aa4ead2d",
      "tree": "39a8c4f4910060019b2d6df9c944eb456f1d9579",
      "parents": [
        "5f678889843fb9bc3f07d05eebc2f8fb35584a91"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue May 17 07:10:37 2016 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:29 2016 +0100"
      },
      "message": "bgpd: Add flag to not change e{u,g}id on startup and run as unprivileged user\n\n* bgp_main.c: add -S / --skip_runas flag to not change effective user/group\n  on start up.  Enables bgpd to be run by unprivileged user.\n"
    },
    {
      "commit": "f8113a2b10a97ba0d5e915b318cebea283d03169",
      "tree": "5724eaebbbdc1a72bdbdb8f3c9f73aa06ceafd1a",
      "parents": [
        "e84e4d3d2d6127bfd467d9fc18e09450245f7c41"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Feb 16 11:28:35 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 17:53:23 2016 +0000"
      },
      "message": "doc: older versions of texinfo seem to be sensitive to location of unmacro\n\n* bgpd.texi: The unmacro of mprec seems to be disliked by older texinfos.\n  Moving it to after the section fixes it. Even easier, just don\u0027t undef the\n  macro.\n"
    },
    {
      "commit": "e84e4d3d2d6127bfd467d9fc18e09450245f7c41",
      "tree": "35fb3757c6d0f9675b67f17b3472824fa511d6a7",
      "parents": [
        "a5efdb60905049e1224a020b78dd9699bdd15b29"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Feb 15 14:11:06 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 17:53:23 2016 +0000"
      },
      "message": "doc: Distribute a modern version of texinfo.tex with the docs\n\n* doc/texinfo.tex: Ship a more recent texinfo.tex, from texinfo 6.1, so we\n  don\u0027t have to worry about that.  E.g., this should allow UTF-8 unicode\n  chars to be used directly in the text.\n* doc/Makefile.am: Add previous to EXTRA_DIST\n"
    },
    {
      "commit": "2e320423337c628bfeb814ec15fd5f575ebc5eed",
      "tree": "21174999e4fc60d7d0ab13313bc92b98728a1118",
      "parents": [
        "9099f9b2a66e86f8a90d7fe18f61bd2bb1bc6744"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Jan 13 10:49:50 2016 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "doc, vtysh: Fixup of history handling\n\nThis fix does two things:\n\n1) If the ${HOME}/.history_quagga file does not exist, create it\nfor history storing.\n2) Allow vtysh -c \"...\" commands to be stored in history file\nas well\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "544ec70f66d0ec081dadde79bec1f25c2241f57f",
      "tree": "35d0ec1b6e4c693192cc6e3a0ddd7482e1c32802",
      "parents": [
        "f9b6c3938642090ffa1cae8b7125abff2b1e9fb0"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Tue Jan 12 13:42:10 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:45 2016 +0000"
      },
      "message": "doc: Add AFI/SAFI show commands to manual\n\nSigned-off-by: Lou Berger \u003clberger@labn.net\u003e\n"
    },
    {
      "commit": "d5062d218994885710fe02f516f0c06025b4fc9a",
      "tree": "e0d596a5e52b7ec5417bbf410d7c25733222d91c",
      "parents": [
        "6d4742bef722e6fab45fb6eb22ed2c7b7570a2e6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Dec 02 16:47:43 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:32 2016 +0000"
      },
      "message": "docs: Update bgpd docs, inc. on decision process, and with a section on MED.\n\n* bgpd.texi: Document the -l argument. Update the \u0027BGP decision process\u0027 table\n  to reflect what /actually/ is implemented. Add docs on \u0027compare-routerid\u0027 in\n  the bestpath section.\n\n  Add a section on MED, to highlight the issues it has by default, and to\n  highlight that it is terminally broken for its original purpose in many\n  modern iBGP topologies.\n\n  Mention the potential workarounds and fixes.\n\n* routemap.texi: set an anchor on \u0027set metric\u0027 so bgpd.texi can reference it.\n"
    },
    {
      "commit": "dbe99e0c407bcb383d0be0c0010fefccc5b46866",
      "tree": "db2828cebc59de453dde7061539d9140fadec17b",
      "parents": [
        "76fbc64c5d82c6f540cb4a1ac855f9f098fa6c5f"
      ],
      "author": {
        "name": "Alexis Fasquel",
        "email": "alexis@pch.net",
        "time": "Mon Nov 16 13:55:16 2015 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:12:46 2015 -0500"
      },
      "message": "bgpd: Update dump to allow Extended Time Format\n\nAllow the bgp dump functionality to handle the Extended Time format\nas specified in RFC 6396.\n\nFixes a segmentation fault with multiple dump rules as well.\n\nSigned-off-by: Alexis Fasquel \u003calexis@pch.net\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "e56aab94a615a2b676473fbd09145b444a348029",
      "tree": "82945742e1b8386f8faf12ac4f26e8fc0403a15c",
      "parents": [
        "ffe794426af2b142ecfed7021d34d8f868857219"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 20 16:14:56 2015 +0100"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Nov 25 11:36:26 2015 -0500"
      },
      "message": "doc: Add \u0027OSPF Fundamentals\u0027 section to OSPF docs\n\n* ospf_fundamentals.texi: New section explaining the fundamentals of OSPF\n  for system admins, to help them debug their networks.\n* {Makefile.am,ospfd.texi}: include and build previous\n\nConflicts:\n\tdoc/Makefile.am\n"
    },
    {
      "commit": "8a667cf7c58a065bcd6371f4ad6f25bfb084181c",
      "tree": "59ee7f3ad6e24f64e8c7c57ddaa3a6b8a4b97f5f",
      "parents": [
        "738bce789a393efe2d3f35fd541cf149dd7f9311"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 27 16:51:42 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:59:28 2015 +0000"
      },
      "message": "ospfd: Extend \u0027ip ospf area\u0027 to take address argument + rationalise ospf enable\n\n* ospfd.c: (general) Clean up the whole running of OSPF on interfaces.\n  (add_ospf_interface) taking (struct interface *) arg is pointless here.\n  (ospf_is_ready) new helper.\n  (ospf_network_run_subnet) Put all the code for choosing whether to enable\n  OSPF on a subnet, and if so which area configuration to use, here. If a\n  subnet should not be enabled, ensure an existing oi is freed.\n  (ospf_network_run_interface) Just call run_subnet for all subnets on an\n  interface.\n  (ospf_network_run) Just call run_interface for all interfaces.\n  (ospf_if_update) Just call run_interface for the given interface.\n  (ospf_network_unset) Just call run_subnet for existing ois.\n  (ospf_update_interface_area) helper: update area on an oi, or create it.\n  (ospf_interface_set) renamed to ospf_interface_area_set for clarity.\n  Ensures OSPF is created, then into if_update.\n  (ospf_interface_unset) renamed to ospf_interface_area_unset and collapses\n  down to simple loop to call run_subnet for all ois.\n* ospf_interface.h: add a more general OSPF_IF_PARAM_IS_SET, which does the\n  right thing and takes default config into account.\n* ospf_vty.c: (OSPF_VTY_GET_IF_PARAMS) new macro with common code for handling\n  interface parameter commands - only used for \u0027ip ospf area\u0027 in this commit.\n  (OSPF_VTY_PARAM_UNSET) similar\n  ({no,}ip_ospf_area) Use said macros.\n* doc/ospfd.texi: add \u0027ip ospf area\u0027 command.\n\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "336724d628be71022f80cfe3dfb34274ad95ec14",
      "tree": "aa6b11c1c89d5f84d57f3baf3a8df7fa086d852c",
      "parents": [
        "219cdc95d93eda93240d472814ef4aa8bd36b039"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon May 11 15:13:31 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri May 15 16:41:57 2015 +0100"
      },
      "message": "babeld: Remove babeld from Quagga\n\nThis commit removes babeld from Quagga because the Quagga project is unable\nto meet the wishes of the babeld authors.\n"
    },
    {
      "commit": "f16195c173f8e2e17ea35f143b6ffcd50c0619fb",
      "tree": "ff7a7ef4f3573a036a9bc1d1cd9c1b7f28fdf763",
      "parents": [
        "7abd87529499e5d76435213e2590838c5e320a9a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 28 08:40:58 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:47 2015 +0100"
      },
      "message": "doc: fix some warnings\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "7d924b422ffdeb37027ac979c6a62d845499fab8",
      "tree": "c1dbeed25512c4e4633d39a1abf4bae25314665d",
      "parents": [
        "60b815eb26c4e94e07524a508433e6f66a6d6183"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 07:00:06 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 07:00:43 2015 +0100"
      },
      "message": "doc: list pimd.8 in EXTRA_DIST\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1f298949bea9e58623eb81f245491dcdb1df8c59",
      "tree": "43f99443889cd692a3f6c8adfc40328a868efb67",
      "parents": [
        "7cb0d4a384b4964cc53b61549ffdef37fb0d76c5"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Aug 21 15:47:28 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:59 2015 +0100"
      },
      "message": "pimd: -z command-line switch to specify zebra socket path.\n"
    },
    {
      "commit": "ff57d3653efe4a1428147204b54cacf3651c4dd0",
      "tree": "0b9ae54ba0da0f9a0391830445751495a248f11b",
      "parents": [
        "829198800217fe321faa397d21e2d8f99fcaf0dd"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Wed Jun 25 15:54:03 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:56 2015 +0100"
      },
      "message": "pimd: Fixes to build against current quagga.\n"
    },
    {
      "commit": "1f7a2b44687a49e4dab649ce369b5735aa2dd20f",
      "tree": "680c5395233acfd9bdb09a0b34765be6a46ab1ea",
      "parents": [
        "d1a87ee63042225d4b3bf6b4655cd7e0e2b64828"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Apr 01 18:38:50 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:56 2015 +0100"
      },
      "message": "github repository.\n"
    },
    {
      "commit": "871dbcfede60a8d2d286728bcbd88f27c2035b87",
      "tree": "f3188f3ab1c4856febf70647a32f6d854668aa50",
      "parents": [
        "b162ab753e70328cb6815e58b4bc5b03e9dd4f42"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Aug 11 15:43:05 2009 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:49 2015 +0100"
      },
      "message": "[pim] Initial pim 0.155\n"
    },
    {
      "commit": "b162ab753e70328cb6815e58b4bc5b03e9dd4f42",
      "tree": "2457d5c0002d89a6df20fa47db4856a75ee23717",
      "parents": [
        "a4e830c7cc0e10a851047aebe008ce7a3f8ef29b"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Feb 02 03:00:22 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Feb 02 03:00:22 2015 +0100"
      },
      "message": "doc: explain rpf lookup default mode\n\nReported-by: Alexis Rosen \u003cquagga-users@alexis.users.panix.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a4e830c7cc0e10a851047aebe008ce7a3f8ef29b",
      "tree": "08c6cd5e17eab334c16bfc426d8ff6e305f402d5",
      "parents": [
        "e832c34fd19aa6b2df7c28e78f07617095cf136e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 30 01:44:25 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 30 01:44:25 2015 +0100"
      },
      "message": "doc: zebra multicast RIB commands\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5e4ba81dc212b172e715afa7b6ea668cddd8485d",
      "tree": "ff1b40293b610a0d10523b3b7fcc0b047dd4d7e9",
      "parents": [
        "85c854aa720c02a56b1ecbbf12a763a326d11a63"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Mon Oct 20 17:49:44 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 25 15:57:12 2014 +0000"
      },
      "message": "doc: Document \u0027set as-path prepend\u0027 and \u0027set as-path prepend last-as\u0027\n"
    },
    {
      "commit": "85c854aa720c02a56b1ecbbf12a763a326d11a63",
      "tree": "23928a702774512c806782e98f9c1aab3eb2f5c5",
      "parents": [
        "1a211cb369dc865a4e7e9f58a100c041af457262"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Sep 30 11:31:53 2014 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 25 15:57:12 2014 +0000"
      },
      "message": "bgpd: implement route-map set as-path prepend last-as\n\nIt picks up the AS to add from the aspath, or uses the peers\nAS number. Useful mostly in iBGP setups.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "384d7ad98c109e92eaf65bf10a3256e5657639c3",
      "tree": "b279059f854eed239d7b8834270adecd49d9108d",
      "parents": [
        "7a6eec54eaffa82f4f03363314bb81c400eb2a66"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 16:09:10 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:10:21 2014 +0100"
      },
      "message": "docs: defines.texi include seems to want to be after setfilename\n\n* quagga.texi: I\u0027m getting warnings about stuff in defines.texi not being\n  defined when building quagga.info. Seems to be fixed by moving the include\n  of defines.texi to the end of the header. Also, the Texinfo docs suggest\n  setfilename must go first.\n"
    },
    {
      "commit": "9e7a53c179f6897128b24435452b5d3d0f8c715a",
      "tree": "80a5cc6e9e6dc411587764d865a2bf5f489000ba",
      "parents": [
        "2aa640bd78b64821bde9a53ecdd1e96e91b20ae4"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Apr 24 10:22:37 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:20:20 2014 +0300"
      },
      "message": "bgpd: implement \"next-hop-self all\"\n\nAs specified in:\nhttp://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/command/irg-cr-book/bgp-m1.html#wp4972925610\n\nThis allows overriding next-hop for ibgp learned routes on an\nRR for reflected routes.\n\nEspecially useful for using iBGP in DMVPN setups. See:\nhttp://blog.ipspace.net/2014/04/changes-in-ibgp-next-hop-processing.html\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\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": "404fd2974fb53340be6d570b86f2f6f4c0a100c6",
      "tree": "28941c7a03fdd30fbebdc7e734d51854823261a8",
      "parents": [
        "7b3b98ae3ecdad20cf5cebd2a6532aee17184d95"
      ],
      "author": {
        "name": "Joachim Nilsson",
        "email": "troglobit@gmail.com",
        "time": "Wed Aug 21 09:39:33 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:34:22 2014 +0200"
      },
      "message": "ripd: fix \"show ip rip status\" documentation\n\nThe command was mis-named in the documentation as \"show ip protocols\".\n\nSigned-off-by: Joachim Nilsson \u003ctroglobit@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5d804b439a4138c77f81de30c64f923e2b5c1340",
      "tree": "b63e3dc3a266d42311392e57c37e2b0a9855ff0b",
      "parents": [
        "5f9adb5d26d3af31b00c02084468e9f92b461b01"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Thu Sep 12 03:37:07 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: support TTL-security with iBGP\n\nTraditionally, ttl-security feature has been associated with EBGP\nsessions as those identify directly connected external peers. The\nGTSM RFC (rfc 5082) does not make any restrictions on type of\npeering. In fact, it is beneficial to support ttl-security for both\nEBGP and IBGP sessions. Specifically, in data centers, there are\ndirectly connected IBGP peerings that will benefit from the protection\nttl-security provides.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\n[DL: function refactoring split out into previous 2 patches.  changes:\n     - bgp_set_socket_ttl(): ret type int -\u003e void\n     - is_ebgp_multihop_configured(): stripped peer \u003d\u003d NULL check\n     - comments/whitespace]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2fdd455cfd1f758b7aa2e6c8e3d185098b93908c",
      "tree": "3b2d28c7b389228cc6c1e3809660c4f7f22c3f18",
      "parents": [
        "d92a2f39b46f1990052d2db046b47edf7bb21ebb"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:02:36 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:15:22 2014 +0200"
      },
      "message": "bgpd: add \u0027bgp bestpath as-path multipath-relax\u0027\n\nCompute multipath in BGP based on AS_PATH hop count match. If the knob\nis turned on, it is not required to have an exact match of AS_PATHs\n(provided other multipath conditions are met, of course).\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "98a59492d9152df8c93612d2d12f170b5c034189",
      "tree": "e1c2944f409d2fff83f0498ce5e0504f8d03bf13",
      "parents": [
        "8c99b4c11e69e4cf0ac03c551764cccc0a3fe35a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Aug 01 08:12:25 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:23:21 2014 +0200"
      },
      "message": "build: remove now-useless --{en, dis}able-tests\n\ncommit d771020 \"don\u0027t build tests unless make check is run\" has made the\n --{en,dis}able-tests switch completely useless.  The differentiation is\nnow made by running \"make check\" or not doing so.  The only effect of\nthe switch is an \"empty\" excursion of make into the tests/ directory.\n\n(well, and it turns \"make check\" useless from the main directory if\n --disable-tests is given, which I don\u0027t think makes sense either)\n\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c99b4c11e69e4cf0ac03c551764cccc0a3fe35a",
      "tree": "930f0e123c239adf23553dfb3d5b5e4f83ab0e5e",
      "parents": [
        "af514777f4327932a3e84f83d79e941967503e15"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Aug 01 07:43:36 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:20:44 2014 +0200"
      },
      "message": "build: improve backtrace support/detection\n\nlibexecinfo is used to provide backtrace() on *BSD.  The API is\ncompatible with glibc\u0027s, so this is a \"free\" improvement.\n\nTo improve configure behaviour, the following configure options are\nmodified/introduced:\n\n* --enable-gcc-rdynamic now defaults to \"on\" if the compiler is gcc.\n  (I sadly wasn\u0027t able to find any documentation on the availability of\n  this option for llvm, even though at least the version I have\n  installed does support it)\n\n* --enable-backtrace has been added.  This behaves as off/auto/on\n  switch, i.e. giving either {dis,en}able will result in the requested\n  behaviour (or an error if support wasn\u0027t found)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fd5006896fce2816244c1ef4cabc736279548538",
      "tree": "c9fb889019186c6aa7c800643f3ff1d9171a96a7",
      "parents": [
        "c19543b223d3b8463c048f346b8044589e0cce39"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Wed Oct 24 14:45:54 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Mar 21 06:28:48 2014 +0100"
      },
      "message": "ospf6d: add \"auto-cost reference-bandwidth\" command\n\nThis command allows the user to change to default reference bandwidth\nfor cost calculations. The default value is 100 Mbps. With a default\nbandwidth of 10 MBps, the default cost becomes 10. Those values are\nconsistent with OSPFv2.\n\n[DL: resolved conflicts in vty command additions \u0026 docs]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c19543b223d3b8463c048f346b8044589e0cce39",
      "tree": "7da71baef36e7c7b4e628c645580f8cc18c1aabe",
      "parents": [
        "1db65fadf627637621c342b789b9a3604ca5fab5"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Wed Oct 24 14:45:53 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Mar 21 06:28:47 2014 +0100"
      },
      "message": "ospf6d: compute interface cost from its bandwidth\n\nPreviously, the interface cost was a fixed default value that a user\nwas allowed to change with \"ipv6 ospf6 cost XX\". As what is done with\nOSPFv2, we change this behaviour to compute the default interface cost\nfrom the interface bandwidth.\n\nThe user can still force a cost with \"ipv6 ospf6 cost XX\". He can get\nthe default value with \"no ipv6 ospf6 cost\". Moreover, the default\ncost value was 1. The cost is now computed from the bandwidth and a\ndefault reference bandwidth of 100 MBps (as for OSPFv2). Since the\ndefault bandwidth for an interface is 10 MBps, the \"default\" cost\nbecomes 10 instead of 1.\n\n[DL: resolved conflict in ospf6d/ospf6_interface.c]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c5926a92235874574b20e426a3752c1451a90ec7",
      "tree": "c8b8b66eee832e3db5e5d315e966b168918ef57e",
      "parents": [
        "bf986da797e7d2a0aaae313fea626ba433581f03"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Sat Aug 24 07:55:00 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 07 18:15:42 2013 -0800"
      },
      "message": "ospf6d: add p2p interface support\n\nSigned-off-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nSigned-off-by: Ayan Banerjee \u003cayabaner at gmail.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nReviewed-by: James Li \u003cjli at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3810e06eebe14f75c66fb17a88574384573e95fa",
      "tree": "0e7ba30d0b24d1ea874eb257b78fdeed2eaebf4c",
      "parents": [
        "8551e6dadce41fb87a61767af723cb25ae611a04"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Sat Aug 24 07:54:09 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 07 18:15:30 2013 -0800"
      },
      "message": "ospf6d: schedule SPF to run on events rather than directly on each event.\n\nOSPV3 SPF triggers on every SPF-able event instead of using timers the way\nOSPFv2 does. This patch makes SPF be triggered/throttled similar to OSPFv2.\nIt adds a command to quagga identical to the OSPFv2 equivalent to configure\nthese timers.\nSummary:\n\nSigned-off-by: Dinesh Dutt \u003cddutt at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\n[DL: removed reference to oa-\u003ets_spf for rebase]\n[DL: killed timeval_subtract]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b58c90807c9d0bfa9601704c7490a16070906004",
      "tree": "b984d7577d72e5af08cba391c5a2446ec02bac8c",
      "parents": [
        "24c6bb86f4d21c74149bc0a7e50f9b95da0b6fd3"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri Mar 22 08:54:44 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 09 17:04:25 2013 +0200"
      },
      "message": "doc: fix makeinfo errors and one warning\n\ncommit 4afa50b added few lines that are syntactically incorrect\nwith leading plus sign.\n\nCc: Denis Ovsienko \u003cinfrastation@yandex.ru\u003e\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "44a86a0278c1678fd4b8dfa56c4f5f2feb6df3ad",
      "tree": "6a959802774bd76621baccfc4d3e79fb7759add6",
      "parents": [
        "fa75585d3cac97616de4ea7c6805d91f709456eb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 25 09:14:52 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 23 22:10:09 2013 +0100"
      },
      "message": "guile: remove\n"
    },
    {
      "commit": "f1ef81b2476ea533ac3d2129aa0e89653c427323",
      "tree": "107bc07162b377b16af43d59cca4ce1a82a747f0",
      "parents": [
        "66b63aa036c75737c3a8cea9693eff4dec84f903"
      ],
      "author": {
        "name": "Ulrich Weber",
        "email": "ulrich.weber@Sophos.com",
        "time": "Tue Jan 22 10:39:18 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 23 18:19:24 2013 +0100"
      },
      "message": "zebra: use SO_RCVBUFFORCE for netlink socket\n\nso net.core.rmem_max must not be adjusted. Requires\nlinux kernel \u003e\u003d 2.6.14, falls back to SO_RCVBUF on error\n\nSigned-off-by: Ulrich Weber \u003culrich.weber@sophos.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b0baf0740e3d6a01980cef7ea0af0a61c10b1bcd",
      "tree": "d0cd2ba0f37bfceee09ade59f3571a09fd03d628",
      "parents": [
        "d3c74d218bfbd9b5b9c39ef7d286f1dd007f2a74"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 18 19:11:59 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 01 17:55:05 2013 +0100"
      },
      "message": "doc: update some introduction paragraphs\n\nin particular,\n- add IS-IS to some listings\n- list Solaris \u0026 OSX as \"some work required\"\n- remove OS version numbers.  We have no base to specify any of them.\n- list supported C compilers (gcc, clang, icc)\n- cut the Quagga 2.0 stuff that promises QoS and firewall functionality\n"
    },
    {
      "commit": "b9c24cd23091e817942d4eaab95712e84dbec8aa",
      "tree": "69f4c48db4625a6fbd40eb912024db8a50f199c1",
      "parents": [
        "5adc2528d386f037cc39e8029616295c3fec2db4"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:49:00 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "doc: add blurbs on zebra FPM interface and commands\n\nUpdate documentation with some text on the zebra interface to the\noptional Forwarding Path Manager component, and the related cli\ncommands.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5aebb9c77fc2257c9d9df72db66668fabb24fc52",
      "tree": "eb6964198f32c3196710ba1812902c43ef87f1b4",
      "parents": [
        "8b366b9cfd1f3ec1a45e0f82db7fdb27e3bb3594"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Wed Nov 07 23:50:09 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:10:51 2012 +0100"
      },
      "message": "bgpd: document bgp neighbor local-as peer command\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7d50ad444ffadd4110152113cc9583db96b3ad67",
      "tree": "ace068bdeae6075c6aeac71884e2cf3c8e73ddc4",
      "parents": [
        "e2b1580cbc450b55491efd2cf03c967e53e63f5f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 03 11:19:52 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 03 11:21:31 2012 -0700"
      },
      "message": "doc: update installation instructions\n\nconfigure parameters have changed quite a bit, several options are\nenabled by default now and there\u0027s --disable-tests.  Update\ndocumentation to match.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0ff4b9c96793898429052de576d8da368e48997e",
      "tree": "17a95f8a3182bc57cc3f00e92ade41ba49223b72",
      "parents": [
        "b7c0d0651cd64f644d02ef5e4d1b82febe7e57d8"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Fri May 25 12:04:51 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "agentx: add appropriate documentation\n"
    },
    {
      "commit": "7b0df9c5bad83e2a2eb047e84edc00b3bc1d562c",
      "tree": "edfd323bf55d03e48f235730e8e9aa512eecdad1",
      "parents": [
        "f027d331fc24c0b4aed77ab7507a9635db313f3c"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Mon Apr 30 11:36:16 2012 -0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue May 01 17:51:26 2012 +0200"
      },
      "message": "doc: add ospfclient(8) and watchquagga(8) man pages\n\nTaken from Fedora packaging.\n\nSigned-off-by: David Ward \u003cdavid.ward@ll.mit.edu\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "f027d331fc24c0b4aed77ab7507a9635db313f3c",
      "tree": "9225361fe97a2b0f03ff6d1b5e99b2bb861b5c90",
      "parents": [
        "2e14a748061921f1f656b07890c4932f97c2baaa"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Mon Apr 30 11:36:15 2012 -0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue May 01 17:51:26 2012 +0200"
      },
      "message": "doc: only package man pages for daemons that are built\n\nSigned-off-by: David Ward \u003cdavid.ward@ll.mit.edu\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "6881f2698279f3c47a55e8969860eeac59e8c3d7",
      "tree": "7408dfdeff638ce16273cd7c8c4d9c35a99cfe87",
      "parents": [
        "cbde15513ba47f6e7f6d02fcafcfb12cd5b1df77"
      ],
      "author": {
        "name": "Juliusz Chroboczek",
        "email": "jch@pps.jussieu.fr",
        "time": "Tue Feb 14 15:43:34 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:54 2012 +0100"
      },
      "message": "babeld: remove \"parasitic\" mode.\n\nThis is the functionality described in Appendix C of RFC 6126.  Its\nmain purpose is to avoid keeping a full source table, which makes it\npossible to implement a subset of Babel in just a few hundred lines of\ncode.  However, in Quagga the code for maintaining the source table is\nalready there, and a parasitic implementation can be simulated using\nfiltering -- so it makes little sense to keep the functionality.\n"
    },
    {
      "commit": "4d176dc07ccdcdefcd0e40043233a8c4f136f5c1",
      "tree": "feea17526352c6fca5f61dd398279007ff6a2881",
      "parents": [
        "36329c02c36703cc2158c1c99b86045fed26d4ae"
      ],
      "author": {
        "name": "Juliusz Chroboczek",
        "email": "jch@pps.jussieu.fr",
        "time": "Tue Feb 14 08:52:19 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:54 2012 +0100"
      },
      "message": "babeld: fix documentation.\n"
    },
    {
      "commit": "a14ef5eeccc8c76c41830475bbe3c31c9e14faa5",
      "tree": "7099b5d4614c05491a1a5a1cef512f64c3f2512c",
      "parents": [
        "ce590ecd85b3cf32c5429f09e12d92248cc01ef2"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Feb 11 21:06:16 2012 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:54 2012 +0100"
      },
      "message": "babeld: justify \"running-config\" meaning in CLI\n\nThe primary focus of this commit is to make \"show running-config\"\ncommand display more current configuration, including some of the bits\npreviously seen in the output of \"show babel running-config\". Besides\nthat, the following commands were renamed for consistency with the\nsyntax of other components:\n\n\"debug *\" to \"debug babel *\" (and moved to top level)\n\"show babel running-config\" to \"show babel parameters\"\n\n* babel_interface.c\n  * show_babel_running_config(): rename to show_babel_parameters(),\n    update syntax pattern, don\u0027t call show_babeld_configuration()\n  * babel_if_init(): update respectively\n  * babel_enable_if_config_write(): new VTY helper for static\n    babel_enable_if\n* babel_interface.h: add extern declaration\n* babel_main.c: unset all debug options by default\n  * show_babel_main_configuration(): remove debug options decoder\n* babel_zebra.c\n  * babel_debug(): rename to debug_babel(), update syntax pattern\n  * no_babel_debug(): rename to no_debug_babel(), update syntax pattern\n  * babelz_zebra_init(): update respectively\n  * debug_babel_config_write() new VTY helper for static debug_type\n* babel_zebra.h: add extern declaration\n* babeld.c\n  * babel_config_write(): add the code to output \"debug babel *\",\n    \"router babel\", \"redistribute *\" and \"network *\" statements\n  * show_babeld_configuration(): dismiss\n* babeld.h: remove extern declaration\n* babeld.texi: update for renamed commands\n* babeld.conf.sample: idem, add debug statements block\n"
    },
    {
      "commit": "8a46e12f5f0b02d58b1d7bc6c0d140aeec6c80c2",
      "tree": "a0c7538f2b1378d34ee148b534918207160589b6",
      "parents": [
        "68c65a5d3a6a8cb8133b5e9311fc5dc21de88e9c"
      ],
      "author": {
        "name": "Matthieu Boutier",
        "email": "boutier@pps.jussieu.fr",
        "time": "Sat Feb 11 15:09:33 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:54 2012 +0100"
      },
      "message": "doc: fix typo.\n"
    },
    {
      "commit": "68c65a5d3a6a8cb8133b5e9311fc5dc21de88e9c",
      "tree": "94c9e7ae2896736dc1c1c227189e8930a2f92c22",
      "parents": [
        "173982334c978fdf2e7030d32a2cdc99587fb434"
      ],
      "author": {
        "name": "Juliusz Chroboczek",
        "email": "jch@pps.jussieu.fr",
        "time": "Sat Feb 11 14:28:17 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:54 2012 +0100"
      },
      "message": "doc: update babeld documentation.\n"
    },
    {
      "commit": "173982334c978fdf2e7030d32a2cdc99587fb434",
      "tree": "85090c53119c78ddcbaf73368c1779edd0d83996",
      "parents": [
        "9c298c7119c1dba6c589b8f4c358debd8e694b72"
      ],
      "author": {
        "name": "Juliusz Chroboczek",
        "email": "jch@pps.jussieu.fr",
        "time": "Sat Feb 11 14:27:16 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:54 2012 +0100"
      },
      "message": "doc: fix Makefile dependencies for babeld.\n"
    },
    {
      "commit": "3c442e8802c260a0ce9787b5f432a7a2a093be25",
      "tree": "4fdbf9843386175a380a46e2b75dc0f23aeceb4d",
      "parents": [
        "9c58fbd7d7658055c2b3074489c6d338448d88e9"
      ],
      "author": {
        "name": "Matthieu Boutier",
        "email": "boutier@pps.jussieu.fr",
        "time": "Wed Feb 08 23:30:46 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:54 2012 +0100"
      },
      "message": "babeld: fix wire{d,less} commands name.\n"
    },
    {
      "commit": "73c74d4ee8bd0bc3fae899679e852df9c61f0ed3",
      "tree": "98d49f532b6ca046400be60d67eb80972bd5469d",
      "parents": [
        "f92a55ff0ef8e1186ad52369ace299bc91fdb791"
      ],
      "author": {
        "name": "Matthieu Boutier",
        "email": "boutier@pps.jussieu.fr",
        "time": "Wed Feb 08 00:32:59 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:53 2012 +0100"
      },
      "message": "doc: fix typo in babeld.\n"
    },
    {
      "commit": "f92a55ff0ef8e1186ad52369ace299bc91fdb791",
      "tree": "36b5068221797590a1c0e65e83a946fdccf9a885",
      "parents": [
        "ec0c848047954158b4316d45586079cbb774a7fe"
      ],
      "author": {
        "name": "Juliusz Chroboczek",
        "email": "jch@pps.jussieu.fr",
        "time": "Tue Feb 07 16:33:17 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:53 2012 +0100"
      },
      "message": "doc: Document babeld.\n"
    },
    {
      "commit": "a20a4060c8b90e3d88ce97d439eee1a38260d7c5",
      "tree": "bf164684241b37dfd5717bfe5b56d4acf69fce3a",
      "parents": [
        "fa482834ea1a30eff056dbf0f36a6f3262460a08"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 08 16:42:31 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 08 16:42:31 2012 +0000"
      },
      "message": "doc: Fix an apparently no longer legal @itemize @asis\n\n* basic.texi: @asis isn\u0027t legal with @itemize apparently, should be @w\n  according to docs, but @w{} seems to be needed. Fixes doc build error.\n"
    },
    {
      "commit": "4afa50b393ff1fb34dd577888a05b81dfdced5af",
      "tree": "e9bb7272c91a79276f2da1450b1cee14bc80b188",
      "parents": [
        "6eb0c5ab1d43bcf9edd4fefd19031f2b96ded728"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Jan 24 12:39:58 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 26 11:43:00 2012 +0400"
      },
      "message": "zebra: justify rtadv VTY commands with arguments\n\nipv6 nd ra-interval\nipv6 nd ra-lifetime\nipv6 nd reachable-time\nipv6 nd home-agent-preference\nipv6 nd home-agent-lifetime\nipv6 nd router-preference\n\nCalls to atoi() and atol() are replaced with VTY_GET_INTEGER_RANGE()\nmacro, command patterns are clarified and aliases of some commands\nare added for consistency. Other changes are listed below.\n\n* zebra/rtadv.c\n  * ipv6_nd_ra_interval_msec(): resolve -Wsign-compare\n  * ipv6_nd_ra_interval(): idem\n  * rtadv_init(): update to list new aliases\n* doc/ipv6.texi: update to match current implementation\n"
    },
    {
      "commit": "6eb0c5ab1d43bcf9edd4fefd19031f2b96ded728",
      "tree": "734d264279d8a44022aaa8661f9c94cca6cb8a74",
      "parents": [
        "aca43b656623f38dfa6ea835dacbdfec51d03a67"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Jan 24 11:02:03 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 26 11:42:57 2012 +0400"
      },
      "message": "zebra: freshen RFC references in rtadv\n\nRFC2461 was replaced by RFC4861\nRFC3775 was replaced by RFC6275\ndraft-ietf-mip6-mipext-advapi-03 was replaced by RFC4584\n"
    },
    {
      "commit": "6ae93c058725991df5a9ae35cefec368919b5fea",
      "tree": "b3f3024fe3241cbfbe0a39f42860c917bcb0ad50",
      "parents": [
        "fc98d16ea77372f4ab4231e8904f8467e8d1ef71"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 27 10:45:36 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 20 17:44:02 2012 +0400"
      },
      "message": "zebra: include MTU option in RA on request (BZ#665)\n\nThis implements a new \"ipv6 nd mtu \u003c1-65535\u003e\" interface-level command.\n\n* doc/ipv6.texi: add description\n* zebra/rtadv.c\n  * rtadv_send_packet(): send option type 5, when configured\n  * ipv6_nd_mtu(): new VTY helper\n  * no_ipv6_nd_mtu(): ditto\n  * rtadv_config_write(): add new option\n  * rtadv_init(): list new helpers\n"
    },
    {
      "commit": "d8bcd9e9c6a1801b52b166fa3873eb468ac3c5cb",
      "tree": "9daf5bb631fdd97c3e998e4ddc16ba244a85ed6c",
      "parents": [
        "8216f53b73d8eb375615ad4395deace11d1e22d6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Oct 07 20:43:59 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:46:32 2012 +0000"
      },
      "message": "doc: \"[no] router zebra\" does not belong to ospfd\n"
    },
    {
      "commit": "651e70d7f419ee7af75113f80e688c0100e9cff5",
      "tree": "ecd5e15290306f9f1db42c08fd452a08977dce5a",
      "parents": [
        "fb5174a27e4122edf849c524861dfcd92d8b19f5"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 27 18:06:45 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:14:18 2012 +0400"
      },
      "message": "doc: update BGP RFC references\n"
    },
    {
      "commit": "05e54ee3df973194f2a00e3ea0b1da7bebc71fd6",
      "tree": "c07e2bbad0c55fe03eb2975b98f121de6ae55707",
      "parents": [
        "ad8d4802a3078de694539fa9bae12322fc82042f"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Dec 03 17:45:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:27:01 2011 +0400"
      },
      "message": "build: delete .cvsignore files\n"
    },
    {
      "commit": "1ffe5e794c3cd4a2ef84cac937d377de89b721f8",
      "tree": "cdb5aa8d0ebc890a744fa67bc27ce881f9e48f65",
      "parents": [
        "2fbd6f5a62f654c59aec5e1707c859d6ed79c6b0"
      ],
      "author": {
        "name": "Roderick Schertler",
        "email": "roderick@argon.org",
        "time": "Wed Nov 16 15:03:14 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Nov 22 21:03:37 2011 +0400"
      },
      "message": "doc: rectify \"match ip next-hop\" in ripd (BZ#537)\n"
    },
    {
      "commit": "c31e5726bece392e1d20081c712482e9954fec66",
      "tree": "60877e3fe755a4d9f147ceb57954557469e4eec1",
      "parents": [
        "37075da75df0451fec4109d440c1a52705222fc6"
      ],
      "author": {
        "name": "Alexandre Chappuis",
        "email": "alc@open.ch",
        "time": "Sun Sep 11 16:54:11 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:42:26 2011 +0400"
      },
      "message": "doc: BGP route-flap dampening\n"
    },
    {
      "commit": "37075da75df0451fec4109d440c1a52705222fc6",
      "tree": "f1536ef128a81e0c6a76e97aa91ff9e20b15a6ef",
      "parents": [
        "0998342b5f79b2441d4beade4bb8ac304de86741"
      ],
      "author": {
        "name": "Alexandre Chappuis",
        "email": "alc@open.ch",
        "time": "Tue Sep 13 16:33:45 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:39:19 2011 +0400"
      },
      "message": "doc: add missing word\n\n* ospfd.texi: Adjust meaning of the rfc1583compatibility option in\n  order to match the RFC specification and the actual source code.\n"
    },
    {
      "commit": "7015b8a24965ce144296a791be816dc9bbeb477a",
      "tree": "668c3aa1d8757a269fff2c6e9aeb9e15a84fde05",
      "parents": [
        "74bd8495d0fc3c24e5fba09164093bd6d997771e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 30 14:30:20 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 30 14:30:20 2011 +0100"
      },
      "message": "doc: Add dependency for quagga.pdf make target\n\n* doc/Makefile.am: pdf target needs to depend on all the input files.\n"
    },
    {
      "commit": "c8f3fe3063cb9ff193b13011cfbda3e605395340",
      "tree": "42713ac0369f0ef372c657ded091b00dbe6a019b",
      "parents": [
        "0c46638122f10019a12ae9668aec91691cf2e017"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Dec 05 20:28:02 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "bgpd: Remove AS Path limit/TTL functionality\n\n* draft-ietf-idr-as-pathlimit doesn\u0027t seem to have gone anywhere, and its\n  author does not think it will make progress in IDR. Remove all support\n  introduced for it, but leave stubs for the commands to avoid breaking\n  any configurations.\n\n  Basically reverts cecab5e9725792e60a5e4b473e238a14cd85815d.\n"
    },
    {
      "commit": "e6844aa5d23cf56dd1f31afc96e8145ab188953f",
      "tree": "38d3e2be40a99f26e926a2733ac2ea70b466d236",
      "parents": [
        "30b0017696dfe300b6ea630a6b6c91ea440d7828"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Mar 18 20:20:53 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Mar 18 20:20:53 2011 +0300"
      },
      "message": "doc: fix \"ipv6 address\" interface command syntax (#608)\n"
    },
    {
      "commit": "1b5eee9864185205bca498e62bcff8291e125a2c",
      "tree": "f4c6ff954c7a3a0afe3f4af4fefb3108e580208c",
      "parents": [
        "745bf05f58ff203f5e3878574016fb3b9ad5b450"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed Sep 16 02:20:00 2009 +0200"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Apr 28 20:57:44 2010 -0400"
      },
      "message": "build: ignore mkinstalldirs and texinfo.tex\n\nthese are autogenerated by autoreconf, drop them from git.\n"
    },
    {
      "commit": "2b09e2117e676986a5574a52a1a6823727361388",
      "tree": "e57fcf544fb8ef510576d516f35dafdd800b9633",
      "parents": [
        "b65c639a2ef9e07d93c8f9433c97b2270a65a6a0"
      ],
      "author": {
        "name": "Ivan Moskalyov",
        "email": "ether0@mail.ru",
        "time": "Thu Mar 11 17:14:35 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Mar 11 17:14:35 2010 +0300"
      },
      "message": "doc: fixed spelling in bgpd.texi\n"
    },
    {
      "commit": "5b40b1b57e1fad1caf579e032adf4e111128e486",
      "tree": "87cc68288b5ba178ba0e25fea64f17e8d4b2658c",
      "parents": [
        "998274cd7c559bd04d7b7f6e615ad120af915d86"
      ],
      "author": {
        "name": "Thijs Kinkhorst",
        "email": "thijs@debian.org",
        "time": "Tue Jul 21 19:24:29 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jul 21 19:24:29 2009 +0400"
      },
      "message": "[doc] zebra.8 via Christian Hammers (#531)\n\nThe man page for zebra(8) mentions as port number to connect to 2602,\nbut it\u0027s acutally 2601 (as shown in /etc/services). 2602 belongs to ripd.\nAttached patch fixes this typo.\n"
    },
    {
      "commit": "b60668d092f1778395b6c10b406059b8cbf235b8",
      "tree": "7869d81a4a8d440f8cb41ddb0e66c8279e2b9636",
      "parents": [
        "5bc52c76c2816a3be9a033c3e5bf4fea1908e3cd"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sun May 03 04:40:57 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:15:57 2009 +0100"
      },
      "message": "RFC 4191 Default Router Preference support for router advertisements\n\nAdds \"ipv6 nd router-preference (high|medium|low)\" and\n\"no ipv6 nd router-preference\" interface commands.\n\nFiles modified:\n\n   doc/ipv6.texi\n   zebra/interface.c\n   zebra/interface.h\n   zebra/rtadv.c\n   zebra/rtadv.h\n\nSigned-off-by: Chris Caputo \u003cccaputo@alt.net\u003e\n"
    },
    {
      "commit": "5bc52c76c2816a3be9a033c3e5bf4fea1908e3cd",
      "tree": "5a833111c34420fc8a4f7cf126c14dc1cc493a20",
      "parents": [
        "86f72dcba35f055b5344deeb5f057c2f1d9a291f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jun 22 16:11:06 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jun 22 16:11:06 2009 +0100"
      },
      "message": "[doc] remove -dither arg to imagemagick, in building PDFs\n\n* doc/Makefile.am: arguments for the \u0027convert\u0027 programme seem to have\n  changed incompatibly at some stage - just remove the problematic -dither.\n"
    },
    {
      "commit": "4bf6461e0f6cc6dcb8ca54314bc6c1865a366e70",
      "tree": "209afa18250f7e02949bfcad503556818ca0aae3",
      "parents": [
        "25f45887abf320401745dd433c4e82bfd6db5d4d"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Wed Jan 21 14:15:44 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:03:30 2009 +0100"
      },
      "message": "[build] cleanup low-hanging autoreconf warnings\n\nSome uses of GNU make extensions were not necessary.  There are still some,\nbut they might exist as workarounds for older versions of autoconf that have\nsince been solved.\n\nLesson learned: implicit target rules have opposite order to pattern target\nrules.\n"
    },
    {
      "commit": "c546afaed229106c2fcb54b57906414b9503dcc9",
      "tree": "7eb70bd1b8ee9a769cfb7a265d4073b03e5ecbe0",
      "parents": [
        "6511cab26728453d1b5e572bbbc3775f70c10c0e"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Sun Dec 28 12:40:06 2008 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 22:11:32 2009 +0100"
      },
      "message": "[doc] Removes documentation of nonexistant option.\n\nExpansion of Ubuntu quagga-0.99.11-1 30_doc__ospfd.8__nolog.dpatch\n"
    },
    {
      "commit": "2bbd71aace61a70a631c1d0c0bce75fbc76ee1d1",
      "tree": "92a33f545e2a10aeb1de080620d0ea3b21a48f03",
      "parents": [
        "8178b2e156d2263015d7d981590a0899f2cb4c05"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Mon Jun 01 20:07:46 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Mon Jun 01 20:07:46 2009 +0400"
      },
      "message": "[doc] Stick with quagga.net for consistency (#436)\n"
    },
    {
      "commit": "5515de330cf6c5449c0a56862072750b07d23fd7",
      "tree": "4651f48d94ba97117d84fdaa2210563676adc8df",
      "parents": [
        "d68cbf9261869e532dfdd14dbb4122b3f3feb0d4"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Mar 21 12:41:22 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 20:02:08 2008 +0100"
      },
      "message": "[administrivia] Update gitignore files\n\n- Add more stuff, archive libraries, etc..\n"
    },
    {
      "commit": "d68cbf9261869e532dfdd14dbb4122b3f3feb0d4",
      "tree": "5cc873e6a38a3db9ad5fb4dfe579624ff7693c13",
      "parents": [
        "3998bfd76620a676fbd77f19c5c6ea80a4cc88d2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Oct 21 18:35:27 2006 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 20:00:46 2008 +0100"
      },
      "message": "[administrivia] Git should ignore backup files and .loT files\n"
    },
    {
      "commit": "3998bfd76620a676fbd77f19c5c6ea80a4cc88d2",
      "tree": "66bf93340e55bb06b25544ef04afec3749269391",
      "parents": [
        "e5248434c0d287668be956a2bd52399d67b16c39"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Aug 19 14:13:43 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:57:22 2008 +0100"
      },
      "message": "[trivia] Remove ChangeLog files, as this data is now maintained in SCM\n"
    },
    {
      "commit": "7a842a7bc46dd9ce368e4a6aff479861d0e68de2",
      "tree": "63d4885566f6567849dabcf500b80a69addf33e7",
      "parents": [
        "3c5a0a4f8fe3811affff6d5e123379eedb083571"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Feb 19 17:45:56 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:49:34 2008 +0100"
      },
      "message": "[git administrivia] remove auto-built quagga.info, add to gitignore.\n"
    },
    {
      "commit": "3c5a0a4f8fe3811affff6d5e123379eedb083571",
      "tree": "79e285e0bd04c6ef0dfcde9cf0ce8fda8abecbe1",
      "parents": [
        "750e814693050bc97391eec618aad9db798ee5e8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Feb 19 17:30:10 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:49:33 2008 +0100"
      },
      "message": "[administrivia] Add .gitignore files, based on .cvsignores.\n"
    },
    {
      "commit": "0b2aa3a0a8b095bdef1eddda117d173af75dede2",
      "tree": "29201cb2beec187409e842b4078ed8a8047d3f11",
      "parents": [
        "7593fddfa1558d086e3142ad96cf2790007f5d84"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 14 22:32:21 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 14 22:32:21 2007 +0000"
      },
      "message": "[bgpd] Merge AS4 support\n\n2007-10-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* NEWS: Note that MRT dumps are now version 2\n\t* (general) Merge in Juergen Kammer\u0027s AS4 patch.\n\n2007-09-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.c: (assegment_normalise) remove duplicates from\n\t  from sets.\n\t  (aspath_reconcile_as4) disregard a broken part of the RFC around\n\t  error handling in path reconciliation.\n\t* aspath_test.c: Test dupe-weeding from sets.\n\t  Test that reconciliation merges AS_PATH and AS4_PATH where\n\t  former is shorter than latter.\n\n2007-09-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* aspath_test.c: Test AS4_PATH reconcilation where length\n\t  of AS_PATH and AS4_PATH is same.\n\n2007-09-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_open.c: (peek_for_as4_capability) Fix to work.\n\t* bgp_packet.c: (bgp_open_receive) Fix sanity check of as4.\n\t* tests/bgp_capability_test.c: (general) Extend tests to validate\n\t  peek_for_as4_capability.\n\t  Add test of full OPEN Option block, with multiple capabilities,\n\t  both as a series of Option, and a single option.\n\t  Add some crap to beginning of stream, to prevent code depending\n\t  on getp \u003d\u003d 0.\n\n2007-09-18 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_open.c: (bgp_capability_as4) debug printf inline with others.\n\t  (peek_for_as4_capability) There\u0027s no need to signal failure, as\n\t  failure is better dealt with through full capability parser -\n\t  just return the AS4, simpler.\n\t* bgp_packet.c: (bgp_open_receive) Update to match\n\t  peek_for_as4_capability change.\n\t  Allow use of BGP_AS_TRANS by 2b speakers.\n\t  Use NOTIFY_OPEN_ERR rather than CEASE for OPEN parsing errors.\n\t  (bgp_capability_msg_parse) missing argument to debug print\n\t  (bgp_capability_receive) missing return values.\n\t* tests/bgp_capability_test.c: (parse_test) update for changes to\n\t  peek_for_as4_capability\n\n2007-07-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* Remove 2-byte size macros, just make existing macros take\n\t  argument to indicate which size to use.\n\t  Adjust all users - typically they want \u00271\u0027.\n\t* bgp_aspath.c: (aspath_has_as4) New, return 1 if there are any\n\t  as4\u0027s in a path.\n\t  (aspath_put) Return the number of bytes actually written, to\n\t  fix the bug Juergen noted: Splitting of segments will change\n\t  the number of bytes written from that already written to the\n\t  AS_PATH header.\n\t  (aspath_snmp_pathseg) Pass 2-byte flag to aspath_put. SNMP\n\t  is still defined as 2b.\n\t  (aspath_aggregate) fix latent bug.\n\t  (aspath_reconcile_as4) AS_PATH+NEW_AS_PATH reconciliation\n\t  function.\n\t  (aspath_key_make) Hash the AS_PATH string, rather than\n\t  just taking the addition of assegment ASes as the hash value,\n\t  hopefully sligthly more collision resistant.\n\t  (bgp_attr_munge_as4_attrs) Collide the NEW_ attributes\n\t  together with the OLD 2-byte forms, code Juergen\n\t  had in bgp_attr_parse but re-organised a bit.\n\t  (bgp_attr_parse) Bunch of code from Juergen moves\n\t  to previous function.\n\t  (bgp_packet_attribute) Compact significantly by\n\t  just /always/ using extended-length attr header.\n\t  Fix bug Juergen noted, by using aspath_put\u0027s\n\t  (new) returned size value for the attr header rather\n\t  than the (guesstimate) of aspath_size() - the two could\n\t  differ when aspath_put had to split large segments, unlikely\n\t  this bug was ever hit in the \u0027wild\u0027.\n\t  (bgp_dump_routes_attr) Always use extended-len and\n\t  use aspath_put return for header length. Output 4b ASN\n\t  for AS_PATH and AGGREGATOR.\n\t* bgp_ecommunity.c: (ecommunity_{hash_make,cmp}) fix\n\t  hash callback declarations to match prototypes.\n\t  (ecommunity_gettoken) Updated for ECOMMUNITY_ENCODE_AS4,\n\t  complete rewrite of Juergen\u0027s changes (no asdot support)\n\t* bgp_open.c: (bgp_capability_as4) New, does what it says\n\t  on the tin.\n\t  (peek_for_as4_capability) Rewritten to use streams and\n\t  bgp_capability_as4.\n\t* bgp_packet.c: (bgp_open_send) minor edit\n\t  checked (in the abstract at least) with Juergen.\n\t  Changes are to be more accepting, e.g, allow AS_TRANS on\n\t  a 2-byte session.\n\t* (general) Update all commands to use CMD_AS_RANGE.\n\t* bgp_vty.c: (bgp_clear) Fix return vals to use CMD_..\n\t  Remove stuff replicated by VTY_GET_LONG\n\t  (bgp_clear_vty) Return bgp_clear directly to vty.\n\t* tests/aspath_test.c: Exercise 32bit parsing. Test reconcile\n\t  function.\n\t* tests/ecommunity_test.c: New, test AS4 ecommunity changes,\n\t  positive test only at this time, error cases not tested yet.\n\n2007-07-25 Juergen Kammer \u003cj.kammer@eurodata.de\u003e\n\n\t* (general) AS4 support.\n\t* bgpd.h: as_t changes to 4-bytes.\n\t* bgp_aspath.h: Add BGP_AS4_MAX and BGP_AS_TRANS defines.\n\t* bgp_aspath.c: AS_VALUE_SIZE becomes 4-byte, AS16_VALUE_SIZE\n\t  added for 2-byte.\n\t  Add AS16 versions of length calc macros.\n\t  (aspath_count_numas) New, count number of ASes.\n\t  (aspath_has_as4) New, return 1 if there are any as4\u0027s in a\n\t  path.\n\t  (assegments_parse) Interpret assegment as 4 or 2 byte,\n\t  according to how the caller instructs us, with a new\n\t  argument.\n\t  (aspath_parse) Add use32bit argument to pass to\n\t  assegments_parse. Adjust all its callers to pass 1, unless\n\t  otherwise noted.\n\t  (assegment_data_put) Adjust to be able to write 2 or 4 byte\n\t  AS, according to new use32bit argument.\n\t  (aspath_put) Adjust to write 2 or 4.\n\t  (aspath_gettoken) Use a long for passed in asno.\n\t* bgp_attr.c: (attr_str) Add BGP_ATTR_AS4_PATH and\n\t  BGP_ATTR_AS4_AGGREGATOR.\n\t  (bgp_attr_aspath) Call aspath_parse with right 2/4 arg, as\n\t  determined by received-capability flag.\n\t  (bgp_attr_aspath_check) New, code previously in attr_aspath\n\t  but moved to new func so it can be run after NEW_AS_PATH\n\t  reconciliation.\n\t  (bgp_attr_as4_path) New, handle NEW_AS_PATH.\n\t  (bgp_attr_aggregator) Adjust to cope with 2/4 byte ASes.\n\t  (bgp_attr_as4_aggregator) New, read NEW_AGGREGATOR.\n\t  (bgp_attr_parse) Add handoffs to previous parsers for the two\n\t  new AS4 NEW_ attributes.\n\t  Various checks added for NEW/OLD reconciliation.\n\t  (bgp_packet_attribute) Support 2/4 for AS_PATH and\n\t  AGGREGATOR, detect when NEW_ attrs need to be sent.\n\t* bgp_debug.{c,h}: Add \u0027debug bgp as4\u0027.\n\t* bgp_dump.c: MRTv2 support, unconditionally enabled, which\n\t  supports AS4. Based on patches from Erik (RIPE?).\n\t* bgp_ecommunity.c: (ecommunity_ecom2str) ECOMMUNITY_ENCODE_AS4\n\t  support.\n\t* bgp_open.c: (peek_for_as4_capability) New, peek for AS4\n\t  capability prior to full capability parsing, so we know which\n\t  ASN to use for struct peer lookup.\n\t  (bgp_open_capability) Always send AS4 capability.\n\t* bgp_packet.c: (bgp_open_send) AS4 handling for AS field\n\t  (bgp_open_receive) Peek for AS4 capability first, and figure\n\t  out which AS to believe.\n\t* bgp_vty.c: (bgp_show_peer) Print AS4 cap\n\t* tests/aspath_test.c: Support asn32 changes, call aspath_parse\n\t  with 16 bit.\n\t* vtysh/extract.pl: AS4 compatibility for router bgp ASNUMBER\n\t* vtysh/extract.pl.in: AS4 compatibility for router bgp ASNUMBER\n\t* vtysh/vtysh.c: AS4 compatibility for router bgp ASNUMBER\n"
    }
  ],
  "next": "41367172d812354c05b11818346f0d49c2245aef"
}
