)]}'
{
  "log": [
    {
      "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": "69f8d5df72b6bd9c39c3a262ae0ed07f2cd566e9",
      "tree": "e518d5653d5e6368ade460659b05c9ef974a5edb",
      "parents": [
        "ca7399f165f892620cbabdeb2b62cf792a6fc9d6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Mar 08 17:15:58 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 09 18:03:55 2017 +0000"
      },
      "message": "configure: Add commonly used GCC security flags\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": "72e3b8b8d222e43bf74d4a9cd4cba63aa4d83fb5",
      "tree": "a92e9e577e0c1160261ac38355d29ec026ad7240",
      "parents": [
        "e28ebbccc870110f0309d93b87c1574c399f2b3b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Mar 08 10:27:54 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 08 23:42:14 2017 +0000"
      },
      "message": "buildbot: Add revlink to map quagga git repo to Savannah cgit URI\n"
    },
    {
      "commit": "e28ebbccc870110f0309d93b87c1574c399f2b3b",
      "tree": "4b40045524c569216a3c3415251b697d3efce3c7",
      "parents": [
        "203ab894a8cfc2107179d2d52bac9d16ed7dd8da"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Mar 07 15:25:44 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 08 23:42:07 2017 +0000"
      },
      "message": "solaris/buildbot: Add SMF service manifest for buildbot-slave/worker\n"
    },
    {
      "commit": "203ab894a8cfc2107179d2d52bac9d16ed7dd8da",
      "tree": "8fb336a600257da67b7a97c22f28d929636d4ec3",
      "parents": [
        "e17ff9be4efb9d013ffa86a460a35ec03ca8d178"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Mar 07 14:54:28 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 07 15:04:07 2017 +0000"
      },
      "message": "buildbot: add OpenIndiana hipster bot\n"
    },
    {
      "commit": "e17ff9be4efb9d013ffa86a460a35ec03ca8d178",
      "tree": "5b6904dd818111fb883ff198a2547a637b8f1fbc",
      "parents": [
        "32947f26f944e1a3ea28f935820dbc6c54181e2c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Mar 07 14:38:48 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 07 14:43:49 2017 +0000"
      },
      "message": "HACKING: git diff ... | buildbot try example\n"
    },
    {
      "commit": "32947f26f944e1a3ea28f935820dbc6c54181e2c",
      "tree": "93f9f5a59830821a33005508049d020e0d00bd28",
      "parents": [
        "f25b7317d77789221e3346b99c459c68e51c742d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Mar 07 14:35:29 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 07 14:39:24 2017 +0000"
      },
      "message": "configure: use AC_C_FLAG for Sun Studio cc\n"
    },
    {
      "commit": "f25b7317d77789221e3346b99c459c68e51c742d",
      "tree": "bb3414687846811fc8bb36e53b69456a438bccac",
      "parents": [
        "d04f9ec9a6f3df61fc2f0cab2afd552567f83191"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Mar 07 10:36:14 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 07 14:39:24 2017 +0000"
      },
      "message": "configure: libtool \u003c 2.4.6 doesn\u0027t work with fstack-protector-strong\n\n* configure.ac: GCC -fstack-protector-strong gives undefined symbol error\n  when linking on __stack_chk_fail_local with libtool \u003c 2.4.6.  The gcc arg\n  is not passed on when linking.  OpenIndiana hipster has 2.4.2 at the\n  moment. Test the libtool version and drop the arg and warn the user.\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": "55b11c2e01d0761064863247df9c4af943cd304e",
      "tree": "0a91b0e3a7ffe6dbea5a30c2a200b814df54f561",
      "parents": [
        "0d91779a1fd7f90bf13ebfb792dc4e4fcfc57bba"
      ],
      "author": {
        "name": "Jakub Zawadzki",
        "email": "darkjames-ws@darkjames.pl",
        "time": "Sat Mar 04 19:43:46 2017 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 06 10:36:38 2017 +0000"
      },
      "message": "vtysh: Bug 789 - vtysh ripngd does not have distribute-list command\n\nMake commands added by distribute_list_init() from ripd/ripngd daemon known\nto vtysh.\n\nBabeld leftovers not included, also other commands (show, write) from\nbug #789 not included.\n"
    },
    {
      "commit": "0d91779a1fd7f90bf13ebfb792dc4e4fcfc57bba",
      "tree": "1f278d55b7fbc9ebd5ef6088528c9dc1e2efd668",
      "parents": [
        "390bffa452d4c9525587dbc8a7a19a9b096c11fa"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sun Mar 05 14:53:59 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:54:58 2017 +0000"
      },
      "message": "infra/buildbot: fix \"for w workers\", use common defs for common sets\n"
    },
    {
      "commit": "390bffa452d4c9525587dbc8a7a19a9b096c11fa",
      "tree": "478c532170cd6db0b05c82c13b0d2663486cd5e4",
      "parents": [
        "3bc12739fdaccfcf73cafa51c98046e58529fe80"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sun Mar 05 14:27:11 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:34 2017 +0000"
      },
      "message": "infra/buildbot: Add initial RPM check builders\n\n* master.cfg: Add an initial RPM rpm check builders, to run rpmlint and\n  rpmbuild tests on builders with \"pkg\" \u003d\u003d \"rpm\".\n  some issues in buildbot (least on F24):\n  - RpmLint doesn\u0027t get imported, have to run manually.\n  - RpmBuild always sets \u0027dist\u0027, it shouldn\u0027t really. urg.\n  - RpmBuild \u0027rpmdir\u0027 argument doesn\u0027t get Interpolated, so can\u0027t\n    put the built RPMs cleanly into a distinct directory.\n\n  When fixed, can auto-publish RPMs. For now, just check.\n"
    },
    {
      "commit": "3bc12739fdaccfcf73cafa51c98046e58529fe80",
      "tree": "e3bb9ba8295e3a8db75f3cd2dea74f887e48fed4",
      "parents": [
        "304ec31598895c8c6da7a9fa9b9ba1f7217cced0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sun Mar 05 13:33:25 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:34 2017 +0000"
      },
      "message": "distro/redhat: Allow for split info files\n"
    },
    {
      "commit": "304ec31598895c8c6da7a9fa9b9ba1f7217cced0",
      "tree": "79747b05e0a9323122aa3ec588cd3e91f2d41d39",
      "parents": [
        "75ebcd86b1abd5db97b91a2cff1df6ba444cca7c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sun Mar 05 12:39:41 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:34 2017 +0000"
      },
      "message": "distro/redhat: Make texi2html conditional, default off, to avoid TeX deps\n"
    },
    {
      "commit": "75ebcd86b1abd5db97b91a2cff1df6ba444cca7c",
      "tree": "eea08f4e3029909e73aa62482af920fe14a8c900",
      "parents": [
        "7e43fe44ba1a7da4bd8520625ab5f66867fce761"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sun Mar 05 10:21:02 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:34 2017 +0000"
      },
      "message": "distro/redhat: fix rpmlint warnings\n\n* quagga.spec.in: Use %global when defining globals inside conditional\n  blocks.\n  Comment Obsoletes as rpmlint wants specific versions. The packages are\n  long gone, but leave as historical documentation.\n  Don\u0027t use %version in changelog entries, or other live macros.\n  Fix spaces-for-indent everywhere, use tab (sorry spaces people).\n"
    },
    {
      "commit": "7e43fe44ba1a7da4bd8520625ab5f66867fce761",
      "tree": "ff3da2cc04cdbf7e26b5c63c9f3915d8ad17f4e7",
      "parents": [
        "08815d59c369ee2698d304d91e22e6eddcce31ae"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sat Mar 04 15:09:41 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:33 2017 +0000"
      },
      "message": "infra/patchwork: systemd files and production.py settings\n\n* systemd/patchwork-delivery*: on demand socket to take mail in a localhost\n  TCP socket, to allow patchwork to be in a separate container from\n  email.\n* production.py: patchwork.settings.production file.\n* pass.py: example pass.py file\n"
    },
    {
      "commit": "08815d59c369ee2698d304d91e22e6eddcce31ae",
      "tree": "be92637cb7cda39a9e3b899591fde327e527b658",
      "parents": [
        "d77ad3cff1d3d32bce7b49dbefebda7c10f1592e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sat Mar 04 14:30:44 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:33 2017 +0000"
      },
      "message": "infra: buildbot master configs and slave systemd service file\n\n* master: master.cfg and example pass.cfg file\n* worker: systemd service unit file.\n\n  Setting up a slave/worker is trivial:\n\n  su - buildbot\n  buildslave create-slave . radia.quagga.net buildbot-\u003cname\u003e \u003cpassword\u003e\n"
    },
    {
      "commit": "d77ad3cff1d3d32bce7b49dbefebda7c10f1592e",
      "tree": "7892df29ff84cb0cd524acbccd13ccb363fd67ce",
      "parents": [
        "32b4fb45f577cce2ab354c4914a2af845ebfc4e4"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sat Mar 04 00:10:30 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:33 2017 +0000"
      },
      "message": "HACKING: fix indentation in URLs list, remove super obsolete import section\n"
    },
    {
      "commit": "32b4fb45f577cce2ab354c4914a2af845ebfc4e4",
      "tree": "f454898a8fcdb9165e9b5c95e826cea2b17b6ccf",
      "parents": [
        "db2dafa63bd527fc9ef49c1997f385c79294e65a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sat Mar 04 00:08:19 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:33 2017 +0000"
      },
      "message": "HACKING: example config for buildbot client and usage for \u0027try\u0027 command\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": "45c5426ac96a2ef815a9c21396678e1710ac4e52",
      "tree": "788c379f4de7bf91c299a391c6d9545d85302e44",
      "parents": [
        "4cdc030c8a37d4985dc1b9b7b1f5bf0d3bf52be7"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Fri Mar 03 15:06:48 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:33 2017 +0000"
      },
      "message": "hacking: Add link to buildbot\n"
    },
    {
      "commit": "4cdc030c8a37d4985dc1b9b7b1f5bf0d3bf52be7",
      "tree": "fbac915558cde84f9f9b5257ce885f260391b7be",
      "parents": [
        "9368746527c6d5c8f55343237326456b2c20a41d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Fri Mar 03 15:07:28 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:33 2017 +0000"
      },
      "message": "distro/redhat: build needs pkg-config and nhrpd needs c-ares\n"
    },
    {
      "commit": "9368746527c6d5c8f55343237326456b2c20a41d",
      "tree": "55e68877033760cb73c1c7f33b8ff96838c61e93",
      "parents": [
        "9e31fbc996a58047e490333df1f7bf1c809a1488"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Mon Feb 27 22:42:59 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 05 14:31:16 2017 +0000"
      },
      "message": "distro/redhat: Update to F24 and fix few issues, add nhrpd.service\n\n* redhat/quagga.spec.in: Review Fedora spec file and sync up with any\n  useful differences, inc:\n - Add tmpfiles.d/quagga.conf config for Quagga from Fedora\n - Add quagga-filter-perl-requires.sh from Fedora.\n - Move libs to %{_libdir}/quagga as per Fedora\n - use systemd_postun_with_restart for postun\n Add nhrpd.service systemd file.  Simplify/chop down the RPM description.\n* Makefile.am: Update to match\n"
    },
    {
      "commit": "9e31fbc996a58047e490333df1f7bf1c809a1488",
      "tree": "22464a057f453d7f8e67097981c131d5faf88ded",
      "parents": [
        "64c56085661d7e4f41dc59bbf62643e682ce51c2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Mon Feb 27 17:43:44 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Feb 27 22:47:55 2017 +0000"
      },
      "message": "distro/redhat: spec syntax error if texi2html not installed\n\n* redhat/quagga.spec.in: If texi2html is not installed you get a confusing\n  error about a syntax issue in an %if statement, far from the problem.\n  Fix.\n"
    },
    {
      "commit": "64c56085661d7e4f41dc59bbf62643e682ce51c2",
      "tree": "2d2a9668c81334ca2d29e646320a44be129a4605",
      "parents": [
        "2d78fe7e35344ad9340fa7e36c704a8c5c2485c8"
      ],
      "author": {
        "name": "Michal Sekletar",
        "email": "msekleta@redhat.com",
        "time": "Thu Oct 20 12:56:34 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Feb 27 22:47:55 2017 +0000"
      },
      "message": "systemd: various service file improvements\n\n(1) network.target is generally used as a synchronization point during\nboot up and not as a \"boot target\" (target where services are actually\nenabled). Also as per \u0027man 7 systemd.special\u0027, service implementing\nnetworking should pull network.target into transaction and order itself\nbefore it. Hence, it doesn\u0027t make sense for zebra and friends to be\nenabled in network.target, because they should actively pull in\nnetwork.target into boot transaction. Let\u0027s enable them as normal\nservices in multi-user.target and order against network{,-pre}.target\nappropriately.\n\n(2) All quagga daemons needs zebra to be running at all times and want\nto restarted/stopped whenever zebra is. This is expressed by BindsTo\u003d\ndependency in a unit file (note \"s\" in Binds).\n"
    },
    {
      "commit": "2d78fe7e35344ad9340fa7e36c704a8c5c2485c8",
      "tree": "ee4d2bd0f6e15309bbde2162b2fd862792666227",
      "parents": [
        "004db27ada7b37adf84408dbb98a3d92e4e4d6c0"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Feb 14 13:07:39 2017 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Feb 27 11:51:46 2017 +0000"
      },
      "message": "distro/redhat: package nhrpd\n"
    },
    {
      "commit": "004db27ada7b37adf84408dbb98a3d92e4e4d6c0",
      "tree": "83d04523b8f8ad17558aff281ce6085f7bee2308",
      "parents": [
        "343074aacfe9ec8d00e2c123f14f418a0920585b"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Feb 14 11:55:09 2017 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Feb 27 11:51:46 2017 +0000"
      },
      "message": "nhrpd: workaround old kernel vs. glibc definition conflics\n\nfixes #908\n\nWith kernel-headers-3.10.0 we have:\n\nIn file included from netlink_gre.c:15:0:\n/usr/include/linux/ipv6.h:19:8: error: redefinition of \u0027struct in6_pktinfo\u0027\n struct in6_pktinfo {\n        ^\nIn file included from netlink_gre.c:10:0:\n/usr/include/netinet/in.h:536:8: note: originally defined here\n struct in6_pktinfo\n        ^\nIn file included from netlink_gre.c:15:0:\n/usr/include/linux/ipv6.h:24:8: error: redefinition of \u0027struct ip6_mtuinfo\u0027\n struct ip6_mtuinfo {\n        ^\nIn file included from netlink_gre.c:10:0:\n/usr/include/netinet/in.h:543:8: note: originally defined here\n struct ip6_mtuinfo\n\nSo instead of libc\u0027s netinet/in.h include kernel\u0027s linux/in.h\nand the add sys/socket.h for struct sockaddr since it does not\nseem to be defined in kernel headers.\n"
    },
    {
      "commit": "343074aacfe9ec8d00e2c123f14f418a0920585b",
      "tree": "7830d5184dd9ff5f492a744745659a662a849552",
      "parents": [
        "2e0fb0e1eee44e94021fd0b6a5c46bd7f915a7f0"
      ],
      "author": {
        "name": "Brian Utterback",
        "email": "brian.utterback@oracle.com",
        "time": "Thu Feb 23 13:31:38 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Feb 23 13:43:21 2017 +0000"
      },
      "message": "solaris: Fix quagga.init.in shell errors\n\n* quagga.init.in: SMF_GROUP assignment shell is missing a space, so never works.\n  Test for DAEMON_PATH and DAEMON being empty never works,  fix.\n  Test for configuration file should use the SMF property, not the default - the\n  default config file location is already set in the quagga.xml file that\n  sets the SMF property defauls.\n\n  See bugs #877, #878, and #879.\n\n[ commit message by Paul Jakma \u003cpaul.jakma@hpe.com\u003e / \u003cpaul@jakma.org\u003e ]\n"
    },
    {
      "commit": "2e0fb0e1eee44e94021fd0b6a5c46bd7f915a7f0",
      "tree": "7ec03da7fc4690da0508b86fecd483c4564c8336",
      "parents": [
        "e7c65f6f1a951dd94f1c2e327d968bb8d468d0b5"
      ],
      "author": {
        "name": "Timo Schöler",
        "email": "timo@kroenchenstadt.de",
        "time": "Thu Feb 23 13:16:42 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Feb 23 13:18:40 2017 +0000"
      },
      "message": "redhat: Add quagga user to quaggavt vty group by default, bug #937\n\n* See bugzilla #937\n"
    },
    {
      "commit": "e7c65f6f1a951dd94f1c2e327d968bb8d468d0b5",
      "tree": "4949de90c3f224802bd059297a4c28aff33e7f6e",
      "parents": [
        "21e8b42dccdf7da3bbb3e057edd5c44da446d729"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Feb 20 00:54:05 2012 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Feb 23 13:18:39 2017 +0000"
      },
      "message": "ospfd: address ospf_schedule_abr_task() warning\n"
    },
    {
      "commit": "21e8b42dccdf7da3bbb3e057edd5c44da446d729",
      "tree": "f9301d95158ba5eb2ab19d7a3011576cb043d6f3",
      "parents": [
        "6dbb58c04078c31ca3f43e9754b498aa3be6518b"
      ],
      "author": {
        "name": "Svata Dedic",
        "email": "belgarat@mail.klfree.net",
        "time": "Thu Dec 22 18:07:15 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Feb 23 12:31:00 2017 +0000"
      },
      "message": "ospfd: fix NSSA LSA translation (BZ#493)\n\n* See bugzilla #439\n"
    },
    {
      "commit": "6dbb58c04078c31ca3f43e9754b498aa3be6518b",
      "tree": "aa3e45faeb5fd7979a4026550382f0feb95def26",
      "parents": [
        "c876b0b27e398c7d733966ce8636c26dd7a8e6eb"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Feb 08 15:05:06 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Feb 23 12:31:00 2017 +0000"
      },
      "message": "zebra: Make the --nl-bufsize arg set the input parse buffer too\n\n* See bug #887. Existing statically sized NL_PKT_BUF_SIZE input parse buffer\n  in netlink_parse_info may not be enough. As an initial hacky fix, at least\n  give admins a runtime way to change this buffer, with the existing\n  --nl-bufsize argument to zebra.\n* rt_netlink.c: (nl_rcvbuf) static input buffer and length.\n  (netlink_parse_info) replace the local fixed size buffer with nl_rcvbuf.\n  Improve warning on MSG_TRUNC to advise admin on what to do.\n  (kernel_init) Dynamically allocate nl_rcvbuf input parse buffer to\n  at least 2 pages, or nl_rcvbufsize argument, whichever is greater.\n\nBased on the debugging and investigation of:\n\n  Konstantin \u003ctempest921@gmail.com\u003e\n"
    },
    {
      "commit": "c876b0b27e398c7d733966ce8636c26dd7a8e6eb",
      "tree": "307af66f2f48c8b8016736b27aa586073f996f68",
      "parents": [
        "3c06ac025adbd4611e3a290b43fea4cb512688ac"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Feb 08 15:19:38 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Feb 08 15:19:38 2017 +0000"
      },
      "message": "release: Quagga 1.2.0\n"
    },
    {
      "commit": "3c06ac025adbd4611e3a290b43fea4cb512688ac",
      "tree": "6af4697058a32ca23fa003be15d6203ebcd1f506",
      "parents": [
        "b29cd82299206f77a584699bcb3b7a7b36183787"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sun Feb 05 21:45:05 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 07 11:55:02 2017 +0000"
      },
      "message": "build/HACKING: add check for pandoc and update make rule for HACKING.pdf\n"
    },
    {
      "commit": "b29cd82299206f77a584699bcb3b7a7b36183787",
      "tree": "701d6f9cdac62db616c2d19f2b0083ee486babdf",
      "parents": [
        "f452d5409a5eb275ee4d5dd24e67461231dc425a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Sun Feb 05 21:24:42 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 07 11:55:02 2017 +0000"
      },
      "message": "HACKING: Update governance\n"
    },
    {
      "commit": "f452d5409a5eb275ee4d5dd24e67461231dc425a",
      "tree": "85a23917cf04a9a30d936fb5ae2daa5e3cb13679",
      "parents": [
        "d023f9ffae4b040335d12c1aa7409a9a15b7a3ac"
      ],
      "author": {
        "name": "Jim Carroll",
        "email": "jim@carroll.com",
        "time": "Fri Jan 27 16:08:59 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 07 11:53:26 2017 +0000"
      },
      "message": "ripd: Fix restriction on default RTE that\u0027s incompatible with CIDR\n\n* ripd.c: (rip_response_process) A 0 address can still easily have a\n  non-zero netmask.  E.g., 0/1 to complement 128/1.  These should be allowed\n  through. See bug #903.\n\n  Modify to check for malformed pseudo-default routes, where the netmask is\n  0 but the address is non-0, and warn and drop such routes instead.\n"
    },
    {
      "commit": "d023f9ffae4b040335d12c1aa7409a9a15b7a3ac",
      "tree": "81b4d13e6a5bec9e4716aebc393225c468c54d57",
      "parents": [
        "5a0c1be698a044bc838f3e6c8b259fa52cf9981c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Sep 16 15:13:43 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:32 2017 +0000"
      },
      "message": "bgpd: Rollback \"always send OPEN\" a little, to workaround test suite issues\n\n* \"bgpd: Send OPEN immediately on inbound connections\" doesn\u0027t play well with\n  some partial BGP implementations, test and conformance suites e.g., which\n  have rigid expectations about ordering and don\u0027t implement much of CD.\n\n  roll back, but only a little, by deferring OPEN sending on outbound till\n  receive.\n\n* bgpd.h: (struct peer) add PEER_STATUS_OPEN_DEFERRED status flag.\n  Kind of a sub-fsm.  Main FSM does not allow transition functions to\n  signal next-state - next-state is inflexibly fixed in the table -\n  so can\u0027t handle it cleanly at that level.\n* bgp_fsm.c: (bgp_connect_success) Defer sending open if the peer is\n  an accept-peer/inbound and there appears to be an outbound connection\n  in progress. Set PEER_STATUS_OPEN_DEFERRED to signal to bgp_open_receive\n  that an OPEN still must be sent.\n* bgp_packet.c: (bgp_open_receive) Send the OPEN here, when deferred.\n"
    },
    {
      "commit": "5a0c1be698a044bc838f3e6c8b259fa52cf9981c",
      "tree": "5390c9c2b32eccfb66bf4c2e54109efe58ab48a2",
      "parents": [
        "c79862373cd310dba8c0a51ff94ddce48be0099e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Thu Sep 15 17:13:16 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:32 2017 +0000"
      },
      "message": "bgpd: Config state related to OPEN must now be copied to accept peer.\n\n* bgp_network.c: (bgp_accept) OPEN is now sent on accept peer, due to\n  \"Send OPEN immediately on inbound connections\", so configuration state\n  that affects OPEN also has to be copied for.\n\n  Fixes failure with Martin Winter / NetDEFs test cases, where bgpd was\n  failing to advertise configured AFI/SAFIs.\n"
    },
    {
      "commit": "c79862373cd310dba8c0a51ff94ddce48be0099e",
      "tree": "92ac28cb287f39b2ed364edbc740e3f9fa6c8689",
      "parents": [
        "1ebafb61a4a2059fdd50aeefd27780d6358dd488"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Sep 21 17:42:37 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:31 2017 +0000"
      },
      "message": "bgpd: Better/more debug for collisions, inc. logging port of NOTIFYs.\n"
    },
    {
      "commit": "1ebafb61a4a2059fdd50aeefd27780d6358dd488",
      "tree": "5172fa876077c854d080ba4b2d639b1933ce932a",
      "parents": [
        "ac278ea6b770fd0bf74b3e718c2e6a4d84fcba3a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Apr 27 09:55:21 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:31 2017 +0000"
      },
      "message": "bgpd: collision detection assumes \u0027new\u0027 peer is the inbound connection\n\n* bgp_packet.c: (bgp_collision_detect) for a long time, this has assumed\n  the \u0027new\u0027 peer argument on which an OPEN has just been received must be\n  an \u0027inbound\u0027 connection, and the looked up \u0027peer\u0027 the outbound. However,\n  this doesn\u0027t seem a robust assumption. It seems possible it could be the\n  other way around.\n\n  The consequences are that collision detection could behave inconsistently\n  with other implementations, and result in both sides closing the same\n  connection.\n\n  Fix to follow the RFC.\n"
    },
    {
      "commit": "ac278ea6b770fd0bf74b3e718c2e6a4d84fcba3a",
      "tree": "9b06caebfce2f3041a2d4ed9f08f0864c4152698",
      "parents": [
        "f408fa2c81a8e5873cb0a8c37fe44e389f65d50e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Apr 26 11:46:34 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:31 2017 +0000"
      },
      "message": "bgpd: collision-detect should retain Established peers + tidy logic + logs\n\n* bgp_network.c: (bgp_accept) We should also reject connections where\n  the main peer is in \u003eEstablished state.\n  Could potentially also reject connections for main peer \u003d\u003d Established\n  here too.\n\n  Log the port number too, so it\u0027s easier to reconcile logs with\n  network dumps.\n\n* bgp_packet.c: (bgp_collision_detect) Try factor out some of the\n  conditionals controlling the action of the loop to the top, for\n  readability.\n\n  Handle existing Established session, by closing the new one, favouring\n  stability and as per RFC, except for GR.\n\n  (bgp_open_receive) Tidy up the logic a bit for readability, making each\n  case distinct in the main body of the loop.\n"
    },
    {
      "commit": "f408fa2c81a8e5873cb0a8c37fe44e389f65d50e",
      "tree": "24f9a28e1373e61fa03f09c20784874ccfe6f24f",
      "parents": [
        "2d81a7a8e425dcc4ca0cda411e73915f7ec3c1c9"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Apr 25 15:50:31 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:31 2017 +0000"
      },
      "message": "lib: Add a trivial sockunion_get_port helper function\n"
    },
    {
      "commit": "2d81a7a8e425dcc4ca0cda411e73915f7ec3c1c9",
      "tree": "76d8a1e2cfdfa2832a90212514daa7a62aa22c66",
      "parents": [
        "a04d836427dcea903edf3d6aea3c0978b8ba1300"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Apr 20 14:05:20 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:31 2017 +0000"
      },
      "message": "bgpd: Send OPEN immediately on inbound connections\n\n* bgpd_fsm.c: (bgp_connect_success) This is the transition function\n  called when TCP_connection_open occurs in Connect or Active.  It\n  sends OPEN, but only for a !ACCEPT_PEER.  I.e.  only on the local\n  bgpd\u0027s outbound connection.\n\n  This means OPEN will never be sent on a received connection, until\n  OPEN is received on it.  Which means if the remote peer delays\n  sending its OPEN on such an inbound connection, the local peer might\n  hit a timer (e.g.  connectretry) before then and reset.\n\n  There should be no harm in sending OPEN ASAP on any new connection\n  with any conforming implementation, indeed this is supposed to be the\n  behaviour.  It should speed up things, decrease the window in which\n  collision detection could be hit, and make things more robust.  So do\n  so.\n\n* bgp_packet.c: (bgp_open_receive) Update the comment.\n  Do not send bgp_open_send on the ACCEPT_PEER connection that has just\n  been transferred over, that\u0027s now done in bgp_connect_success, as it\n  should be.\n\n  The accept peer\u0027s output fifo must also be transferred over, to\n  ensure the Open gets sent, if not already, and the write thread state\n  replicated accordingly.\n\n* bgp_network.c: (bgp_accept) local AS config needs to set, so we can\n  send Open early on ACCEPT_PEER connections.\n\nNote: The Cumulus \"Fix FSM to handle active/passive connections better\"\npatch also makes this change, amongst other things.\n"
    },
    {
      "commit": "a04d836427dcea903edf3d6aea3c0978b8ba1300",
      "tree": "6ead01c387c845bef61e2b41d906825b6c123820",
      "parents": [
        "461649d3346a15a4b8be64156181bc2dac7a538e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Fri Jan 27 11:37:36 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:31 2017 +0000"
      },
      "message": "release: Add release.sh script and update HACKING.md accordingly.\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": "ac728fd929f5b949364089c4f0d95cfa322a7683",
      "tree": "bd809182f12dc278257bbcc1284ee4fa7cd85591",
      "parents": [
        "b1887c852c5c040e109925887ec8c1ca8c428730"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Fri Jan 27 11:07:24 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:31 2017 +0000"
      },
      "message": "nhrpd: Makefile.am needs to specify the headers, for dist tarballs to work\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": "23426d21d5ceccec47d80288e8cf411e44f59e58",
      "tree": "c87efeadacf02c0a454e28f75285172e2e1b8aea",
      "parents": [
        "7fa7acb4926f2a0d1fb5eb0834ae6c60b8ba5147"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Mon Jan 23 10:55:55 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:30 2017 +0000"
      },
      "message": "lib: routemap.h depends on prefix.h\n"
    },
    {
      "commit": "7fa7acb4926f2a0d1fb5eb0834ae6c60b8ba5147",
      "tree": "e0f86d036d9a5bbd9c3d7d8ee28b71260c64cbcc",
      "parents": [
        "3334bab0d96b2d7064111e025ff6294d6a32d026"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Fri Jan 20 18:16:04 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:30 2017 +0000"
      },
      "message": "bgpd: Fix unhandled enum warning for AFI_ETHER\n\n* bgp_open.c: (bgp_afi_safi_valid_indices) We have AFI_ETHER defined, but\n  don\u0027t handle it at this point.\n"
    },
    {
      "commit": "3334bab0d96b2d7064111e025ff6294d6a32d026",
      "tree": "665e079e1643db0ae957acadfa5e5497f0f645ac",
      "parents": [
        "f2a4b8fffb1f771371d6bfc425e7a69a14057b06"
      ],
      "author": {
        "name": "Job Snijders",
        "email": "job@instituut.net",
        "time": "Fri Jan 20 14:47:12 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 27 14:53:20 2017 +0000"
      },
      "message": "bgpd: Add support for BGP Large Communities\n\nAs described by Michael Lambert \u003clambert@psc.edu\u003e  to the list:\n\n  Traditional communities are four-octet entities to support two-octet ASNs\n  and are usually represented as \u003casn\u003e:\u003cdata\u003e.  Large communities are an\n  enhancement to support four-octet ASNs and are 12 octets long, represented\n  as \u003casn\u003e:\u003cdata-1\u003e:\u003cdata-2\u003e.\n\n  This issue has been tracked in quagga bugzilla ticket #875, which documents\n  some of the usage and indicates that some testing has been done.\n\nTODO: Documentation - update doc/bgpd.texi.\n\n* bgp_attr.{c,h}: Add BGP_ATTR_LARGE_COMMUNITIES codepoint. Add\n  (struct lcommunity *) to (struct bgp_attr_extra).\n* bgp_clist.{c,h}: Large community codepoints and routines.\n* bgp_route.c: Display support.\n* bgp_routemap.c: \u0027match lcommunity\u0027, \u0027set large-community\u0027 and\n  \u0027set large-comm-list\u0027\n* bgp_vty.c: Peer configuration, add \u0027large\u0027 to \u0027neighbor send-community ..\u0027.\n  Add \"show ip bgp large-community\", \"\"ip large-community-list ...\".\n\nAuthors: Keyur Patel \u003ckeyur@arrcus.com\u003e\n         Job Snijders \u003cjob@instituut.net\u003e\n"
    },
    {
      "commit": "f2a4b8fffb1f771371d6bfc425e7a69a14057b06",
      "tree": "14981e53f000075db1f53a6ad252975d00f55a0e",
      "parents": [
        "86d87e018bd8f9249986be4e6b713ab918fa5e0b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Fri Jan 20 14:45:47 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:59 2017 +0000"
      },
      "message": "nhrpd: Add libgen.h include for basename call\n"
    },
    {
      "commit": "86d87e018bd8f9249986be4e6b713ab918fa5e0b",
      "tree": "09cee0a38a890f7b13f6b5d2c4223dc773855c92",
      "parents": [
        "b8f8ba1bb24295a47758cb0e0b3072e017e52280"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Apr 20 14:04:22 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:59 2017 +0000"
      },
      "message": "bgpd: Graphviz dot files for the BGP FSM\n\n* bgp_fsm_{quagga,4271}.dot: Graphviz DOT files to document the BGP FSM\n  somewhat, for both Quagga and the basics of 4271.  May contain\n  errors, and could do with more work, but hopefully a useful start.\n"
    },
    {
      "commit": "b8f8ba1bb24295a47758cb0e0b3072e017e52280",
      "tree": "8eb9389293d05edd11560440ab76e90a7be33476",
      "parents": [
        "b1b1579bf16e6c3a21216d7f68b1b175ab1303bd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Sep 28 16:54:48 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:59 2017 +0000"
      },
      "message": "bgpd: Make the exponential backoff on BGP stop_with_error slower\n\n* bgp_fsm.c: (bgp_stop_with_error) peer-\u003ev_start * 2^x exponential back\n  off, up to max of 120s, ramps up fast. Use a slower back off, implemented\n  via a helper.\n  (back_off_exp2) The original 2^x back off.\n  (back_off_exp2_bias) Exp back-off, but biased down by the initial value to\n  slow the rampup initially.\n"
    },
    {
      "commit": "b1b1579bf16e6c3a21216d7f68b1b175ab1303bd",
      "tree": "74c239199590b805879524aadc5f3d54bb56a292",
      "parents": [
        "5a9f13a4a0df45c72dc425cc930e5e5682ba59ae"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Wed Sep 21 18:50:23 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:59 2017 +0000"
      },
      "message": "bgpd: consolidate start timer backoff via a \u0027BGP_Stop_with_error\u0027 FSM event\n\n* Exponential increase/back-off on the peer start timer is replicated in\n  a few places. Consolidate by adding a \"BGP_Stop_with_error\" event\n  so places outside FSM can just raise that event.\n* bgpd.h: Add BGP_Stop_with_error\n* bgp_fsm.c: (bgp_event_str[]) Add text for BGP_Stop_with_error.\n  FSM table: Handle BGP_Stop_with_error, identical to bgp_stop\n  in nearly all cases.\n* bgp_packet.c: (bgp_write,bgp_write_notify) can just raise new event now.\n"
    },
    {
      "commit": "5a9f13a4a0df45c72dc425cc930e5e5682ba59ae",
      "tree": "611a01c6c70e1320edd289b0fcab722f15e5b738",
      "parents": [
        "3dda6b3eccb9a2a88d607372c83c04c796e7daac"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:00:00 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:59 2017 +0000"
      },
      "message": "bgpd: Remove change that makes NHT tickle BGP FSM.\n\n* bgpd NHT patch makes NHT tickle FSM to restart session attempts that\n  are still very early, pre sending of messages.  Not really necessary,\n  and conceptually it may be nicer to just keep these two pieces\n  separate from each other.\n* bgpd.h: Remove NHT_Update FSM event\n* bgp_fsm.c: Remove NHT_Update event action from the FSM.\n* bgp_nht.c: Remove NHT_Update event.\n"
    },
    {
      "commit": "3dda6b3eccb9a2a88d607372c83c04c796e7daac",
      "tree": "24fb970719d0565acd47e9f826c818eb53626aa1",
      "parents": [
        "05c9075b09bea9e2328980df7138da5fd8157dc3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 06 16:57:40 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:59 2017 +0000"
      },
      "message": "bgpd: Rejiggle exported nht function names and consolidate some code\n\n* bgp_nht.h: Tweak the API a bit to simplify and make names a bit clearer on\n  function. Remove AFI argument, it\u0027s implied in both bgp_infos and peers.\n\n  (bgp_find_nexthop) this doesn\u0027t so much find a bnc, as check the bnc\n  for the given bgp_info is valid. Rename to (bgp_nexthop_check).\n\n  (bgp_find_or_add_nexthop) This ensures a bnc exists, so call it\n  (bgp_ensure_nexthop).\n\n  (bgp_unlink_nexthop_by_peer) Remove via peer.\n\n* bgp_nht.c: Adjust to above.\n  (bgp_get_nexthop_rn) helper to get the rn.\n  (bgp_find_nexthop) further helper to get the bnc for path or peer.\n  (bgp_unlink_nexthop_check) helper to check whether a bnc should go.\n  (bgp_ensure_nexthop) Use the helpers.\n\n* bgp_{route,fsm}.c: s/bgp_find_or_add_nexthop/bgp_ensure_nexthop/\n"
    },
    {
      "commit": "05c9075b09bea9e2328980df7138da5fd8157dc3",
      "tree": "89db8427d6133250d80e20b00a6d9b209c7933a9",
      "parents": [
        "a2f0db2be27385211f033271d8b83e9caf362236"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue May 17 13:28:16 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:59 2017 +0000"
      },
      "message": "bgpd: Modernise BGP defaults for MRAI and connect time\n\nQuagga uses historic BGP defaults for its minimum route advertisement\ninterval (MRAI) timers, and its ConnectRetry timer.  It uses 30s and\n5s for the eBGP and iBGP MRAIs, and 120s for the ConnectRetry timer.\nThese values are quite high, and delay convergence and session\nestablishment, and are unlikely to be desirable in modern networks.\n\nThe MRAI can, without a doubt, be significantly reduced.  The optimal\nMRAI is related to the size of the network, its diameter in terms of\nBGP propagation latency particularly.  Prior research suggests values\nof 5s to 15s for Internet BGP, as reasonably conservative values.\nFurther, other implementations have long shipped with 1s or even 0s\nMRAI values.\n\nA too low MRAI, e.g.  a 0 MRAI, can greatly increase the number of\nBGP messages a speaker sends, and hence the bandwidth and even CPU it\nmight use.  I.e.  some MRAI is better than no MRAI, with current BGP,\nor it is prone to excessive - even extreme - chattiness.\n\nThe ConnectRetry timer default also should be set much lower.\n\nLowering the MRAI had previously been suggested by:\n\n   \"Lower the default MRAI timer for iBGP peers to 0\n\n    Signed-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n    Reviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\"\n\n* bgpd/bgpd.h: Set defaults to:\n  - 3s for the eBGP MRAI\n  - 1s for iBGP MRAI (lower, but non-0, would be nice for this)\n  - 5s for the ConnectRetry timer\n"
    },
    {
      "commit": "a2f0db2be27385211f033271d8b83e9caf362236",
      "tree": "15de9347d92427dd99d7566ccfcf7a787b12dc61",
      "parents": [
        "366bb4ab851137e669a2e7db7a45d73b39090249"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Thu Feb 25 16:41:56 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:59 2017 +0000"
      },
      "message": "lib: track worst case # of cycles and don\u0027t allow granularity to go above\n\n* The workqueue code at present errs towards optimising the granularity\n  for throughput of queue items in runs.  This perhaps is at the cost\n  of risking excessive delays at times.  Make the workqueue take\n  worst-cases into account.\n\n* thread.c: (thread_should_yield) When thread should yield, we can\n  return the time taken for free, as it might be useful to caller.\n  work_queue_run\n\n* workqueue.h: (struct work_queue) Add fields for worst # of cycles,\n  and (independently) worst time taken.\n\n* workqueue.c: (work_queue_new) Worst starts high.\n\n  (work_queue_run) Track the worst number of cycles taken, where a\n  queue run had to yield before clearing out the queue.  Use this as an\n  upper-bound on the granularity, so the granulity can never increase.\n\n  Track the worst-case delay per work-queue, where it had to yield, thanks\n  to the thread_should_yield return value change.  Note that \"show thread\n  cpu\" already shows stats for the work_queue_run function, inc average and\n  worst cases.\n\nDeficiencies:\n\n- A spurious outside delay (e.g.  process not run in ages) could cause\n  \u0027worst\u0027 to be very low in some particular invocation of a process,\n  and it will stay that way for life of process.\n\n- The whole thing of trying to calculate suitable granularities is just\n  fragile and impossible to get 100% right.\n"
    },
    {
      "commit": "366bb4ab851137e669a2e7db7a45d73b39090249",
      "tree": "587600b6a0f58641b7930061507708c12cc6faf8",
      "parents": [
        "a6efbab768b94a398adb52f0e2b3fe064cfe2f59"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue May 17 13:59:55 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:58 2017 +0000"
      },
      "message": "tools: Extend multiple-bgpd.sh to support BIRD, ExaBGP plus more configurables\n\n* tools/multiple-bgpd.sh: Extend this script to support having\n  multiple different implementations in the ring.  Add config\n  generator and launch functions for BIRD and ExaBGP.\n\n  Allow the proportion of other instances in the ring to peer with to\n  be configurable as %age via PEERPROP. Allow number of v4 routes to\n  advertise to be configurable via ADV. Allow \"external\", non-ring\n  BGP peers to be defined via the EXPEER* arrays.\n"
    },
    {
      "commit": "a6efbab768b94a398adb52f0e2b3fe064cfe2f59",
      "tree": "13f16ae807e0ded1aec62682fba0ba4eebbaf2ba",
      "parents": [
        "5931124b6c78ec211e3171606fc2ad2dd448b12a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Dec 01 16:09:08 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:58 2017 +0000"
      },
      "message": "tools/multiple-bgpd: extend the ring, enable mpath, add links to +-2 instances\n\n* multiple-bgpd.sh: Configure mpath to test it. Add links to the ±2 instances\n  in the ring to get a bit more multi-pathing (otherwise, only mpath to\n  the furthest neighbour IF there\u0027s an even number of instances).\n"
    },
    {
      "commit": "5931124b6c78ec211e3171606fc2ad2dd448b12a",
      "tree": "57f9bc0f89ece0632f4f3d56632f3174f0b38288",
      "parents": [
        "b174a58467d155b8609f1b5a1f6e27f22afdb81c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Jul 08 11:24:09 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:58 2017 +0000"
      },
      "message": "tools: Remove historic scripts\n"
    },
    {
      "commit": "b174a58467d155b8609f1b5a1f6e27f22afdb81c",
      "tree": "68352a6b3fc37427690708937cccfbfd337d4a55",
      "parents": [
        "5bc62ca9561fa01a989e386cbf6e71cbdef77a3c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Mon Jan 23 10:55:26 2017 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:58 2017 +0000"
      },
      "message": "ripd: Fix GCC6 warning on misleading indentation\n"
    },
    {
      "commit": "5bc62ca9561fa01a989e386cbf6e71cbdef77a3c",
      "tree": "280eb7047661122253bfbcce62cac8445eba4acd",
      "parents": [
        "40fc3dda2b7a345e447d2ef355108c987e59ed13"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Jul 11 16:21:23 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:58 2017 +0000"
      },
      "message": "isisd,ospf6d,bgpd: Fix GCC 6 warnings on indentation not matching control flow\n\nGCC 6 can now give warnings when the indentation of code does not\nalign with the scope of prior control flow statement(s).  I.e., where\nthe code visually suggests one kind of control flow, but in actuality\nfollows another.\n\nFix warnings found. They all seem to be simple cases of the indentation being\ndeceptive, but the existing flow being correct.\n"
    },
    {
      "commit": "40fc3dda2b7a345e447d2ef355108c987e59ed13",
      "tree": "23e8600b8bf389d1766cd2461f0ee26cd6616215",
      "parents": [
        "867946bb8802c02049bf68a4e97843d777cbcb68"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 11 16:00:27 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:58 2017 +0000"
      },
      "message": "build: Add GCC stack-protector/SSP to default flag set\n\n* configure.ac: Add GCC SSP / -fstack-protector-strong to default flag\n  set, when available, as part of defence in depth. At least some\n  distros already use SSP by default and it can detect buffer overflows\n  above a certain size.\n"
    },
    {
      "commit": "867946bb8802c02049bf68a4e97843d777cbcb68",
      "tree": "572fbcb0edcdb3fd53a0ad6d8f9d402be43dd266",
      "parents": [
        "0c175f82a812c6e86eeb2c11b7f3f96bf46459fa"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Dec 21 13:39:33 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:58 2017 +0000"
      },
      "message": "lib: vty_prefix_list_install should validate afi/safi\n\n* lib/plist.c: (vty_prefix_list_install) Check afi/safi is supported and warn\n  if not, as a safeguard and to ensure the user is warned, if somehow that\n  code is ever called for non-IP AFI.\n"
    },
    {
      "commit": "0c175f82a812c6e86eeb2c11b7f3f96bf46459fa",
      "tree": "a06715088400962839cdac19827db0534d9b20e7",
      "parents": [
        "574e5007d5155ee261a4da39fc18502f76e40a30"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Dec 21 12:57:31 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:57 2017 +0000"
      },
      "message": "ospfd: \u0027ip ospf network\u0027 interface should down iface before changing type\n\n* ospf_vty.c: (ip_ospf_network) This function changes the interface type\n  and only then downs/ups the interface if already up.  So the down happens\n  with the interface type already altered.  However, the interface type\n  can have major ramifications for how underlying state is stored/indexed,\n  which may cause problems.\n\n  Further, bit of an encapsulation violation to twiddle state here.\n  (no_ip_ospf_network) ditto.\n* ospf_interface.c: (ospf_if_reset_type) New function to reset the OSPF\n  interface type on an interface. Ensure the interface is downed before\n  the type is changed.\n* ospf_interface.h: (ospf_if_reset_type) Export, for ospf_vty.c\n"
    },
    {
      "commit": "574e5007d5155ee261a4da39fc18502f76e40a30",
      "tree": "616090a448fda07f137f18a7513fb3eb1e4e689f",
      "parents": [
        "670f3dba6721a500418b5793a2b00579198d2bd7"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue May 17 13:33:11 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:57 2017 +0000"
      },
      "message": "bgpd: Add route count from neighbours \u0026 established sessions to bgp summary\n\n* bgp_vty.c: (bgp_show_summary) The sum of the routes received from\n  each neighbour can be interesting/useful.  Add a line with this to\n  end of \u0027show ...  bgp ...  summary\u0027. Also, add a count of the number of\n  established sessions.\n\n  Note, the route count is also available from \u0027show bgp \u003cafi\u003e \u003csafi\u003e\n  statistics\u0027, along with more.\n"
    },
    {
      "commit": "670f3dba6721a500418b5793a2b00579198d2bd7",
      "tree": "6ad3c568371acfc18e96883644f76ecdedd34d07",
      "parents": [
        "4d48bb360db5148b18524d06616555b06342fa68"
      ],
      "author": {
        "name": "Renato Westphal",
        "email": "renato@opensourcerouting.org",
        "time": "Mon Nov 28 16:47:13 2016 -0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:57 2017 +0000"
      },
      "message": "bgpd: fix invalid memory access in peer_free()\n\nWe shoult not call bgp_unlock() before calling\nbgp_delete_connected_nexthop() in the peer_free() function. Otherwise,\nif bgp-\u003elock reaches zero, bgp_free() is called and peer-\u003ebgp becomes\nan invalid pointer in the bgp_delete_connected_nexthop() function.\n\nTo fix this, move the call to bgp_unlock() to the end of peer_free().\n"
    },
    {
      "commit": "4d48bb360db5148b18524d06616555b06342fa68",
      "tree": "82ed5fecb41cb5d52e4f6c52e088148b3e44a66b",
      "parents": [
        "2c0adbf9bc0c2425f567848ba7f790059d18b253"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Tue Nov 29 12:47:12 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:57 2017 +0000"
      },
      "message": "bgpd: fix \"show ip bgp\" column alignment\n\nThe \"Weight\" column is off:\n\nBGP table version is 0, local router ID is 10.1.1.1\nStatus codes: s suppressed, d damped, h history, * valid, \u003e best, \u003d\nmultipath,\n              i internal, r RIB-failure, S Stale, R Removed\nOrigin codes: i - IGP, e - EGP, ? - incomplete\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003e 4.1.1.2/32       9.9.9.2                  0          32768 ?\n*\u003e 4.1.1.4/32       9.9.9.2                  0          32768 ?\nDisplayed  2 out of 2 total prefixes\n\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "2c0adbf9bc0c2425f567848ba7f790059d18b253",
      "tree": "45a7267272bb312c13d24db395e7cd94c95094bb",
      "parents": [
        "f2f44eaa321be5a52e5ad67069bd8061603589a1"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Nov 18 15:42:41 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:57 2017 +0000"
      },
      "message": "vtysh, zebra: Fix link-params to use exit-link-params\n\nFix the link-params submode to use the \u0027exit-link-params\u0027\nto indicate we are exiting a submode.\n\nFixup all the relevant bits.\n"
    },
    {
      "commit": "f2f44eaa321be5a52e5ad67069bd8061603589a1",
      "tree": "c4d73f47fb23cf972b0cd1bd18efd37aca06978d",
      "parents": [
        "a53d4e55a51518ae5735a65405dcee88c59cd5d8"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 12 17:43:15 2016 +0900"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:57 2017 +0000"
      },
      "message": "zebra: fix link-params CLI handling\n\nvtysh was breaking in a rather ugly way, and some \"no\" forms were\nmissing too.\n"
    },
    {
      "commit": "a53d4e55a51518ae5735a65405dcee88c59cd5d8",
      "tree": "1e618c5d2ee2284ec9b2787a52d2feecf1182925",
      "parents": [
        "c2c63cb3d5e2f56cf2b2d3f00535d275ab23a969"
      ],
      "author": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Thu Oct 20 23:55:10 2016 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:57 2017 +0000"
      },
      "message": "build: configure.ac - use AC_PROG_CC_C99 instead of cflags to force c99 mode\n"
    },
    {
      "commit": "c2c63cb3d5e2f56cf2b2d3f00535d275ab23a969",
      "tree": "a02ded36ae5127a61149e18aea5e6e47617159cf",
      "parents": [
        "5bb328e82137a0a9cc73e887d5074da273562d38"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Mon Oct 10 19:35:43 2016 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:56 2017 +0000"
      },
      "message": "ospfd: Fix arm compile issue\n\nsize_t printf formatter is %zd!\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "5bb328e82137a0a9cc73e887d5074da273562d38",
      "tree": "d1feb30e6acd44260c0fa3454cb142c4509d998a",
      "parents": [
        "2bbacea824300be05f46094a4d156cb12c0dca13"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat Oct 01 22:35:32 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:56 2017 +0000"
      },
      "message": "ripngd: add support for route tags\n"
    },
    {
      "commit": "2bbacea824300be05f46094a4d156cb12c0dca13",
      "tree": "2e0e1b3ef91215068ea89eba2ba4a409bd151b42",
      "parents": [
        "7ae2b609875756663e0a7d677609d04baa04b613"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat Oct 01 21:43:17 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:56 2017 +0000"
      },
      "message": "ripd: add support for route tags\n"
    },
    {
      "commit": "7ae2b609875756663e0a7d677609d04baa04b613",
      "tree": "a8ca729e499968e33344208f5a52ece09a6af091",
      "parents": [
        "ddc160cce1767ef006a812f5213cabfb24e3cd4d"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat Oct 01 06:41:40 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:56 2017 +0000"
      },
      "message": "ospf6d: add support for route tags\n\n[ported by Paul Jakma, paul@jakma.org]\n"
    },
    {
      "commit": "ddc160cce1767ef006a812f5213cabfb24e3cd4d",
      "tree": "6e4aa078fb897d77edcb7ef16282471c518440b4",
      "parents": [
        "5958b8f790f0049f980b74b3e2916979850e5d09"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat Oct 01 20:42:34 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:56 2017 +0000"
      },
      "message": "*: Port Christians tweaks for 32-bit route tags\n\nPort over Christian\u0027s tweaks from his port of my commit widening the\nroute-tag field width to 32-bit.  Commit dc9ffce8786844\n \"*: Consistently support 32-bit route tags\".\n\nwith \"changes which make this actually useful for all the daemons\".\n\nThis is missing the zebra route-map changes.\n"
    },
    {
      "commit": "5958b8f790f0049f980b74b3e2916979850e5d09",
      "tree": "1829d6b27b3b4b650fe90b6b2baa4b803925c848",
      "parents": [
        "dafa05e65fe4b3b3ed5525443f554215ba14f42c"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat Oct 01 04:06:03 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:56 2017 +0000"
      },
      "message": "ospfd: Update route in zebra when tag changes\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "dafa05e65fe4b3b3ed5525443f554215ba14f42c",
      "tree": "77d152b32b3fc3766f1813927b0eb40efa36425e",
      "parents": [
        "56ae5c4847f53f10e2151039556ec76a7a94c7fb"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Jan 19 17:27:01 2017 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "nhrpd: implement next hop resolution protocol\n\nThis provides DMVPN support and integrates to strongSwan. Please read\nREADME.nhrpd and README.kernel for more details.\n"
    },
    {
      "commit": "56ae5c4847f53f10e2151039556ec76a7a94c7fb",
      "tree": "087d428b4d3c64b8b2a4b068aa31c50551f508f3",
      "parents": [
        "54f1476c2ab201808fae1ec9f2ee1a5460f7882b"
      ],
      "author": {
        "name": "Jafar Al-Gharaibeh",
        "email": "jafar@atcorp.com",
        "time": "Fri Jun 17 16:01:12 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "zserv: get rid of code duplication in nexthop_lookup[_mrib] functions\n\nz[send/read]_ipv4_nexthop_lookup functions have been duplicated for multicast mrib lookup. The mrib versions are identical to the unicast versions except for a couple of places. The differences do not justify duplicating two functions and 80 lines of codes. Code refactoring and an if statement with a few lines of code are enough to handle the differences with a lot less and cleaner code.\n\nSigned-off-by: Jafar Al-Gharaibeh \u003cjafar@atcorp.com\u003e\nSigned-off-by: Jafar Al-Gharaibeh \u003cjafar@atcorp.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "54f1476c2ab201808fae1ec9f2ee1a5460f7882b",
      "tree": "038a2fe8af729e9cbf18af0cbbd3cc284581cfbc",
      "parents": [
        "be987c2804730f39828e2e047fb09f05ebd9915a"
      ],
      "author": {
        "name": "Quentin Young",
        "email": "qlyoung@cumulusnetworks.com",
        "time": "Mon Jun 20 13:58:05 2016 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "zebra: Change bitwise operations to purpose-built macros\n\nSome bitfields for zebra_debug_* flags were being modified\nwith bitwise operators instead of the purpose-built macros\nin lib/zebra.h. Changed such instances to use the macros.\n\nSigned-off-by: Quentin Young \u003cqlyoung@cumulusnetworks.com\u003e\nSigned-off-by: Quentin Young \u003cqlyoung@cumulusnetworks.com\u003e\nAcked-by: Jafar Al-Gharaibeh \u003cjafar@atcorp.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "be987c2804730f39828e2e047fb09f05ebd9915a",
      "tree": "f13703cdc26dd6cf78184228cd1b1209ed6838f9",
      "parents": [
        "99f567205357570091ba109caad126b7bafcf8ce"
      ],
      "author": {
        "name": "Quentin Young",
        "email": "qlyoung@cumulusnetworks.com",
        "time": "Thu Jun 16 11:26:44 2016 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "lib: Clean command.c\n\nRemoved dead code paths and fixed a typo.\n\nSigned-off-by: Quentin Young \u003cqlyoung@cumulusnetworks.com\u003e\nSigned-off-by: Quentin Young \u003cqlyoung@cumulusnetworks.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "99f567205357570091ba109caad126b7bafcf8ce",
      "tree": "7b3a0df7600b77a133aa0ae5baa002bccd313d14",
      "parents": [
        "5d9fae294228ad39d12913312485429b9129a3b0"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue Jun 14 20:07:10 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "vtysh: fix a memory leak in vtysh_client_execute\n\nbuf is dynamically allocated and needs to be freed in the error handling\npath too.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "5d9fae294228ad39d12913312485429b9129a3b0",
      "tree": "d2bc5a8a6cbf57a7d6238e75684107982b1001dc",
      "parents": [
        "93ad10e27beebb0416cf33d2f0acf96425064a48"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue Jun 14 20:07:09 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "vtysh: handle case if there is no match in \"write terminal $daemon\"\n\nWhile the DEFUN should match the list of clients registered in\nvtysh, it seems better to handle the case explicitly instead of\nrelying on the client list and the DEFUN signature being in sync.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "93ad10e27beebb0416cf33d2f0acf96425064a48",
      "tree": "37439c2626b6fea2eded6943a65ecafa1aac0300",
      "parents": [
        "d1da1e9d18f46d80da4e91fdabafb03fa4272a01"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue Jun 14 20:07:08 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:55 2017 +0000"
      },
      "message": "ripd: print md5 auth digest correctly\n\nThe dump of the md5 hash was missing one byte of the hash.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d1da1e9d18f46d80da4e91fdabafb03fa4272a01",
      "tree": "16bb703e39104352bb8f27eee134b116f2a4b923",
      "parents": [
        "5bd78b9f409b0a7d4b6a9e15d495ca2c53757a4d"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue Jun 14 20:07:07 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:54 2017 +0000"
      },
      "message": "pimd: don\u0027t leak original_s_route on error\n\noriginal_s_route is allocated on the heap and was not freed during the\nerror case.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "5bd78b9f409b0a7d4b6a9e15d495ca2c53757a4d",
      "tree": "eebe200fba3a396801e0fae8dcc4ce214da68453",
      "parents": [
        "c8e80972d5b99fb8baaa367a726f1dc36a840744"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue Jun 14 20:07:02 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:54 2017 +0000"
      },
      "message": "ospfd: fix double assignment in ospf_vl_set_timers\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "c8e80972d5b99fb8baaa367a726f1dc36a840744",
      "tree": "470029d31433fef22dbd1cd538173a1cc396a163",
      "parents": [
        "32e41f75fd1735071e0fa0bdd918e9b1241d1837"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue Jun 14 20:07:01 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:54 2017 +0000"
      },
      "message": "bgpd: fix memory leaks in show commands\n\nsockunion_str2su allocates a struct sockunion that used to be leaked\nin the show commands. Use str2sockunion and keep the information\non the stack instead.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nSigned-off-by: Philippe Guibert \u003cphilippe.guibert@6wind.com\u003e\n"
    },
    {
      "commit": "32e41f75fd1735071e0fa0bdd918e9b1241d1837",
      "tree": "d9f46afc41cdda2413bac46268ccd53f66a0590c",
      "parents": [
        "708ea62f82f34c8674042b369ee8cba5d7b34c02"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue Jun 14 20:06:59 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:54 2017 +0000"
      },
      "message": "bgpd: don\u0027t leak memory in community_regexp_include\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "708ea62f82f34c8674042b369ee8cba5d7b34c02",
      "tree": "86d4105d340426a86b53dcc47b013e8720b0b195",
      "parents": [
        "5cb81ce51d5c2ed6b6f7ce51dcfa5388b1836c27"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue Jun 14 20:06:57 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:54 2017 +0000"
      },
      "message": "bgpd: check return value of zebra_interface_state_read\n\nzebra_interface_state_read can return NULL in cornercases. The other\ndaemons check for this, so should bgpd.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "5cb81ce51d5c2ed6b6f7ce51dcfa5388b1836c27",
      "tree": "d07cac62092a01a19f1a065d5a6b8be89a484997",
      "parents": [
        "cfb4826340ab177b3cfbce4f138187f41860b68e"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Tue Jun 14 20:06:56 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:54 2017 +0000"
      },
      "message": "bgpd: setting nexthop doesn\u0027t need inet_pton\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "cfb4826340ab177b3cfbce4f138187f41860b68e",
      "tree": "ae45c07809bbb976e42b34e1b5966879065ba2c5",
      "parents": [
        "47fb0a8eb8138572a9117156223259413a956e81"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jun 13 17:29:14 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:54 2017 +0000"
      },
      "message": "lib: AgentX: use threads instead of eventloop hack\n\nAgentX fd/timeout handling is rather hackishly monkeyed into thread.c.\nReplace with code that uses plain thread_* functions.\n\nNB: Net-SNMP\u0027s API rivals Quagga\u0027s in terms of age and absence of\ndocumentation.  netsnmp_check_outstanding_agent_requests() in particular\nseems to be unused and is therefore untested.\n\nThe most useful documentation on this is actually the blog post Vincent\nBernat wrote when he originally integrated this into lldpd and Quagga:\nhttps://vincent.bernat.im/en/blog/2012-snmp-event-loop.html\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "47fb0a8eb8138572a9117156223259413a956e81",
      "tree": "e5653fd70a24b908b63509d5721e66a15d1ea157",
      "parents": [
        "449b29e8bd9fb1ae2e57cea7074e1b9778343455"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jun 13 17:29:13 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 23 18:51:53 2017 +0000"
      },
      "message": "lib: add thread_add_timer_tv (struct timeval)\n\nAnother zoo extension, this adds a timer scheduling function that takes\na struct timeval argument (which is actually what the wrappers boil down\nto, yet it\u0027s not exposed...)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    }
  ],
  "next": "449b29e8bd9fb1ae2e57cea7074e1b9778343455"
}
