)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "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": "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": "afc9cf97363c0b7ec6c253731a75ac83e70ea190",
      "tree": "929cddfa8cda9136780bccd28ce365365841b3cc",
      "parents": [
        "fc2cee2bed4ebf664ba0afa1678027365f3923f7"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Tue May 19 18:03:50 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:51 2016 +0100"
      },
      "message": "osfd: Make OSPF compliant to the last sentence of this section in RFC 2328\n\n9.5 Sending Hello packets\n\nHello packets are sent out each functioning router interface.\nThey are used to discover and maintain neighbor\nrelationships.[6] On broadcast and NBMA networks, Hello Packets\nare also used to elect the Designated Router and Backup\nDesignated Router.\nThe format of an Hello packet is detailed in Section A.3.2.  The\nHello Packet contains the router\u0027s Router Priority (used in\nchoosing the Designated Router), and the interval between Hello\nPackets sent out the interface (HelloInterval).  The Hello\nPacket also indicates how often a neighbor must be heard from to\nremain active (RouterDeadInterval).  Both HelloInterval and\nRouterDeadInterval must be the same for all routers attached to\na common network.  The Hello packet also contains the IP address\nmask of the attached network (Network Mask).  On unnumbered\npoint-to-point networks and on virtual links this field should\nbe set to 0.0.0.0.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Vivek Venkatraman \u003cvivek@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "c7f25b90902d4be39132b1174440746b571220ce",
      "tree": "b66ca69885ba36884b09473700f08cc3909cfea3",
      "parents": [
        "f2eb9caac6425473af8d6d15534439fe715f7426"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Tue May 19 17:47:22 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:50 2016 +0100"
      },
      "message": "bgpd, ospfd, ospf6d, ripd, ripngd, zebra: \u0027set metric -12\u0027 is broken in the parser\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "96d1060a704d88e04fcd446cce078a6131c3f6db",
      "tree": "89a6f1285550a2d2f149479cc272450e63294ebc",
      "parents": [
        "3b4fb574b414e7b7776b581688f189f2fc736a38"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Jul 01 14:23:45 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:50 2016 +0100"
      },
      "message": "*: Widen width of Zserv routing tag field.\n\n* lib/zebra.h: Introduce a route_tag_t type for route tags generally,\n  and make it 4 bytes wide - so it can directly hold things like an ASN, or\n  the OSPF ASE-LSA tag.\n* zebra/rib.h: Use route_tag_t instead of u_short.\n* *: Update \u0027u_short (*)?(tag|tmp)\u0027 to use route_tag_t instead of u_short.\n  Update stream_{get,put} to l instead of w.\n* ospf_zebra.c: (ospf_zebra_add) test OSPF tag within range of ROUTE_TAG_MAX.\n"
    },
    {
      "commit": "2b2e38c3169ae0221645e4dd9b40388660ce3f68",
      "tree": "4201eb0ecd250b8da03ec7c129ef80a77007ee4a",
      "parents": [
        "eefddcc78abcc91d1d88633a3c6d5a438fe58790"
      ],
      "author": {
        "name": "Piotr Chytła",
        "email": "pch@packetconsulting.pl",
        "time": "Tue Dec 01 10:10:41 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:49 2016 +0100"
      },
      "message": "ospfd, vtysh: Add support for Route tags\n\n[Forward ported by Cumulus]\n\nCredit\n------\nA huge amount of credit for this patch goes to Piotr Chytla for\ntheir \u0027route tags support\u0027 patch that was submitted to quagga-dev\nin June 2007.\n\nDocumentation\n-------------\nAll ipv4 and ipv6 static route commands now have a \"tag\" option\nwhich allows the user to set a tag between 1 and 65535.\n\nquagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag ?\n \u003c1-65535\u003e  Tag value\nquagga(config)# ip route 1.1.1.1/32 10.1.1.1 tag 40\nquagga(config)#\n\nquagga# show ip route 1.1.1.1/32\nRouting entry for 1.1.1.1/32\n  Known via \"static\", distance 1, metric 0, tag 40, best\n  * 10.1.1.1, via swp1\n\nquagga#\n\nThe route-map parser supports matching on tags and setting tags\n!\nroute-map MATCH_TAG_18 permit 10\n match tag 18\n!\n\n!\nroute-map SET_TAG_22 permit 10\n set tag 22\n!\n\nBGP and OSPF support:\n- matching on tags when redistribing routes from the RIB into BGP/OSPF.\n- setting tags when redistribing routes from the RIB into BGP/OSPF.\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nSigned-off-by: Piotr Chytla \u003cpch@packetconsulting.pl\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "eefddcc78abcc91d1d88633a3c6d5a438fe58790",
      "tree": "1f5faa31c5070770c55e3f2c52911121fa095efe",
      "parents": [
        "de24f82d0ea7eadd0db7d5c0d340a0579312237c"
      ],
      "author": {
        "name": "Piotr Chytła",
        "email": "pch@packetconsulting.pl",
        "time": "Tue Dec 01 09:48:02 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:49 2016 +0100"
      },
      "message": "bgpd, lib, ospfd, zebra: Add ability to read/write tag value\n\nModify zebra to pass the tag value to and from the\nvarious protocols.\n\n[forward ported by Cumulus]\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nSigned-off-by: Piotr Chytla \u003cpch@packetconsulting.pl\u003e\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nEdits: Paul Jakma \u003cpaul.jakma@hpe.com\u003e rebase conflicts in bgp_zebra.c\n"
    },
    {
      "commit": "743219e9abe79e8a3828fc00de679098061960bb",
      "tree": "5daff5c2b13c5e5fd9372269c1d74e24d25f0472",
      "parents": [
        "fa2e78677bde6926dc7cfa29e14925eb6d8e87b3"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Tue May 19 18:03:57 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:07:48 2016 +0100"
      },
      "message": "ospfd: \"show ip ospf neighbor\" header spacing\n\nThe column headers for displaying OSPF neighbors are not aligned,\nthis patch addresses this issue\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "f687b62b14dd4e79528e9ba607da1ebdc44cf28d",
      "tree": "8cf2a5934f0ed6069aaa1e0ebe2dcec5e7d75fc9",
      "parents": [
        "24521e24c739b130c247e864d22b734daa4281d1"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue May 19 18:03:50 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Oct 04 13:06:48 2016 +0100"
      },
      "message": "ospfd: Don\u0027t wait for state change to Exchange to start LSReq\n\nANVL test 17.5. The current implementation wouldn\u0027t start sending LSReq unti\nthe DB Desc packets have all been received (no M bit). This caused the test\nchoke up. RFC 2328 allows for sending LSReq on receiving the first DbDesc\npacket as long as the nbr state is Exchange. This patch fixes that.\n\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n\nEdited-by: Paul Jakma \u003cpaul.jakma@hpe.com\u003e to start the sending of LsReq\nfrom the nsm_negotiation_done FSM transition function for ExStart-\u003eExchange,\nrather than tacking the call to ospf_ls_req_send to the bottom of the DD\ndesc processing function.\n"
    },
    {
      "commit": "24521e24c739b130c247e864d22b734daa4281d1",
      "tree": "87c1101c1cf0057598051440ec248e39ea82284c",
      "parents": [
        "45af55a70379da6e1534185ffa20238aa6026d52"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Tue May 19 18:03:48 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:47 2016 +0100"
      },
      "message": "ospfd: Fix no ip ospf hello-interval\n\nOSPF silently ignores \u0027no ip ospf hello-interval X\u0027 and \u0027no ip ospf hello-interval X\u0027\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "45af55a70379da6e1534185ffa20238aa6026d52",
      "tree": "c7b7f526bb1806dbcd87dc2da6fab5b52f2d5acf",
      "parents": [
        "e2a0ebf26c640822c3488e6f371a043a91fdcc1b"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Tue May 19 18:03:43 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:47 2016 +0100"
      },
      "message": "ospfd: Make destination of p2p to multicast for LS-ACKS\n\nISSUE:\n\nLSAcks (for directed acks) are being sent to neighbor\u0027s unicast address.\n\nRFC 2328 says:\n\n\"The IP destination address for the packet is selected as\n follows.  On physical point-to-point networks, the IP\n destination is always set to the address AllSPFRouters\"\n\nFix is to unconditionally set the destination address for LSAcks over\npoint-to-point links as AllSPFRouters. Quagga OSPF already has similar\nchange for OSPF DBD, LSUpdate and LSrequest packets.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "a90dc8752723ef6bad6fc5a7d5180ab313b0317c",
      "tree": "ba4bafa307695614b1def0e2223d9f6ae3ba6cec",
      "parents": [
        "59fe0eecd3498f28ec1b1cdb2de5dcc7c507f83f"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Tue May 19 17:58:13 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:46 2016 +0100"
      },
      "message": "ospfd: Support for \u0027clear ip ospf interface [IFNAME]\u0027\n\nAllow the user to enter the \u0027clear ip ospf interface [IFNAME]\u0027 command\nthis resets the connection between ospf and any peers out the\nspecified interface.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "0f2f7a3fa5d55e682d0739d586da021cbd43bc3c",
      "tree": "a8bdff569d71a784e2ba4ab154ce6ab70103638a",
      "parents": [
        "94627e670d661f95217521ef0bfba141e5e37e68"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Thu Jun 16 15:40:02 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:44 2016 +0100"
      },
      "message": "*: Fix duplicate commands from view/enable node consolidation\n"
    },
    {
      "commit": "a6d400c9158b10207cde40a428ebf2c27f105c0a",
      "tree": "1d9d4854da1a23d9e9c175dc9b7c2daebfe352dd",
      "parents": [
        "3bccb4f3df0530bb4d8961b0867ea04c1bca065f"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Fri Sep 18 08:32:56 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:42 2016 +0100"
      },
      "message": "zebra: Set link-detect on by default\n\nSigned-off-by: Roopa Prabhu \u003croopa@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\n\nEdited by Christian Franke: Fix OSPF Virtual Links\nEdited by Donald Sharp: Add NEWS notification\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-By: paul@jakma.org\n"
    },
    {
      "commit": "481986950290323e2f5d1e774a666d4b7ed510d6",
      "tree": "bf6c499c2bbdf39af42f85679820b38038ad3ffe",
      "parents": [
        "ec04b9faf9ec55ccf7d5bb16cf17a85051fc8270"
      ],
      "author": {
        "name": "Olivier Dugeon",
        "email": "olivier.dugeon@orange.com",
        "time": "Tue Apr 19 19:21:17 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:39 2016 +0100"
      },
      "message": "ospfd: Add support Router Capabilities support to OSPF\n\nThis is an implementation of RFC4970 (Router Information) and\nRFC5088 (PCE Capabilities announcement)\n\n* ospfd/Makefile.am: Add new file ospf_ri.c and ospf_ri.h\n* ospfd/ospf_opaque.c: Add new Router Capabilities code point\n* ospfd/ospf_ri.[c,h]: Implementation of RFC4970 \u0026 RFC5088\n\nSigned-off-by: Olivier Dugeon \u003colivier.dugeon@orange.com\u003e\n"
    },
    {
      "commit": "29a1401706a762541b366c7844507efe2bc1345d",
      "tree": "d7e7c770f90cca5ad3748e167bc8028a6084f7f1",
      "parents": [
        "ac10d30c03091eace3c0405aa8ccb7d3c09e7bd2"
      ],
      "author": {
        "name": "Olivier Dugeon",
        "email": "olivier.dugeon@orange.com",
        "time": "Tue Apr 19 18:42:40 2016 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:39 2016 +0100"
      },
      "message": "ospfd: Update Traffic Engineering support\n\nThese patches update original code to RFC3630 (OSPF-TE) and add support of\nRFC5392 (Inter-AS v2) \u0026 RFC7471 (TE metric extensions) and partial support\nof RFC6827 (ASON - GMPLS).\n\n* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering\n* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392\n* ospfd/ospf_packet.c: Update checking of OSPF_OPTION\n* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id\n* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get\n  Link Parameters information from the interface to populate Traffic\n  Engineering metrics\n* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -\u003e MT and new DN)\n* ospfd/ospf_te.[c,h]: Major modifications to update the code to new\n  link parameters structure and new RFCs\n\nSigned-off-by: Olivier Dugeon \u003colivier.dugeon@orange.com\u003e\n"
    },
    {
      "commit": "4359501e1a427159c9b49f3041889837aaaf2eb3",
      "tree": "a9f2a5b71e75a61f84100446f90d9339e6152587",
      "parents": [
        "d41e7b975b901f109608471b77c46718c1fb5b45"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue May 19 18:50:49 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Sep 13 10:36:38 2016 +0100"
      },
      "message": "lib: consolidate ntohf/htonf from ospfd/isisd TE to lib/network\n\n* lib/network.{c,h}: Consolidate the ntohf/htonf functions used in ospfd\n  TE to here, using the value-passing variant that fits with existing\n  ntoh/hton functions.\n* ospfd/ospf_opaque.c: Remove its variants.\n* ospfd/ospf_te.c: Update to use the consolidated, by-value variant.\n"
    },
    {
      "commit": "68b45cc592d5d61e748e8d99ec9f84e63aa73213",
      "tree": "eb1008834813757b86e5f4bc439e7b2b3188adbf",
      "parents": [
        "b9ac2f320922542e0320ceeced4aa7264564e98a"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Mar 11 14:27:13 2016 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:33 2016 +0100"
      },
      "message": "*: Consolidate all double VIEW_NODE and ENABLE_NODE\u0027s\n\nIf a command is put into the VIEW_NODE, it is going into the\nENABLE_NODE as well.  This is especially true for show commands.\nAs such if a command is in both consolidate it down to VIEW_NODE.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "23757db11c5378521b7948847e17691f4fc35e0a",
      "tree": "5b62d70b558c89ab751626e5b3f1a028a0be431e",
      "parents": [
        "7bd31774cf2c1cfaf74bca87f57f698e20a07e65"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 24 06:26:02 2016 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:32 2016 +0100"
      },
      "message": "*: get rid of \"MTYPE 0\"\n\nA few places are using 0 in place of the MTYPE_* argument.  The\nfollowing rewrite of the alloc tracking won\u0027t deal with that, so let\u0027s\nuse MTYPE_TMP instead.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7bd31774cf2c1cfaf74bca87f57f698e20a07e65",
      "tree": "dd6edfc612c77e79138596dfe4070e0822797d77",
      "parents": [
        "47dd9af50d7fcf3ea25ebb8c8c4e9c4726a072f6"
      ],
      "author": {
        "name": "kitty",
        "email": "khiruthigai.balasubramanian@hpe.com",
        "time": "Thu Feb 18 21:33:40 2016 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 20 12:58:32 2016 +0100"
      },
      "message": "ospfd: fix non-zero metric when describing loopback addresses\n\nFixes Quagga Bugzilla #842\n\nChange-Id: Iff33d70089d1393bf3e9c757d9e9faf134699121\nSigned-off-by: kitty \u003ckhiruthigai.balasubramanian@hpe.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "bb01bdd740339b0c07d8ed0786811801b2a79192",
      "tree": "946ffe458cc4ebea09407394b880443d0ed8f98b",
      "parents": [
        "e6ec2d6d18dadb119b93284ef2f5f5b5440d6f66"
      ],
      "author": {
        "name": "Jafar Al-Gharaibeh",
        "email": "jafar@atcorp.com",
        "time": "Thu Apr 21 16:22:33 2016 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Apr 29 19:31:49 2016 -0400"
      },
      "message": "ospfd: fix - correct neighbor index on changing/p2p/virtual links\n\nospfd keeps a list of neighbor routers for each configured interface. This\n list is indexed using the neighbor router id in case of point-to-point and\n virtual link types, otherwise the list is indexed using the neighbor\u0027s\n source IP (RFC 2328, page 96). The router adds itself as a \"pseudo\" neighbor\n on each link, and also keeps a pointer called (nbr_self) to the neighbor\n structure. This takes place when the interface is first configured. Currently\n ospfd adds this pseudo neighbor before the link parameters are fully configure,\n including whether the link type is point-to-point or virtual link. This causes\n the pseudo neighbor to be always indexed using the source IP address regardless\n of th link type. For point-to-point and virtual links, this causes the lookup\n for the pseudo neighbor to always fail because the lookup is done using the\n router id whereas the neighbor was added using its source IP address.\n This becomes really problematic if there is a state change that requires a\n rebuild of nbr_self, changing the router id for example. When resetting\n nbr_self, the router first tries to remove the pseudo neighbor form its\n neighbor list on each link by looking it up and resetting any references to it\n before freeing the neighbor structure. since the lookup fails to retrieve any\n references in the case of point-to-point and virtual links the neighbor\n structure is freed leaving dangling references to it. Any access to the\n neighbor list after that is bound to stumble over this dangling pointer\n causing ospfd to crash.\n\nSigned-off-by: Jafar Al-Gharaibeh \u003cjafar@atcorp.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "5e57b5fc621300427d3818f0723b8cd8d5e5ca6a",
      "tree": "738345e0c3121f329266e8b8faaa88661e7cdb2e",
      "parents": [
        "e3f623be8b6556db9d70c2fc5d3c2b152f36dc1d"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Mar 11 16:28:34 2016 -0500"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Mar 11 18:29:14 2016 -0500"
      },
      "message": "quagga: Remove double read of stream\n\nThe addition of a MIN(X,Y) with a stream_getc in the Y\ncauses a double read of the stream due to the way that\nMIN is defined.\n\nThis fix removes a crash in all protocols.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "bf83fa25f1bddec6f09ad879cba5e975a3ae5495",
      "tree": "a01a0137a4193d2d33d61bb43c113afef3e421a6",
      "parents": [
        "2db962760426ddb9e266f9a4bc0b274584c819cc"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Feb 09 15:23:03 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Tue Mar 08 17:53:22 2016 +0000"
      },
      "message": "lib: Check prefix length from zebra is sensible\n\n* zclient.c: prefix length on router-id and interface address add\n  messages not sanity checked.  fix.\n\n* */*_zebra.c: Prefix length on zebra route read was not checked, and\n  clients use it to write to storage.  An evil zebra could overflow\n  client structures by sending overly long prefixlen.\n\nPrompted by discussions with:\n\nDonald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "693da6096a28eef5eadeea699771265987b3ec0c",
      "tree": "528464933b04751a44ea4a972461ac4b666e621b",
      "parents": [
        "36fef5708d074a3ef41f34d324c309c45bae119b"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Dec 16 14:22:11 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:47 2016 +0000"
      },
      "message": "ospfd: Remove HAVE_OSPF_TE\n\nRemove from ospf the HAVE_OSPF_TE define and just always have\nospf traffic engineering.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nTested-by: NetDEF CI System \u003ccisystem@netdef.org\u003e\n"
    },
    {
      "commit": "36fef5708d074a3ef41f34d324c309c45bae119b",
      "tree": "4c8cbcf99823d92fcbe94165fe210908d402b6af",
      "parents": [
        "2e320423337c628bfeb814ec15fd5f575ebc5eed"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Dec 16 14:22:10 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:47 2016 +0000"
      },
      "message": "ospfd: Remove HAVE_OPAQUE_LSA\n\nHAVE_OPAQUE_LSA is used by default and you have to actively turn it off\nexcept that OPAQUE_LSA is an industry standard and used pretty much\neverywhere.  There is no need to have special #defines for this anymore.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "9099f9b2a66e86f8a90d7fe18f61bd2bb1bc6744",
      "tree": "1ce5d2e4ecff6b57eb00d40b1a91b3f363ff35fe",
      "parents": [
        "954c7d6bcd04c2cf037965adda0f9d11afdcd165"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Mon Jan 18 10:12:10 2016 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@hpe.com",
        "time": "Fri Feb 26 14:11:46 2016 +0000"
      },
      "message": "*: use an ifindex_t type, defined in lib/if.h, for ifindex values\n"
    },
    {
      "commit": "283596fd6d49a5b2861a6923db9a88628ef0eca4",
      "tree": "1b461a1fea8840efaafd1250f729831be91fea9f",
      "parents": [
        "be62b17c736ea06181f2788e3011066830555610",
        "fc1c114aab24fe47bc6a1976c1c602d507fa4e69"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "message": "Merge \u0027patch-tracking/4/proposed/netdef-solaris\u0027 into accepted\n"
    },
    {
      "commit": "5c1791f28e2e831e4e9b92c3c2f7d8ed832cb968",
      "tree": "1b00973425f350e92ca6f5cf5498ad937004fe5a",
      "parents": [
        "13862bfc779f6f63080c8d860f7b919b27f39b9c"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Fri Apr 25 14:36:16 2014 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 11:00:29 2015 +0000"
      },
      "message": "ospfd: PointToPoint neighbors are identified by router ID\n\nAccording to RFC 2328, section 10.5  PointToPoint neighbors\nshould be identified by router ID instead of source IP address.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\n"
    },
    {
      "commit": "13862bfc779f6f63080c8d860f7b919b27f39b9c",
      "tree": "b16fe03a4d8fd91a0d1de9afdf1232deacff299d",
      "parents": [
        "8a667cf7c58a065bcd6371f4ad6f25bfb084181c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Oct 20 13:47:09 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:59:52 2015 +0000"
      },
      "message": "Revert \"Fix to take care of ordering between interface and router ospf command.\"\n\nThis reverts commit 4bab6806914dbb4b43f376ebf966a034a0ea72cd, as Joakim\u0027s\nversion of \u0027ip ospf area\u0027 and the 2 follow-up patches should avoid the issue\nVipin reported.\n\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\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": "738bce789a393efe2d3f35fd541cf149dd7f9311",
      "tree": "3e81ad62d8f9531b55845ee781436bceb7e76fec",
      "parents": [
        "7bd7f55d2cbb4ddd2353fe8f2ded4853b3d2676b"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Fri Aug 07 13:48:15 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:59:02 2015 +0000"
      },
      "message": "ospfd: Impl. per interface \u0027ip ospf area\u0027 command\n\nUse with interface command:\n interface ppp0\n ip ospf area 0.0.0.0\nThis will enable OSPF on ppp0 with area 0.0.0.0\n\nRemove with \"no ip ospf area\"\n\n* ospf_vty.c: add \"ip ospf area (A.B.C.D|\u003c0-4294967295\u003e)\" interface command\n\n* ospfd.c: (ospf_interface_{un,}set) new helper function to enable/disable\n  OSPF on a specific interface.\n  (ospf_if_update) 2 possible paths now to deal with interface updates.\n\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7bd7f55d2cbb4ddd2353fe8f2ded4853b3d2676b",
      "tree": "2dbcd2d8d0b5f947c1c7fab5ebbb6e642a005a65",
      "parents": [
        "774914f4223532256051bd6dd61cac20e8f9649f"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Fri Aug 07 13:48:15 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:54:42 2015 +0000"
      },
      "message": "ospfd: split up network interface enable a bit, for per-interface area cmd\n\n* ospfd.c: (ospf_network_run_interface) Move out core to ..\n  (add_ospf_interface) .. here\n  (ospf_network_{un,}set) move redistribute update out to..\n  (update_redistributed) .. here, so it can be re-used in upcoming commit.\n\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7125293d65d73a451ec203c8c1630c236171f5a3",
      "tree": "f9d118c9a8f8374d69fb9c75c87531a2ca478fb2",
      "parents": [
        "fd1c1a133af47ae5533a5ed41b73ff62e7aa1058"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Sep 24 09:25:19 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:21 2015 +0000"
      },
      "message": "lib: zclient.c remove extern struct thread_master *\n\nzclient.c depended upon link time inclusion of a\nextern struct thread_master *master.  This is a violation of the\nnamespace of the calling daemon.  If a library needs the pointer\npass it in and save it for future use.\n\nThis code change also makes the zclient code consistent with\nthe other lib functions that need to schedule work on your behalf\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "5181a0296687a6004dd00c7c0874886c9ff0bf60",
      "tree": "f7c4fb6596af18dabc52513e17febf2e2e213c22",
      "parents": [
        "6d9362274e8ba2d57ffe17aa735eb941ac3d5fbc"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 03:00:09 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "*: fix in_addr initialisers\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d8d5c60ecfab4dd609a07b4baa00d735f59002b9",
      "tree": "e4b331c785e947a1a9685d2767ae656e2c2edbb9",
      "parents": [
        "cbc3f5232af5cacd6f88f2124c864bb91e851cde"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:19:46 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "build: make libraries self-reliant\n\nlibospf and libospfclient both need libzebra, so they should link\nagainst it. The days of libtool propagating upwards such dependencies\nare nearing their end...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ce93c34d51ea30d1ba4f699af5601502bbbbcdf8",
      "tree": "23b0233a0a7517a9ab5533e96c3fc009b7351c22",
      "parents": [
        "089e5eb7310683be6806726dbf7b7c94b1b66bfb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 02:11:45 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "ospfd: fix unused warning in ospf_write\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0bc874b88cf86fca4b18f3672a441ed142fc499d",
      "tree": "35781fe9f0d71c7df85fe07c3461553eb4901215",
      "parents": [
        "fbc3e97d747862fd47f711c9f15b8166bdf94b18"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Jul 29 19:16:13 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "build/arm: Arm compilation warning fix\n\nThe arm cross compiler is issuing warnings for signed/unsigned\ncomparisons for ntohs.  ntohs returns a unsigned int, while\nthe counting variables are signed.  Fixed to allow -Werror\nto work properly\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "b6404390a713144252b62f49a328315d1952c6d8",
      "tree": "5a1662864effa82f5ed60b853401407d3d73ed9e",
      "parents": [
        "b075e8728f650b0850e20fdf8dde467440a24b28"
      ],
      "author": {
        "name": "Fernando Soto",
        "email": "fsoto@bluecatnetworks.com",
        "time": "Mon May 11 20:52:00 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "ospfd: trap on state change seems to send incorrect value for ospfNbrState\n\nThe ospfNbrState in the ospf trap sent from ospfd shows an incorrect state.\n\nFor example, when the connection goes down, the ospfNbrState in the trap is\nsent as \u00278\u0027 (full).  When the connection is reestablished, the state is sent\nas \u00277\u0027 (loading).\n\nThe reason seems to be that the trap is sent from nsm_notice_state_change()\nbefore the state is actually updated by calling nsm_change_state().\n\nAfter applying the attached patch, the traps are sent with nbrState \u00271\u0027 when\nthe connection goes down and \u00278\u0027 when it goes back up.\n\nBugzilla #833 https://bugzilla.quagga.net/show_bug.cgi?id\u003d833\n"
    },
    {
      "commit": "b075e8728f650b0850e20fdf8dde467440a24b28",
      "tree": "62966835f757e550e6e78e08611f3b4f49a64ecd",
      "parents": [
        "2ef762ed9b88e5745012c5829f8f526c95443ddf"
      ],
      "author": {
        "name": "Vystoropskyi, Sergii",
        "email": "vistorop@amazon.com",
        "time": "Sun Aug 16 13:25:36 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "ospfd: Fix for \u0027no\u0027 + \u0027debug command\u0027 does not disable \u0027debug command\u0027\n\n\"no debug ospf packet all detail\" does not cancel \"debug ospf packet all detail\"\ndue to the code inconsistency in setting/unsetting debug flags.\n\n* ospf_dump.c: added missing flags.\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "2ef762ed9b88e5745012c5829f8f526c95443ddf",
      "tree": "8b2867c9c5938551f7e86881104dad61be3f18b6",
      "parents": [
        "c920e510d09c6c4ab63a3da5375009442a950f82"
      ],
      "author": {
        "name": "Michael Rossberg",
        "email": "michael.rossberg@tu-ilmenau.de",
        "time": "Mon Jul 27 07:56:25 2015 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "ospfd: Fast OSPF convergence\n\nWhen considering small networks that have extreme requirements on\navailability and thus convergence delay, the timers given in the OSPF RFC\nseem a little “conservative”, i.e., the delay between accepted LSAs and the\nrate at which LSAs are sent.  Cisco introduced two commands \u0027timers throttle\nlsa all’ and \u0027timers lsa arrival’, which allow operators to tune these\nparameters.\n\nI have been writing a patch to also support \u0027timers lsa arrival’ fully and\n‘timers throttle lsa all’ (without the throttling part) also in quagga.\n"
    },
    {
      "commit": "c920e510d09c6c4ab63a3da5375009442a950f82",
      "tree": "4ef39abc6d53eed748cd7898621dae21a776e550",
      "parents": [
        "794c4735f81289d9fc603b5fd5e4a5d39dbb5ca5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Sep 08 15:31:45 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "ospfd: Fix bug in 94266fa822ba, nbr_self rebuild didn\u0027t add valid nbr_self\n\n* 94266fa822ba \"ospfd: Self nbrs needs to be rebuilt when router ID changes.\"\n  deleted the nbr_self, and added it back, but ospf_nbr_add_self doesn\u0027t\n  actually create the nbr_self - it assumes it\u0027s already there. Leading\n  to use after free and crashes after a router-id change.\n* ospfd/ospf_neighbor.{c,h}: (ospf_nbr_self_reset) Little helper to reset the\n  nbr_self correctly.\n* ospf_interface.c: (ospf_if_cleanup) moved code to ospf_nbr_self_reset\n* ospfd.c: (ospf_router_id_update) Use ospf_nbr_self_reset instead of doing\n  the reset badly, fixing 94266fa822ba.\n"
    },
    {
      "commit": "a29c8a23a35b3f94c6aea5b3b7578b5dbf81ad71",
      "tree": "3308184cd4316dcf42a496ff16e0ea2dad8f15d5",
      "parents": [
        "52c0bc739b1184621525e64720b944268d6b0eeb"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Mon Sep 21 10:26:02 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "Revert \"ospfd: Use route_node_lookup() instaed of route_node_get()\"\n\nThis reverts commit c9b07581e0df8867499e97e08b382b6d3cc9c4c4.\n\nSee: http://patchwork.quagga.net/patch/410/\n"
    },
    {
      "commit": "c9b07581e0df8867499e97e08b382b6d3cc9c4c4",
      "tree": "5cf4a31ba7e152a706a72b32b32939d265e8d426",
      "parents": [
        "8b84c2762ccd2d47a115824ee083d33e697a7741"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:11 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 04 16:39:27 2015 +0100"
      },
      "message": "ospfd: Use route_node_lookup() instaed of route_node_get()\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\n"
    },
    {
      "commit": "4de398e3b676bcf041984e285dba12f229215419",
      "tree": "e06791bda93d63d30f9187c5df8064f0f1fa9f29",
      "parents": [
        "4eaecdc403461fe59026e1ce3a217526d75eca25"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:14 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:43:08 2015 +0100"
      },
      "message": "ospfd: ospf_nbr_nbma_set()/ospf_snmp_vl_add() add unlock\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "4eaecdc403461fe59026e1ce3a217526d75eca25",
      "tree": "fcb6ae38db620f25a5931a1867c48c0396d5d564",
      "parents": [
        "fc363cd8a02ad1ac8a6ca57013fd8c531d45926a"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:13 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:43:03 2015 +0100"
      },
      "message": "ospfd: ospf_ls_upd_send() add missing unlock.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "fc363cd8a02ad1ac8a6ca57013fd8c531d45926a",
      "tree": "fc821d3992d87c8b85d244ceece7f004f8a06f72",
      "parents": [
        "d5643f5a477e099a3dcae4a707ccb5ca66bfee66"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:12 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:42:58 2015 +0100"
      },
      "message": "ospfd: ospf_ase.c, external_lsa locking fixes.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "d5643f5a477e099a3dcae4a707ccb5ca66bfee66",
      "tree": "9c82ee88bc3173ca327f392e13862300d76f6148",
      "parents": [
        "fbb6c8650344fe72d39f538c681659e8b76a39d0"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:10 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:42:54 2015 +0100"
      },
      "message": "ospfd: Move route_unlock_node() in ospf_ase_incremental_update()\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "fbb6c8650344fe72d39f538c681659e8b76a39d0",
      "tree": "0b896f15681a030f69d42ab7b8c061c0ee3627b5",
      "parents": [
        "94266fa822baf9b9c9e10ac03ccec8ccf3ce0c98"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Mar 08 13:58:09 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:42:45 2015 +0100"
      },
      "message": "ospfd: add missing unlock for ospf_interface_address_delete()\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "94266fa822baf9b9c9e10ac03ccec8ccf3ce0c98",
      "tree": "61cc2746b57155d6ba932aa6bdde44a40cb8d4e8",
      "parents": [
        "7f56743f7d4b3dcdae329de2de2aba820368c3d9"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Thu Nov 19 15:27:30 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jul 29 21:40:32 2015 +0100"
      },
      "message": "ospfd: Self nbrs needs to be rebuilt when router ID changes.\n\nSome self nbrs are identified by router_id, these needs\nto be rebuilt instead of just resetting router ID.\nPossibly one could optimize for !(virtual | ptop) links\nby doing oi-\u003enbr_self-\u003erouter_id \u003d router_id instead.\n\nRouter ID will change once after startup config has been\nread and zebra reports router ID, unless router ID has\nbeen configured in ospf.\n"
    },
    {
      "commit": "c99f3481a598e9cadd1de96714f6b5df9ad85c4a",
      "tree": "aac6df566f28c13fce5c9f02275f159fab73a24d",
      "parents": [
        "758fb8f99a7bfac3d31c419fd1a5694fc5f33f6a"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Oct 16 09:52:36 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 10:24:12 2015 +0200"
      },
      "message": "*: add VRF ID in the API message header\n\nThe API messages are used by zebra to exchange the interfaces, addresses,\nroutes and router-id information with its clients. To distinguish which\nVRF the information belongs to, a new field \"VRF ID\" is added in the\nmessage header. And hence the message version is increased to 3.\n\n* The new field \"VRF ID\" in the message header:\n\n    Length    (2 bytes)\n    Marker    (1 byte)\n    Version   (1 byte)\n    VRF ID    (2 bytes, newly added)\n    Command   (2 bytes)\n\n  - Client side:\n\n    - zclient_create_header() adds the VRF ID in the message header.\n    - zclient_read() extracts and validates the VRF ID from the header,\n      and passes the VRF ID to the callback functions registered to\n      the API messages.\n    - All relative functions are appended with a new parameter \"vrf_id\",\n      including all the callback functions.\n    - \"vrf_id\" is also added to \"struct zapi_ipv4\" and \"struct zapi_ipv6\".\n      Clients need to correctly set the VRF ID when using the API\n      functions zapi_ipv4_route() and zapi_ipv6_route().\n    - Till now all messages sent from a client have the default VRF ID\n      \"0\" in the header.\n    - The HELLO message is special, which is used as the heart-beat of\n      a client, and has no relation with VRF. The VRF ID in the HELLO\n      message header will always be 0 and ignored by zebra.\n\n  - Zebra side:\n\n    - zserv_create_header() adds the VRF ID in the message header.\n    - zebra_client_read() extracts and validates the VRF ID from the\n      header, and passes the VRF ID to the functions which process\n      the received messages.\n    - All relative functions are appended with a new parameter \"vrf_id\".\n\n* Suppress the messages in a VRF which a client does not care:\n\n  Some clients may not care about the information in the VRF X, and\n  zebra should not send the messages in the VRF X to those clients.\n\n  Extra flags are used to indicate which VRF is registered by a client,\n  and a new message ZEBRA_VRF_UNREGISTER is introduced to let a client\n  can unregister a VRF when it does not need any information in that\n  VRF.\n\n  A client sends any message other than ZEBRA_VRF_UNREGISTER in a VRF\n  will automatically register to that VRF.\n\n  - lib/vrf:\n\n    A new utility \"VRF bit-map\" is provided to manage the flags for\n    VRFs, one bit per VRF ID.\n\n    - Use vrf_bitmap_init()/vrf_bitmap_free() to initialize/free a\n      bit-map;\n    - Use vrf_bitmap_set()/vrf_bitmap_unset() to set/unset a flag\n      in the given bit-map, corresponding to the given VRF ID;\n    - Use vrf_bitmap_check() to test whether the flag, in the given\n      bit-map and for the given VRF ID, is set.\n\n  - Client side:\n\n    - In \"struct zclient\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          default_information\n      These flags are extended for each VRF, and controlled by the\n      clients themselves (or with the help of zclient_redistribute()\n      and zclient_redistribute_default()).\n\n  - Zebra side:\n\n    - In \"struct zserv\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          redist_default\n          ifinfo\n          ridinfo\n\n      These flags are extended for each VRF, as the VRF registration\n      flags. They are maintained on receiving a ZEBRA_XXX_ADD or\n      ZEBRA_XXX_DELETE message.\n\n      When sending an interface/address/route/router-id message in\n      a VRF to a client, if the corresponding VRF registration flag\n      is not set, this message will not be dropped by zebra.\n\n    - A new function zread_vrf_unregister() is introduced to process\n      the new command ZEBRA_VRF_UNREGISTER. All the VRF registration\n      flags are cleared for the requested VRF.\n\n  Those clients, who support only the default VRF, will never receive\n  a message in a non-default VRF, thanks to the filter in zebra.\n\n* New callback for the event of successful connection to zebra:\n\n  - zclient_start() is splitted, keeping only the code of connecting\n    to zebra.\n\n  - Now zclient_init()\u003d\u003ezclient_connect()\u003d\u003ezclient_start() operations\n    are purely dealing with the connection to zbera.\n\n  - Once zebra is successfully connected, at the end of zclient_start(),\n    a new callback is used to inform the client about connection.\n\n  - Till now, in the callback of connect-to-zebra event, all clients\n    send messages to zebra to request the router-id/interface/routes\n    information in the default VRF.\n\n    Of corse in future the client can do anything it wants in this\n    callback. For example, it may send requests for both default VRF\n    and some non-default VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "126215c1238eb42cc92d23aefbe1fac3b204438f",
      "tree": "22910b50f39003e297efc6236711581cbf3b2ada",
      "parents": [
        "2fc97f6335dd5d7df2c285b363c6ef56bb98dcf8"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:58 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "*: call if_init()/if_terminate() from vrf_init()/vrf_terminate()\n\nLater, an interface will belong to a specific VRF, and the interface\ninitialization will be a part of the VRF initialization. So now call\nif_init() from vrf_init(), and if_terminate() from vrf_terminate().\n\nDaemons have the according changes:\n- if if_init() was called or \"iflist\" was initialized, now call\n  vrf_init() instead;\n- if if_terminate() was called or \"iflist\" was destroyed, now call\n  vrf_terminate() instead.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "219cdc95d93eda93240d472814ef4aa8bd36b039",
      "tree": "9f39dc298398ff012dc2243ec40a9a4bd4af3d05",
      "parents": [
        "f1fc327c7eb00634d2c2b08c2a6f6e44a626ef04"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Jan 23 16:43:49 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu May 14 18:09:55 2015 +0100"
      },
      "message": "ospfd: Remove another odd flooding hack in opaque LSA code\n\n* ospf_opaque.c: (ospf_opaque_adjust_lsreq) Odd hack to general OSPF\n  database exchange but made to act only on opaque LSAs. It\u0027s either covering\n  up bugs in the flooding code or its wrong. If it\u0027s covering up bugs, those\n  would affect all LSAs and should be fixed at a lower layer in ospfd, indeed\n  perhaps those bugs are long fixed anyway (?). Alternatively, it\u0027s just plain\n  wrong. Nuke.\n  (ospf_opaque_exclude_lsa_from_lsreq) helper to above, nuke.\n* ospf_packet.c: Nuke call to ospf_opaque_adjust_lsreq.\n\nTested-by: olivier.dugeon@orange.com\n"
    },
    {
      "commit": "e66cbd10d52a79fd61acab9d615683eebdbf1df5",
      "tree": "e81be2319e7b2c485354283f025e090bb56c8754",
      "parents": [
        "4584c239201037648abf1a6615186f9cdeb86b23"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Apr 13 10:21:34 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 15:06:22 2015 +0200"
      },
      "message": "lib: hide internal prefix list structures\n\nThese are about to be touched and there\u0027s no point in other code\ntouching into prefix list\u0027s internas.  Add some isolation.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e30677a5537f67e37938954cf7347e9a9c0b922d",
      "tree": "0fe90b1574293ff61d3088aef2e6b3b1b03170a0",
      "parents": [
        "e1bcd4741c24ff990a9413ead9a9e37b80153046"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Jan 20 15:45:36 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue May 05 13:02:11 2015 +0100"
      },
      "message": "ospfd: Remove the blocking of opaque LSAs origination \u0026 flooding \u0027optimisation\u0027\n\n* Opaque support contains some kind of hack/optimisation to\n  origination/flooding to suppress some origins/floods until an opaque LS\n  Acks are received.  Previous versions of the code have already been shown\n  to have bugs in them (see e16fd8a5, e.g.). It seems over-complex and fragile,\n  plus its conceptually the wrong place to try implement flooding hacks that,\n  AFAICT, do not depend particularly on the semantics of opaque LSA.\n\n  Nuke.\n\nTested-by: Olivier Dugeon \u003colivier.dugeon@orange.com\u003e\n"
    },
    {
      "commit": "e1bcd4741c24ff990a9413ead9a9e37b80153046",
      "tree": "945ee904f65bc18eb3c2d03f6dd225e9d3b25938",
      "parents": [
        "10bac80195cf5a781da6e4415e6580fd7080f734"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 16:41:10 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue May 05 12:51:43 2015 +0100"
      },
      "message": "ospfd: Make ospf_passive_interface_update calls friendly to static analysis\n\n* ospf_vty.c: ({no_}ospf_passive_interface_addr_cmd) To a static analyser,\n  the call to ospf_passive_interface_update can look like uninitialised memory\n  in addr might be read from. It won\u0027t be, as ospf_passive_interface_update\n  only reads addr if params !\u003d IF_DEF_PARAMS, but not clear. Split up the\n  helper into the two cases to make it clear.\n"
    },
    {
      "commit": "c0bedebfe9ca1a1ded02f1f481762dd41defa63e",
      "tree": "9c040f71733fb7509c03457bc146373e65e95536",
      "parents": [
        "3a7e83c2387885075c9ecf1912dd6c9399c6947a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 10:00:43 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:33 2015 +0200"
      },
      "message": "build: add --enable-werror\n\nThis allows enabling -Werror in a consistent way.  Note that this is\ndifferent from just specifiying it in CFLAGS, since that would either\nbreak configure tests (if done on ./configure), or would override\nconfigure\u0027s CFLAGS (if done on make).\n\nUsing --enable-werror instead provides a new WERROR variable that is\nadditionally used during make with a consistent set of warning flags.\n\nThe tests/ directory is exempt.  (Rationale being, better to have more\ntests than pedantically complain about them.)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "dfee58f1d41a2e36c7f5f38a3ef5712224131824",
      "tree": "10e588443180a85a6ac019db1ded6b1144f32a7c",
      "parents": [
        "6769f43de9d595b935f2ebf1cae1428e1d1a3a5f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Mar 04 06:44:57 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:10 2015 +0200"
      },
      "message": "snmp: fix warnings\n\nbatch-fix all warnings that come up when enabling AgentX SNMP support.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ab90fc04a57b7b1d93ccddb8c9fbbf339a7ffc4c",
      "tree": "7c75add9b86f59da16d636e963402494dfbf6ecd",
      "parents": [
        "388f8857eb81ef75014060976776523a58a99389"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:07:25 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "*: add/cleanup initialisers\n\nThere were some (inconsequential) warnings about uninitialised use of\nvariables.  Also, in one case, sub-structs were mixed in initialisation,\nwhich doesn\u0027t quite work as intended.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "eed3c48d3a7d2dae2cae2f2f250deffb843754a6",
      "tree": "07b2252438225065024d4a534eddf0e86c9b87a4",
      "parents": [
        "ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:51:53 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:31 2015 +0200"
      },
      "message": "*: use void * for printing pointers\n\nOn higher warning levels, compilers expect %p printf arguments to be\nvoid *.  Since format string / argument warnings can be useful\notherwise, let\u0027s get rid of this noise by sprinkling casts to void *\nover printf calls.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242",
      "tree": "036d3b4c7bc0071f045bc1cb3a54c422dffc1806",
      "parents": [
        "ec62e1438ece9af0546f9028aa1403f2c84bf177"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:48:11 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Apr 19 20:40:19 2015 +0200"
      },
      "message": "*: use long long to print time_t\n\nSince we can\u0027t assume time_t to be long, int, or even long long, this\nconsistently uses %lld/long long (or %llu/unsigned long long in a few\ncases) to print time_t/susecond_t values.  This should fix a bunch of\nwarnings, on NetBSD in particular.\n\n(Unfortunately, there seems to be no \"PRId64\" style printing macro for\ntime_t...)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "237aac56960575f6ad2451ba2796d94bd5ae4b33",
      "tree": "f23c49fa32bc6b706bd5f37a9a3a45ce27adf15d",
      "parents": [
        "b6fa76098d127f5641a7dda0dee21f06ca167edb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 22:23:10 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:14 2015 +0100"
      },
      "message": "build: get rid of INCLUDES, use AM_CPPFLAGS\n\nINCLUDES in configure.ac was not used at all, and INCLUDES in\nMakefile.am is supposed to be AM_CPPFLAGS these days.\n\nReduces warnings spewed during bootstrap/autoreconf.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "86ce951e349fd08d1ba2c66f5f6d07756689422a",
      "tree": "a59185a0ae4900f2935e3a096a4e2ce920985290",
      "parents": [
        "cb4fc59c8a0f9df81109d38acbeaab5627e361f5"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Thu Jan 08 01:39:18 2015 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 21:54:01 2015 +0100"
      },
      "message": "ospfd: set O-bit in the option of all DD packets\n\nIf opaque-capability is enabled, we must set the O-bit in\nthe option field of all DD packets. Changing the option\nfield of DD packets may cause the peer to reset the state\nback to ExStart.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "149210656045c363d8f59b97ad9251b0c06a15df",
      "tree": "e107766b6b3ae49d7e8a7190cb3aa1e382a43f87",
      "parents": [
        "1c6db0d2da34044ddfb42665fda8a3387ecc451d"
      ],
      "author": {
        "name": "Olivier Dugeon",
        "email": "olivier.dugeon@orange.com",
        "time": "Mon Nov 03 14:59:06 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jan 27 19:53:24 2015 +0000"
      },
      "message": "ospfd: Fix initial Opaque LSA DB  synchronisation\n\nospfd has issues resynchronising its Opaque LSA DB with neighbours after restart\nor interface events. The problem comes from opaque_lsa.c code that blocks\nsubsequent opaque LSA flooding until the neighbour router acknowledge that, and\nremoves the old opaque LSA from its LSDB. The bug comes from the fact that the\nlock is never release, thus avoiding subsequent opaque LSA flooding.\n\nMore detail about the bugs and its solution is describeid in file\ndoc/te-link-params.md\n\nSigned-off-by: Olivier Dugeon \u003colivier.dugeon@orange.com\u003e\n"
    },
    {
      "commit": "4bab6806914dbb4b43f376ebf966a034a0ea72cd",
      "tree": "3b5e1cc5217bef269184e30795314de6ba8fafe5",
      "parents": [
        "ad5233a1bcdd7124992300673ad9c1035336eadd"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Tue Sep 30 14:32:22 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:04 2014 +0000"
      },
      "message": "Fix to take care of ordering between interface and router ospf command.\n\nSYMPTOM:\n\nInterface mode OSPF area configuration is not retained after restarting quagga.\n\nExample -\n\nquagga(config)# interface swp49\nquagga(config-if)# ip ospf area 0.0.0.0\n\nquagga# sh run\n\u003csnip\u003e\ninterface swp49\n ip ospf area 0.0.0.0\n ipv6 nd suppress-ra\n link-detect\n!\n\nquagga# write memory\n\n* Restart quagga at this point*\n\nquagga# sh run\n\u003csnip\u003e\ninterface swp49\n ipv6 nd suppress-ra\n link-detect\n!\n\nISSUE:\n\nThe issue is that the interface mode commands can reach the OSPF process even\nbefore \u0027router ospf\u0027 command that initializes the default OSPF instance, this\nis not getting handled properly in OSPF process.\n\nFIX:\n\nInitialize the default OSPF instance during OSPF process initializations, which\nis before \u0027router ospf\u0027 command is received in OSPF process. So, when interface\nmode command is received, it is guaranteed to have ospf instance to work with.\n\nOther way could be to call ospf_get() instead of ospf_lookup() while processing\nthe config command callbacks, although OSPF needs to have at least one instance\nstructure anyways, therefore calling it unconditionally in OSPF initializations\nshould be fine too.\n\nThere could be more elaborate fix(es) possible to handle this, like adding some\nordering mechanism for commands as they are read by a process, or storing the\nreceived command and applying it after the commands its dependent upon are\nprocessed. For the issue at hand, initializing the default instance in main()\nserves the purpose well.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8306be211f1bcd5a19e74d08cde399e1b518ed25",
      "tree": "6423afa35f2cebf24888c2a4b089399b05a9c895",
      "parents": [
        "6d831139569dbee69acc631361db917e2c47feeb"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 14:11:17 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:47 2014 +0000"
      },
      "message": "OSPFd: Update timestamps when we MaxAge LSAs.\n\nWhen an LSA is flushed we need to update the timestamps for them. This\nallows for the node to give the neighbor sufficient time to send back\nan acknowledgement before retransmission kicks in.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: James Li \u003cjli@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6d831139569dbee69acc631361db917e2c47feeb",
      "tree": "ba38e9354ffcc98245b03a5f50ef0e3cedb48d47",
      "parents": [
        "1c06334f51c00471b0731227384ef42dc463db54"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 16:05:15 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:47 2014 +0000"
      },
      "message": "ospfd: Tweak previous iface RR write patch to avoid free/malloc \u0026 redundant log\n\n* linklist.{c,h}: (listnode_move_to_tail) new unction to move a\n  listnode to tail of list.\n* ospf_packet.c: (ospf_write) remove debug that seemed to be mostly covered\n  by existing debug.\n  Use listnode_move_to_tail to just move the list node to the end of the\n  tail, rather than freeing the one to hand and allocing a new one.\n"
    },
    {
      "commit": "1c06334f51c00471b0731227384ef42dc463db54",
      "tree": "3a33a5515485c44fec45060c3c0a5e4b4d5f826d",
      "parents": [
        "56a5f7752d9bf7297ea022544112909cf2ccba97"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 13:04:45 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:42 2014 +0000"
      },
      "message": "Avoid timing out of adjacencies by serving all interfaces in round-robin.\n\nEnsure that all interfaces are served in a round robin fashion during\nwrite. This prevents adjacencies from timing out when you have a lot of LSAs\nto be sent out each adjacency. This is essentially a scalability improvement.\n\nSigned-off-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b6eef003e1a79471addea0b01853b08aed812cc8",
      "tree": "f17d70ed70ae856650e342b62010f31537d8dd75",
      "parents": [
        "50f38b3500a6af6e1b0d1389d65c62d70c41e8c2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 14:19:51 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:16 2014 +0000"
      },
      "message": "ospfd: Some small tweaks to the SPF execution reason patch\n\n* ospf_spf.h: use an enum for the reason, and have it as a new argument to\n  ospf_spf_calculate_schedule, no need for additional call, and let compiler\n  do the checking.\n* ospf_spf.c: format changes - Quagga coding style places function names\n  at the start of a new line, for easy grepping for definition.\n  (ospf_spf_calculate_timer) Change the log format of SPF execution time to\n  avoid ginormous line, and make logging conditional, as is the norm.\n"
    },
    {
      "commit": "50f38b3500a6af6e1b0d1389d65c62d70c41e8c2",
      "tree": "0525b14ce3c53f891cd7f5a00fcf954f4893a99f",
      "parents": [
        "88d37b902bc8127379d3293b9671aa6a11479c23"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:53:28 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:09 2014 +0000"
      },
      "message": "Compute and display SPF execution statistics\n\nDetailed SPF statistics, all around time spent executing various pieces of SPF\nsuch as the SPF algorithm itself, installing routes, pruning unreachable networks\netc.\n\nReason codes for firing up SPF are:\nR - Router LSA, N - Network LSA, S - Summary LSA, ABR - ABR status change,\nASBR - ASBR Status Change, AS - ASBR Summary, M - MaxAge\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6b274d90fa9b0c9f43e3ca9494cd78df1ccad14e",
      "tree": "7a2ca655111570d40615bb2fedaef56d7859e655",
      "parents": [
        "3790eb0d3f0bbb24b9c6be97f547cec144ee05d1"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Tue Mar 09 06:42:30 2010 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 16:24:08 2014 +0100"
      },
      "message": "ospfd: Don\u0027t leave stale RouterLSA\u0027s when changing areaID\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "ea2a598411cc7bd20456849e56bbc9e93c9916e7",
      "tree": "e1825968b9d0f7208b93944980331179456b7625",
      "parents": [
        "969d3550a8cbb07f8b4d5ebe8dde5064f8260140"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Thu Nov 26 12:23:07 2009 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 15:57:59 2014 +0100"
      },
      "message": "ospfd: invalid MD5 auth_key?\n\nThis looks fishy in ospf_make_md5_digest()\nif (list_isempty (OSPF_IF_PARAM (oi, auth_crypt)))\n    auth_key \u003d (const u_int8_t *) \"\";\n...\nMD5Update(\u0026ctx, auth_key, OSPF_AUTH_MD5_SIZE);\nauth_key points to a \"\" string of len 1 which is a lot\nsmaller that OSPF_AUTH_MD5_SIZE. Is this intentional to\nget some random data or just a plain bug?\n\nAnyone using MD5 should have a closer look and decide\nwhat to do.\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49",
      "tree": "bd4a8d881336a1551146725d7ae06b3e68553e4d",
      "parents": [
        "010ebbbca6396f272cc2d50d147dd922dda68213"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 14:42:23 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:32:34 2014 +0100"
      },
      "message": "Fix most compiler warnings in default GCC build.\n\nFix lots of warnings. Some const and type-pun breaks strict-aliasing\nwarnings left but much reduced.\n\n* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to\n  (struct fifo), so just use that.  Makes it clearer the beginning of\n  (struct bgp_advertise) is compatible with with (struct fifo), which seems\n  to be enough for gcc.\n  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up\n  type-punning breaks strict aliasing warnings.\n* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.\n  (bgp_route_refresh_receive) fix an interesting logic error in\n  (!ok || (ret !\u003d BLAH)) where ret is only well-defined if ok.\n* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.\n* jhash.{c,h}: Can take const on * args without adding issues \u0026 fix warnings.\n* libospf.h: LSA sequence numbers use the unsigned range of values, and\n  constants need to be set to unsigned, or it causes warnings in ospf6d.\n* md5.h: signedness of caddr_t is implementation specific, change to an\n  explicit (uint_8 *), fix sign/unsigned comparison warnings.\n* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going\n  to fly given iov_base.\n* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always\n  true for address of static variable.  Correct but pointless warning in\n  this case, but use a 2nd pointer to shut it up.\n* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2\n  different 32 bit IDs into in (struct ospf6_route), and the resulting\n  type-pun strict-alias breakage warnings this causes.  Need to use 2\n  different fields to fix that warning?\n\ngeneral:\n\n* remove unused variables, other than a few cases where they serve a\n  sufficiently useful documentary purpose (e.g.  for code that needs\n  fixing), or they\u0027re required dummies.  In those cases, try mark them as\n  unused.\n* Remove dead code that can\u0027t be reached.\n* Quite a few \u0027no ...\u0027 forms of vty commands take arguments, but do not\n  check the argument matches the command being negated.  E.g., should\n  \u0027distance X \u003cprefix\u003e\u0027 succeed if previously \u0027distance Y \u003cprefix\u003e\u0027 was set?\n  Or should it be required that the distance match the previously configured\n  distance for the prefix?\n  Ultimately, probably better to be strict about this.  However, changing\n  from slack to strict might expose problems in command aliases and tools.\n* Fix uninitialised use of variables.\n* Fix sign/unsigned comparison warnings by making signedness of types consistent.\n* Mark functions as static where their use is restricted to the same compilation\n  unit.\n* Add required headers\n* Move constants defined in headers into code.\n* remove dead, unused functions that have no debug purpose.\n"
    },
    {
      "commit": "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": "cbf435cb72b937c9e5bfe38905e05de3755b1021",
      "tree": "6d8d2927980cdce68c4a12e5dbfdd2920ff7ae32",
      "parents": [
        "b4b359a265f1b6272b4eb17c11e9c6ef9817f34b"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Apr 28 11:42:20 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 14 16:47:30 2014 +0200"
      },
      "message": "ospfd: add debug messages for router lsa-generation\n\nAdd log messages to lsa_link_broadcast_set so it becomes more\napparent why a particular broadcast interface was added as\ntransit or stub interface.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b4b359a265f1b6272b4eb17c11e9c6ef9817f34b",
      "tree": "f6721202e8ee9f44ccdc54a61e4b74c6552912c0",
      "parents": [
        "8afee5c1729e56f74d27ceb1766bea9f943f060c"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Mon Apr 28 10:58:06 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 14 16:46:41 2014 +0200"
      },
      "message": "ospfd: For an ABR, ensure the right LSID is MaxAge\u0027d\n\nPROBLEM:\n\nAccurate garbage collection of maxage LSAs. The global OSPF structure has\na maxage_lsa tree - the key to the tree is \u003cls-id, adv-router\u003e tuple. Suppose\nthe ABR has multiple areas and has originated some intra-area LSAs. The\nkey for all those LSAs is the same. The code then ends up in a state where\nall but the first LSA do not get cleaned up from the areas\u0027 LSDB. A subsequent\nevent would readvertise those LSAs.\n\nPATCH:\n\nSince the LSA is going to stick around till it actually gets cleaned up by\nthe maxage_walker, make the LSA pointer as the key. Each distinct LSA that\ngets maxage\u0027d then gets added to the tree and will get cleaned up correctly.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\n[CF: Use CHAR_BIT; use uintptr_t; use sizeof(field) instead of sizeof(type)]\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\n[DL: this must remain a temporary fix! needs to be redone after 0.99.23]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8afee5c1729e56f74d27ceb1766bea9f943f060c",
      "tree": "2a3fb12d1a3f951d17df4299266eda47ec85087c",
      "parents": [
        "e387dfd18ded3ddfef4c0a9cb896f73831864579"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Apr 28 08:04:59 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 14 16:46:37 2014 +0200"
      },
      "message": "ospfd: clarify indentation and comments in ospf_lsa_maxage_delete\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e387dfd18ded3ddfef4c0a9cb896f73831864579",
      "tree": "9632ef5671fdbc44f43333427154002484c768e2",
      "parents": [
        "49d7af115177d05bd66d3115cbacd56a7591ec5e"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Apr 28 08:04:58 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 14 16:46:31 2014 +0200"
      },
      "message": "ospfd: fix a reference counting issue introduced by commit 4de8bf0011\n\nCommit 4de8bf0011 added a return statement to a loop iterating over a\nroute_table. That loop uses route_top/route_next.\n\nAs commit 4de8bf0011 failed to add a route_node_unlock before the\nreturn statement, a reference is leaked when this codepath is taken.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "49d7af115177d05bd66d3115cbacd56a7591ec5e",
      "tree": "7082972f63b091f0e8bcbbf9a285fe10e5136a8d",
      "parents": [
        "4b4bda9bb1913579bd54667f62fafe58e2746478"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Fri Feb 21 08:11:15 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 14 16:46:28 2014 +0200"
      },
      "message": "ospfd: check the LS-Ack\u0027s recentness instead of only comparing the #seq\n\nISSUE:\n\nRTA(DR)-----(BackupDR)RTB\n\nRTA advertises a new LSA to RTB, and then flushes the LSA (with setting\nthe age of the LSA to MaxAge) within 1 second. Then the LSA is deleted\nfrom RTA, while it still exists on RTB with non-MaxAge and can not be\nflushed any more.\n\nFIX:\n\nThe reason can be explained in below:\n\na) RTA -- new LSA, #seq\u003d1 --\u003e RTB (RTB will send the delayed Ack in 1s)\nb) RTA -- MaxAge LSA, #seq\u003d1 --\u003e RTB (RTB discards it for the MIN_LS_ARRIVAL)\nc) RTA \u003c-- Ack for the new LSA, #seq\u003d1 -- RTB (RTA accepts it)\n\nIn the step c), ospf_ls_ack() compares the #seq of the entry in the LS-Ack\nwith that of local MaxAge LSA. The #seq of the two entries are same. So\nthe Ack is accepted and the LSA is removed from the retransmit-list (while\nit should not).\n\nIn RFC2328, section  13.7.  Receiving link state acknowledgments:\n\no   If the acknowledgment is for the same instance that is  \u003c\u003d\u003d\n    contained on the list, remove the item from the list and\n    examine the next acknowledgment.  Otherwise:\n\nwhere \"same instance\" does not mean the same #seq. We must call\nospf_lsa_more_recent() to check whether the two instances are same.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4b4bda9bb1913579bd54667f62fafe58e2746478",
      "tree": "11b3a421f85686544d95425c13608736226a7225",
      "parents": [
        "7a9d983e4f961c2103f2cf82a51d5d8321ad0e43"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Jul 11 07:56:29 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 14 16:46:22 2014 +0200"
      },
      "message": "ospfd: don\u0027t allow to set network type on loopback interfaces\n\nOSPFd only allocates some stub information for loopback interfaces.\nThis causes a crash when the interface state machine is started on\nthat interface by configuring a different network type.\n\nIt doesn\u0027t make much sense to configure the network type of a loopback\ninterface, therefore, just forbid it.\n\nSee also bugzilla #670.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7a9d983e4f961c2103f2cf82a51d5d8321ad0e43",
      "tree": "11557e052ccb1f7606501a05eb5a1dc4d22dbdab",
      "parents": [
        "24c84dbe806084552d7bb14b9f1d00514a048b9d"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Wed Jul 10 11:56:18 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 14 16:46:08 2014 +0200"
      },
      "message": "ospfd: run DR election prior to LSA regeneration\n\nThe results from DR election are used when constructing router-LSAs.\nE.g. they are used to determine whether a broadcast interface should\nbe added with a link type of stub interface or transit interface.\n\nTherefore, we should run DR election prior before regenerating LSAs.\n\nBefore commit c363d3861b5384a31465a72ddc3b0f6ff007a95a the DR election\nwas called synchronously prior to router-LSA regeneration which was run\nasynchronously.\n\nThis fixes bug #761 on the Quagga bugzilla.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6f2a67031cfb21362fc7ecd3251761799c8ffe27",
      "tree": "514ba2ef904d56131bffaa5fbc40443826529641",
      "parents": [
        "cd40b329a2e4da882bcad0431c048c876bbeafbd"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Sep 30 12:27:52 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 20:21:42 2014 +0200"
      },
      "message": "ospfd/ospf_vty.c: use keyword cmd style\n\nUse the new keyword command style for:\n\n  - default-information originate\n  - distance ospf\n  - redistribute\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cd40b329a2e4da882bcad0431c048c876bbeafbd",
      "tree": "cfbdec5a7559c6d3e56766797896a18809aa1746",
      "parents": [
        "e712d0e3667ffad8109ef8bce3ce01927ee95bb7"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Sep 30 12:27:51 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 20:21:41 2014 +0200"
      },
      "message": "lib/command.c: rewrite command matching/parsing\n\nAdd support for keyword commands.\n\nIncludes new documentation for DEFUN() in lib/command.h, for preexisting\nfeatures as well as new keyword specification.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2b00515a9b639fd1e057f3ebf10ded2dde920764",
      "tree": "1167cb145764208a132599e5d83980708501bac4",
      "parents": [
        "f7bf41534e885c7bc077529c591a1bce24a5f1e9"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Sep 30 12:27:49 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:32:49 2014 +0200"
      },
      "message": "bgpd, ospfd, zebra: fix some DEFUN definitions\n\nFixup some DEFUNS with incorrect command strings or mixed up helpstrings.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e708ed69aa0b993527f48b1f31b645c00750927f",
      "tree": "8f33d73b2a85b51c042318d58a1750eeb8019616",
      "parents": [
        "a11e012e8661629d665e992e765741a5eaa7d017",
        "424cc3bd48da0f417c9056c5c2ade697a3386cd4"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 18 17:04:25 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 18 17:04:25 2014 +0100"
      },
      "message": "Merge volatile/cumulus_ospf6d\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a11e012e8661629d665e992e765741a5eaa7d017",
      "tree": "d6967d9c5044f8c924aa2f4b62bac8e3bda358e2",
      "parents": [
        "b52aef18a9f3acc8b24ab5c2631dc574b8e2ec70"
      ],
      "author": {
        "name": "Remi Gacogne",
        "email": "rgacogne-github@coredump.fr",
        "time": "Sun Sep 08 13:48:34 2013 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Tue Feb 11 10:28:03 2014 +0100"
      },
      "message": "security: Fix some typos and potential NULL-deref\n\nThis patch against the git tree fixes minor typos, some of them possibily\nleading to NULL-pointer dereference in rare conditions.\n\nSigned-off-by: Remi Gacogne \u003crgacogne-github@coredump.fr\u003e\nSigned-off-by: Joachim Nilsson \u003ctroglobit@gmail.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "a25a1264a5615a90e9ca9f60ccc1f397ca55bc56",
      "tree": "358307c0bf0d047c7279708ceed154f05dcbc707",
      "parents": [
        "6ee06fa9ed91412cb745668d462031cdbe2642e0"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Wed Nov 27 14:36:05 2013 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Feb 10 22:07:11 2014 +0100"
      },
      "message": "ospfd: fixup log message in ospf_zebra_delete\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\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": "2449fcd64ae95d5fbfd95d93468fc57003def57d",
      "tree": "8c152a482f2080ee425cd06381861d2bf69769d4",
      "parents": [
        "3810e06eebe14f75c66fb17a88574384573e95fa"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Sat Aug 24 07:54:17 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 07 18:15:42 2013 -0800"
      },
      "message": "ospf6d: reinvoke MaxAge remover thread if not all MaxAge LSAs were flushed.\n\nMaxAge LSAs are being flushed out only on an event, unlike OSPFv2 where they\u0027re flushed out\nperiodically. This causes certain LSAs to hang around forever, never getting flushed out.\nThis patch makes flushing out MaxAge LSAs periodic, retriggered after a certain period if\nnot all MaxAge LSAs were flushed out.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8551e6dadce41fb87a61767af723cb25ae611a04",
      "tree": "cb0854c2e216989a0fa211d56d2bf6fd6948b2d6",
      "parents": [
        "a83a1e9c2f035d3152451dcfc97ab13b4ac427b9"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Oct 22 17:42:18 2013 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Oct 22 18:01:31 2013 -0700"
      },
      "message": "ospf6d/ospfd: refactor some common defines\n\nRearranging common defs and structures for use betweeen OSPFv2 and\nOSPFv3.  Created a new file called libospf.h under lib directory to\nhold defines that are common between OSPFv2 and OSPFv3 code bases.\n\n[DL: split of defines refactor from timer refactor]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "23cd8fb7133befdb84b3a918f7b2f6147161ac6e",
      "tree": "b8ef335dcbc2051a5017aa50bc4b759882b638d2",
      "parents": [
        "a12afd5e8e57c95505d4d0166af234c7f19e9fe1"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Fri Aug 02 07:27:53 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 06 12:41:46 2013 +0200"
      },
      "message": "ospfd: protect vs. VU#229804 (malformed Router-LSA)\n\nVU#229804 reports that, by injecting Router LSAs with the Advertising\nRouter ID different from the Link State ID, OSPF implementations can be\ntricked into retaining and using invalid information.\n\nQuagga is not vulnerable to this because it looks up Router LSAs by\n(Router-ID, LS-ID) pair.  The relevant code is in ospf_lsa.c l.3140.\nNote the double \"id\" parameter at the end.\n\nStill, we can provide an improvement here by discarding such malformed\nLSAs and providing a warning to the administrator.  While we cannot\nprevent such malformed LSAs from entering the OSPF domain, we can\ncertainly try to limit their distribution.\n\ncf. http://www.kb.cert.org/vuls/id/229804 for the vulnerability report.\nThis issue is a specification issue in the OSPF protocol that was\ndiscovered by Dr. Gabi Nakibly.\n\nReported-by: CERT Coordination Center \u003ccert@cert.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c51443f4aa6b7f0b0d6ad5409ad7d4b215092443",
      "tree": "effbe8695f7bfd0ed5261b08d5beddb66cceed64",
      "parents": [
        "78116ab6e1524815910658898620776ae5fd4d18"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jul 08 23:05:28 2013 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jul 28 16:13:10 2013 +0200"
      },
      "message": "ospfd: CVE-2013-2236, stack overrun in apiserver\n\nthe OSPF API-server (exporting the LSDB and allowing announcement of\nOpaque-LSAs) writes past the end of fixed on-stack buffers.  This leads\nto an exploitable stack overflow.\n\nFor this condition to occur, the following two conditions must be true:\n- Quagga is configured with --enable-opaque-lsa\n- ospfd is started with the \"-a\" command line option\n\nIf either of these does not hold, the relevant code is not executed and\nthe issue does not get triggered.\n\nSince the issue occurs on receiving large LSAs (larger than 1488 bytes),\nit is possible for this to happen during normal operation of a network.\nIn particular, if there is an OSPF router with a large number of\ninterfaces, the Router-LSA of that router may exceed 1488 bytes and\ntrigger this, leading to an ospfd crash.\n\nFor an attacker to exploit this, s/he must be able to inject valid LSAs\ninto the OSPF domain.  Any best-practice protection measure (using\ncrypto authentication, restricting OSPF to internal interfaces, packet\nfiltering protocol 89, etc.) will prevent exploitation.  On top of that,\nremote (not on an OSPF-speaking network segment) attackers will have\ndifficulties bringing up the adjacency needed to inject a LSA.\n\nThis patch only performs minimal changes to remove the possibility of a\nstack overrun.  The OSPF API in general is quite ugly and needs a\nrewrite.\n\nReported-by: Ricky Charlet \u003cricky.charlet@hp.com\u003e\nCc: Florian Weimer \u003cfweimer@redhat.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4c14b7f684510592f2eb46fd84859d8bca57def9",
      "tree": "f42890045f6d1cd37cdd61106b6524e6c476f445",
      "parents": [
        "4de8bf001189d40e086764fd804e59657d2e21e6"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Wed Feb 20 10:00:54 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Sat Apr 20 06:14:27 2013 +0200"
      },
      "message": "ospfd: fix flooding procedure\n\nAn ospf router should accept a new maxage LSA into its lsdb if it has any\nneighbors in state Exchange or Loading. ospfd would however only account\nfor neighbors on the same interface which does not seem to be a valid\noptimization.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Joachim Nilsson \u003ctroglobit@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "4de8bf001189d40e086764fd804e59657d2e21e6",
      "tree": "367c46fff12691e2622abc1d23ea0f95fdb97504",
      "parents": [
        "77ef01392f82c27a9892840c61a5e7391fd82415"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Wed Feb 20 10:00:52 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Sat Apr 20 06:12:13 2013 +0200"
      },
      "message": "ospfd: make ospf_maxage_lsa_remover actually yield\n\nospf_maxage_lsa_remover whould check whether to yield,\nbut run on anyway.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Joachim Nilsson \u003ctroglobit@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "f2b53dac4c72811c06779c596c6162b994eb427a",
      "tree": "9402b6fc1cf366121ba9f3bc623344284fac4196",
      "parents": [
        "677bcbbf153fe73e57cb44f668977cbd26661fd4"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Wed Mar 20 15:28:46 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 09 22:38:04 2013 +0200"
      },
      "message": "ospfd: restore nexthop IP for p2p interfaces\n\ncommit c81ee5c... \"ospfd: Optimize and improve SPF nexthop calculation\"\nsubtly changed semantics of routes calculated over pointopoint links by\nremoving the nexthop IP address and instead using an ifindex route.\n\nThis breaks calculation of AS-Ext routes with a forwarding address since\nin ospf_ase_complete_direct_routes() this will be hit:\n    if (op-\u003enexthop.s_addr \u003d\u003d 0)\n      op-\u003enexthop.s_addr \u003d nexthop.s_addr;\nthus turning the route unusable by having an invalid nexthop.\n\nFix by restoring the nexthop IP on routes over PtP links.  This also\nallows running multi-access (Ethernet) interfaces in PtP mode again.\n\nThis bug is a regression against 0.99.21 and only present in 0.99.22.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\n[patch description and code comments rewritten]\nAcked-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nAcked-by: James Li \u003cjli@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    }
  ],
  "next": "58952492d2eedd4b7974274a578a1fa9707125bb"
}
