)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "945ea293399af6c9ff3efd07686ff30c3d2a3e8b",
      "tree": "81f039e5b13b1f008a20e534e27c738b970c1874",
      "parents": [
        "28971c8cb1138700e87dc7da673e59b5596bb51b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 06 12:17:12 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 19 11:49:09 2012 +0100"
      },
      "message": "Revert \"ospfd: Do not fall back to intervening router.\"\n\nThis reverts commit 9289c6ff55cd96c943d23e43fc9e5f987aa965ed.\n\nThe commit reverted an earlier change which was fixed a bug that caused\nblack-holes to remote destinations with multiple paths, that could occur\nduring convergence. Overall, the previous code is more correct.\n"
    },
    {
      "commit": "9289c6ff55cd96c943d23e43fc9e5f987aa965ed",
      "tree": "b971fa4b0ce15e02abd27a62548d53371e4cc0b2",
      "parents": [
        "ba281d3d04053b7c59ecdfdbea91a62c09e9f8a4"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:14 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:45 2012 +0200"
      },
      "message": "ospfd: Do not fall back to intervening router.\n\nThe patch in bug 330 did two things. It add a return value\nwhether ospf_nexthop_calculation() failed or not and also\nmoved the return stmt for 16.1.1 para 5 so now SPF\nwill fallback to the intervening router when no back links are found\nby 16.1.1 para 5. This is wrong and can potentially create black holes\nor routing loops according to Dave Katz and Acee Lindem at ospf@ietf.org\n\nEven if the current code could be proved to be harmless in all cases,\nit adds substantial extra processing and memory allocations.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "57c639f01ec6be70ac858f412d32b638a9756bed",
      "tree": "cd415e8d098b827d69dcfdf3d3b22f5df11cc4c9",
      "parents": [
        "c81ee5c94f5b34375f3ef276fdb9bde9098e7ecb"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:12 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:37 2012 +0200"
      },
      "message": "ospf_spf_process_stubs: use LSA pos to find OSFP interface\n\nThis is better than a prefix lookup as prefixes may not be\nunique, that is, the same prefix can exist on several interfaces.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c81ee5c94f5b34375f3ef276fdb9bde9098e7ecb",
      "tree": "dad1ab0d81b72a7c7a869bc7dc051b703deec9be",
      "parents": [
        "7b92589c225ae46417fc3fa0714a1b6f53f19c51"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:11 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:30 2012 +0200"
      },
      "message": "ospfd: Optimize and improve SPF nexthop calculation\n\nMaintain router LSA positions in OSPF interface.\nFind the OSPF interface in nexthop_calculation using\nthe position in the router LSA. This is possible because\nthe only time nexthop_calculation needs to look up interfaces\nis when dealing with its own Router LSA.\n\nThis has the following advantages:\n - Multiple PtP interfaces with the same IP address between two routers.\n - Use Unnumbered PtP on just one end of the link.\n - Faster OI lookup for the OSPF interface and only\n   done once for PtoP links.\n\n*ospf_interface.h: (struct ospf_interface) Add storage for\n\t\t   storing router LSA position.\n\n*ospf_interface.c: (ospf_if_lookup_by_lsa_pos)\n\t\t   lookup OSPF I/F in an area using LSA position.\n\n*ospf_lsa.c: (router_lsa_link_set) record Router LSA position.\n\n*ospf_spf.c: (ospf_spf_next) Count and pass along lsa position.\n\t     (ospf_nexthop_calculation) Add lsa position argument.\n\t     call ospf_if_lookup_by_lsa_pos() for OSFP interface handle.\n\t     Clean up and remove all calls ospf_if_is_configured() the\n\t     rest. Adjust a few debug logs.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7b92589c225ae46417fc3fa0714a1b6f53f19c51",
      "tree": "38e1add198ee857211684250858a3b946c05c6a9",
      "parents": [
        "aa5cf24b9de96245f2166ef1c4e9612890ced1b3"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jul 23 18:17:57 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:02:31 2012 +0200"
      },
      "message": "ospfd: avoid exhausting memory with OSPF vertices (BZ#476)\n\nThis was found in scale testing at OSR;  ospfd is adding the same link\nover and over again to the SPF tree.  This fix prevents the resulting\nmemory corruption from happening and adds a debug message to track\noccurence of this issue and/or confirm a proper fix.\n\n(This version was improved by Scott Feldman over the earlier RFC.)\n\n* ospfd/ospf_spf.c: (ospf_spf_add_parent) loop over existing vertices\n  and refuse to add duplicates.\n\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "075e12f57d6c0b115cd177c7b244d9810460e3ff",
      "tree": "755a8a7960a918c77f38a15d931634e9d9170879",
      "parents": [
        "f04a80a5d209dbb54f6fec5d0149b7c0e489d29e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Dec 06 23:54:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 07 01:23:32 2011 +0400"
      },
      "message": "ospfd: remove unused code\n\nThe code for nssa_range and other bits that were written but\nnever used.\n"
    },
    {
      "commit": "05b7709dad416146376cc4f41db0c866b3738f5b",
      "tree": "bf17ceea5864f3bd4d6beb0a5dff4ba5b718b339",
      "parents": [
        "10d04cdb4198b69073ea0cdd4c26a64d6697b33e"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Aug 23 11:36:27 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:41:00 2011 +0400"
      },
      "message": "ospfd: sizing macros cleanup\n\n* ospf_spf.c\n  * ROUTER_LSA_TOS_SIZE: prepend OSPF_ and move to ospf_lsa.h\n  * ROUTER_LSA_MIN_SIZE: replace with existing OSPF_ROUTER_LSA_LINK_SIZE\n"
    },
    {
      "commit": "4ca15d4a658dca9663b7dea2475edfe6814ef847",
      "tree": "a756f68b118cf641f8f91966e771345d4a177b76",
      "parents": [
        "a8ba847ff96b41e06770d4987b15707890ed5807"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 03 15:16:41 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 03 16:52:38 2009 +0100"
      },
      "message": "ospfd: update some comments\n\n* ospf_{spf,lsa}.c: remove out of date comment; add comment on some\n  non-obvious code; Make note of a possible scaling problem.\n"
    },
    {
      "commit": "a8ba847ff96b41e06770d4987b15707890ed5807",
      "tree": "07864eb958853e5ad7b2616c9b7bc5259a8ae503",
      "parents": [
        "bd5403778b0d96258730050e4526c7c72903e60b"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jul 27 12:42:34 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 03 16:52:30 2009 +0100"
      },
      "message": "ospfd: Change struct ospf_path *oi to ifindex.\n\n* global: In struct ospf_path, change struct ospf_interface *oi to int\n  ifindex.  It is unsafe to reference *oi as an ospf interface can be\n  deleted under your feet. Use a weak reference instead.\n"
    },
    {
      "commit": "bd5403778b0d96258730050e4526c7c72903e60b",
      "tree": "bcd21a0f78175f0693857bc7eaadef30d8b3c4a6",
      "parents": [
        "4a5f432fa07f33da5ad05d18e4ba81d57b44af8e"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jul 27 12:42:31 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 30 16:18:30 2009 +0100"
      },
      "message": "ospfd: Discriminate better when selecting links between vertices in SPF\n\n* ospf_spf.c: (ospf_get_next_link) One must check the vertex type, Router or\n  Network, to select type link to match against.  Link type 1 has neighbour\n  router ID in link_id and link type 2 has IP address of DR.  Since router\n  id may have same value as an existing IP address one risks matching a\n  router ID against a DR.\n"
    },
    {
      "commit": "b3bc68e5a4eecd85138463ae5742c2ccaa1db4bb",
      "tree": "57f3167f01485aee55ca6fb47dd9b87e0b01bd41",
      "parents": [
        "742c64ff34a79ad22982c433edd8d7cf32fd9cdf"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 04 13:52:07 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 04 13:52:07 2008 +0100"
      },
      "message": "[ospfd] Minor enhancements to recent self-host-routes suppression patch\n\n\t* ospf_spf.c: (ospf_spf_process_stubs) Track whether\n\t  parent router vertex is the root, so that the host-route\n\t  suppression logic need only be activated for such vertices.\n\t  Move the actual logic to ospf_intra_add_stub.\n\t* ospf_route.c: (ospf_intra_add_stub) Main test of link moved\n\t  here, notionally more appropriate.\n"
    },
    {
      "commit": "910e2704bee6bf78aee858db65f5393be618e683",
      "tree": "881c792fa2424d34c485e23b368a57c9c6a6daaa",
      "parents": [
        "b38309a4ee831a440ef78f8a27db584f2f8e8276"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Wed Aug 20 14:24:39 2008 +0200"
      },
      "committer": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Aug 25 09:50:17 2008 +0200"
      },
      "message": "Ignore host routes to self.\n\nPtP links with /32 masks adds host routes to the remote host,\nsee RFC 2328, 12.4.1.1, Option 1.\nMake sure that such routes are ignored\n"
    },
    {
      "commit": "e95537f0495401c0dd86669d096387e5cdddf8e0",
      "tree": "48d749b6728bc5b3a60bc0b4f617b7f5ac0be90b",
      "parents": [
        "93bdadae74a9b391152f5511dbced6f08fad6d94"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Aug 07 16:22:05 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Aug 07 16:22:05 2007 +0000"
      },
      "message": "[ospfd] Finish explanatory comment started in previous commit..\n\n2007-08-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* ospf_spf.c: (ospf_spf_next) Finish off the explanatory\n\t  comment made in previous commit\n"
    },
    {
      "commit": "7591d8b862439dfae8b4b16d148ce567b6ff8cb7",
      "tree": "b9d24293663be04e4c80bcd78f8d1f5e86c2c3f1",
      "parents": [
        "fc787e873dff0091069742b34fb3631ac529c92a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 18:52:45 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 18:52:45 2007 +0000"
      },
      "message": "[ospfd] Fix bad SPF calculation on some topologies - incorrect sorting\n\n2007-08-07 Atis Elsts \u003catis@mikrotik.com\u003e\n\n\t* ospf_spf.c: (ospf_spf_next) Sort heap in correct direction\n\t  after vertex cost is changed, thus fixing incorrect SPF\n\t  calculation on certain topologies.\n\t* lib/pqueue.{c,h}: Export trickle_up\n"
    },
    {
      "commit": "08d3d5b398ae81de7659509f159e814d1bbd4375",
      "tree": "adba8d8c3499a5156d24e9b0a3b077f357553158",
      "parents": [
        "fb982c25aa771b7c7425a3c3cce0a2cda0a715de"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 07 16:38:35 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 07 16:38:35 2007 +0000"
      },
      "message": "[ospfd] Bug #330 regression: Fix ospf_spf_add_parent assert\n\n2007-05-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* ospf_spf.c: (ospf_vertex_new) Dont init vertices to infinity,\n\t  just let 0 be a special case.\n\t  (ospf_spf_add_parent) 0 distance candidate vertex is special,\n\t  cost still to be initialised - asserting that new distance\n\t  is \u003c\u003d existing only makes sense where w already has a cost.\n\t  (ospf_spf_next) Infinite cost links should not be followed,\n\t  bar those of the root.\n"
    },
    {
      "commit": "85ef784e8a41a6dd11da42e10368f80c8bdb99d8",
      "tree": "b2089c197ee4eaefc18a15d1cb30118f2c66daab",
      "parents": [
        "b75ae99e1d95685869fb38049e1936129fe17fc9"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Mar 23 11:19:08 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Mar 23 11:19:08 2007 +0000"
      },
      "message": "[ospfd] Bug #330 regression: failure to calculate routes through networks\n\n2007-03-23 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* ospf_spf.c: (ospf_nexthop_calculation) Fix silly regression\n\t  causing ospfd to fail to calculate paths past networks not\n\t  attached to root vertex, introduced with bug #330 fixes.\n"
    },
    {
      "commit": "b75ae99e1d95685869fb38049e1936129fe17fc9",
      "tree": "d7e732cb77ba01c0605594f81ea3e16c42c74b1c",
      "parents": [
        "54afb658829d4bfe5de52685f77af8c8273e78c0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Mar 23 11:17:28 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Mar 23 11:17:28 2007 +0000"
      },
      "message": "[ospfd] Instrument ospf_spf with more debug log messages\n\n2007-03-23 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* ospf_spf.c: (various) Add more debug statements.\n"
    },
    {
      "commit": "bd34fb346db5bb1f0bc8eeeef1868e296d889053",
      "tree": "d29904361a06e21d77fc5cbb163c39dd327962fe",
      "parents": [
        "ff1dd550b01fd6bb4aa137cfee282e6175f89c50"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Feb 26 17:14:48 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Feb 26 17:14:48 2007 +0000"
      },
      "message": "[ospfd] Fix regression in SPF introduced by bug#330 fixes\n\n2007-02-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* ospf_spf.c: Fix regression introduced with bug #330 fix: The\n\t  cost update added to ospf_spf_add_parent only handled PtP\n\t  case, differing from same functionality in higher-level\n\t  ospf_spf_next. Regression diagnosed by Anders Pedersen,\n\t  mailnews+router-quagga-dev@news.cohaesio.com.\n\t  (ospf_vertex_new) Initialise vertices to max-cost.\n\t  (ospf_spf_init) Root vertex always creates with 0 cost.\n\t  (ospf_spf_add_parent) Remove the buggy V-\u003eW cost calculating\n\t  code, instead take the new distance as a parameter.\n\t  (ospf_nexthop_calculation) Take distance as parameter, so it\n\t  can be passed down to add_parent.\n\t  (ospf_spf_next) Dont initialise candiate vertex distance,\n\t  vertex_new does so already. Pass distance down to\n\t  nexthop_calculation (see above).\n"
    },
    {
      "commit": "bc20c1a4638db3b92a2e2f7f4b820e60f30a6146",
      "tree": "12d8b124a27309f70d1e8b070641659a517f392a",
      "parents": [
        "fb6724a6b987cb6fab00cc9326674bd14a0d09fa"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Jan 24 14:51:51 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Jan 24 14:51:51 2007 +0000"
      },
      "message": "[ospfd] Bug #330: SPF must consider that nexthop-calc may fail\n\n2007-01-24 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* ospf_spf.c: Bug #330: Nexthop calculation sometimes may fail,\n\t  and it needs to indicate this result to SPF.\n\t  (ospf_spf_add_parent) Flush of parent list needs to be done here,\n\t  for simplicity.\n\t  (ospf_nexthop_calculation) Caller needs to know whether\n\t  nexthop calculation succeeded. Every return statement must\n\t  correctly indicate such.\n\t  (ospf_spf_next) Queueing/prioritisation of vertices in SPF\n\t  must take into account whether nexthop_calculation succeeded,\n\t  or SPF may fail to find best paths.\n"
    },
    {
      "commit": "2518efd15b75687d4791a5eb4b0d7febc36cffbc",
      "tree": "075b833f292ba3e64117a9ffb440578c70be5a2a",
      "parents": [
        "db9c0df934e62835bc09604a7ae7932693b4254a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 27 06:49:29 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 27 06:49:29 2006 +0000"
      },
      "message": "[ospfd] Bug #134, ospfd should be more robust to backward time change\n\n2006-08-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Bug #134. Be more robust to backward time changes,\n\t  use the newly added libzebra time functions.\n\t  In most cases: recent_time -\u003e recent_relative_time()\n\t  gettimeofday -\u003e quagga_gettime (QUAGGA_CLK_MONOTONIC, ..)\n\t  time -\u003e quagga_time.\n\t  (ospf_make_md5_digest) time() call deliberately not changed.\n\t  (ospf_external_lsa_refresh) remove useless gettimeofday, LSA\n\t  tv_orig time was already set in ospf_lsa_new, called via\n\t  ospf_external_lsa_new.\n"
    },
    {
      "commit": "9c27ef9b9c26db0af507869c2866c4a8463f4ae7",
      "tree": "72279949d2ac9f10f6e62a5a18e332a8b4e02dd5",
      "parents": [
        "b9d92881f5d45601c4268d99baec8835068b73c2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 04 07:32:57 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 04 07:32:57 2006 +0000"
      },
      "message": "[ospfd] Fix SPF of virtual-links\n\n2006-04-24 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) More Virtual-link fixes, again with much help in\n\t  testing / debug from Juergen Kammer. Primarily in SPF.\n\t* ospf_spf.h: Add guard. ospf_interface.h will include this\n\t  header.\n\t* ospf_interface.h: Modify ospf_vl_lookup definition to take\n\t  struct ospf as argument, so as to allow for NULL area\n\t  argument.\n\t  (struct ospf_vl_data) Remove out_oi, instead add a struct\n\t  vertex_nexthop, to use as initial nexthop for backbone paths\n\t  through a vlink.\n\t* ospf_interface.c: (ospf_vl_lookup) Modified to allow\n\t  NULL area to be passed to indicate \"any\" (first) area.\n\t  Add extra debug.\n\t  (ospf_vl_set_params) vl_oi -\u003e nexthop. Add extra debug.\n\t  (ospf_vl_up_check) Fix debug, inet_ntoa returns a static\n\t  buffer..\n\t* ospf_route.c: (ospf_intra_add_router) Vlinks dont go through\n\t  backbone, don\u0027t bother checking.\n\t* ospf_spf.c: (static struct list vertex_list) Record vertices\n\t  that will need to be freed.\n\t  (cmp) Order network before router vertices, as required,\n\t  wasn\u0027t implemented.\n\t  (vertex_nexthop_free) Mild additional robustness check.\n\t  (vertex_parent_free) Take void argument, as this function\n\t  is passed as list deconstructor for vertex parent list.\n\t  (ospf_vertex_new) More debug. Set deconstructor for parent\n\t  list. Track allocated vertices on the vertex_list.\n\t  (ospf_vertex_free) Get rid of the tricky recursive cleanup of\n\t  vertices. Now frees only the given vertex.\n\t  (ospf_vertex_add_parent) Fix assert.\n\t  (ospf_nexthop_calculation) Fix calculation of nexthop for\n\t  VLink vertices, lookup the vl_data and use its previously\n\t  recorded nexthop information.\n\t  (ospf_spf_calculate) Vertices are freed simply by deleting\n\t  vertex_list nodes and letting ospf_vertex_free as deconstructor\n\t  work per-node.\n\t  (ospf_spf_calculate_timer) Trivial optimisation, leave\n\t  backbone SPF calculation till last to reduce SPF churn on\n\t  VLink updates.\n\t* ospf_vty.c: (ospf_find_vl_data) update call to ospf_vl_lookup\n\t  (no_ospf_area_vlink_cmd) ditto.\n\t  (show_ip_ospf_interface_sub) For Vlinks, the peer address is\n\t  more interesting than the output interface.\n"
    },
    {
      "commit": "58e1befe5fbd6eade52a1536acb49ea4b4fc5837",
      "tree": "3851ffdb632c5e8d6ea6e8ed77cee7fb6c21b013",
      "parents": [
        "cb3d31db278a522641f2ec5408034b819091bab6"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Nov 11 12:10:03 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Nov 11 12:10:03 2005 +0000"
      },
      "message": "[ospfd] SPF ospf_canonical_nexthops_free bugfix.\n"
    },
    {
      "commit": "c8c1521a7d39d165ef856c1a3a6dcd54f0532e8d",
      "tree": "ac069b1dd77be09ea5419169544cbf2107cf89d1",
      "parents": [
        "8570676c4ffb407284d51a80c045d6989b7af6d7"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Nov 04 12:31:39 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Nov 04 12:31:39 2005 +0000"
      },
      "message": "2005-11-04 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* ospf_{dump,spf,vty}.c: Oops, use the internal tv_sub\n\t  function rather than unportable timersub.\n"
    },
    {
      "commit": "d24f6e2a34ca829bd2ff6adb98b49d4d2d9cb737",
      "tree": "1d2a79a2ec4004f16b1ba3f2f2923ed8796cde83",
      "parents": [
        "c188c37caaf589a17b22e9889e63ec96f2f57106"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Oct 21 09:23:12 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Oct 21 09:23:12 2005 +0000"
      },
      "message": "2005-10-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) SPF millisecond resolution timer with adaptive,\n\t  linear back-off holdtime. Prettification of ospf_timer_dump.\n\t* ospf_dump.c: (ospf_timeval_dump) new function. The guts of\n\t  ospf_timer_dump, but made to be more dynamic in printing out\n\t  the relative timeval, sliding the precision printed out\n\t  according to the value.\n\t  (ospf_timer_dump) guts moved to ospf_timeval_dump.\n\t* ospf_dump.h: export ospf_timeval_dump.\n\t* ospf_flood.c: (ospf_flood) remove gettimeofday, use\n\t  the libzebra exported recent_time instead, as it\u0027s not\n\t  terribly critical to have time exactly right - the dropped\n\t  LSA will be retransmited to us if we don\u0027t ACK it.\n\t* ospf_packet.c: (ospf_ls_upd_timer) Ditto, but here we\u0027re\n\t  not transmitting, just putting LSA back on update transmit list.\n\t* ospfd.h: delay and holdtimes should be unsigned.\n\t  Add spf_max_holdtime and spf_hold_multiplier.\n\t  Update default defines for delay and hold time to be in msec.\n\t  (struct ospf) change the SPF timestamp to a struct timeval.\n\t  Remove ospf_timers_spf_(un)?set.\n\t* ospfd.c: (ospf_timers_spf_{set,unset}) removed.\n\t  (ospf_new) initialise spf_max_holdtime and spf_hold_multiplier\n\t* ospf_spf.c: (ospf_spf_calculate) SPF timestamp is a timeval\n\t  now, update with gettimeofday.\n\t  (ospf_spf_calculate_schedule) Change SPF timers to millisecond\n\t  resolution.\n\t  Make the holdtime be adaptive, with a linear increase in\n\t  holdtime ever consecutive SPF run which occurs within holdtime\n\t  of previous SPF, bounded by spf_max_holdtime.\n\t* ospf_vty.c: Update spf timers commands.\n\t  (ospf_timers_spf_set) trivial helper.\n\t  (ospf_timers_throttle_spf_cmd) new command to set SPF delay,\n\t  initial hold and max hold times with millisecond resolution.\n\t  (ospf_timers_spf_cmd) Deprecated. Accept the old values,\n\t  convert to msec, truncate to new limits.\n\t  (no_ospf_timers_throttle_spf_cmd) set timers to defaults.\n\t  (no_ospf_timers_spf_cmd) deprecated form, same as previous.\n\t  (show_ip_ospf_cmd) Display SPF parameters and times.\n\t  (show_ip_ospf_neighbour_header) Centralise the \u0027sh ip os ne\u0027\n\t  header.\n\t  (show_ip_ospf_neighbor_sub) Fix the field widths. Get rid of\n\t  the multiple spaces which were making the lines even longer.\n\t  (show_ip_ospf_neighbor_cmd) Use show_ip_ospf_neighbour_header\n\t  (show_ip_ospf_neighbor_all_cmd) ditto and fix the field\n\t  widths for NBMA neighbours.\n\t  (show_ip_ospf_neighbor_int) Use header function.\n\t  (show_ip_ospf_nbr_nbma_detail_sub) use sizeof for timebuf,\n\t  local array - safer.\n\t  (show_ip_ospf_neighbor_detail_sub) ditto\n\t  (ospf_vty_init) install the new SPF throttle timer commands.\n"
    },
    {
      "commit": "eb3da6dfa92be8083bbe1b4436818754be158b93",
      "tree": "72067c3eb6ec2f5fd1678d555062424f163c6599",
      "parents": [
        "3623814abc4df8435d2fc50697c6d7fc66f21088"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 18 04:20:33 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Oct 18 04:20:33 2005 +0000"
      },
      "message": "2005-10-18 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) SPF memory management cleanup and fix for rare\n\t  double-free bug.\n\t* ospf_spf.h: (struct vertex_parent) New struct to hold parent\n\t  specific data, eg the backlink and the parent vertex pointer,\n\t  and point to the appropriate general struct vertex_nexthop.\n\t  (struct vertex_nexthop) remove parent vertex pointer, so\n\t  this struct can be shared across vertices.\n\t  (struct vertex) rename list child to list children. Remove\n\t  list of nexthops, replace with list of vertex_parents.\n\t* ospf_spf.c: (update_stat) trivial, remove cast from void *.\n\t  (vertex_nexthop_new) remove init of parent - field is gone\n          from struct vertex_nexthop.\n          (ospf_canonical_nexthops_free) Remove the canonical\n          vertex_nexthop memory objects. These are the vertex_nexthops\n          attached to the first level of router vertices from the root.\n          (vertex_parent_new) new function, create a vertex_parent.\n          (vertex_parent_free) ditto, but free it.\n          (ospf_vertex_new) Update to match changes to struct vertex.\n          (ospf_vertex_free) Recursively free a struct vertex and its\n          children. The parent list is used as a reference count.\n          vertex_nexthops must be free seperately, if required.\n          (ospf_vertex_dump) update to match struct vertex changes.\n          Print out backlink of parents too.\n          (ospf_vertex_add_parent) ditto.\n          (ospf_lsa_has_link) update comment.\n          (ospf_nexthop_add_unique) removed, not needed anymore.\n          (ospf_nexthop_merge) ditto.\n          (ospf_spf_consider_nexthop) renamed to ospf_spf_add_parent.\n          Simplified to just create vertex_parent and add it.\n          (ospf_spf_flush_parents) new function, flush out the parent\n\t  list.\n\t  (ospf_nexthop_calculation) Take the relevant route_lsa_link\n\t  as an argument, which simplifies things and removes the need\n\t  for the hack in ospf_nexthop_add_unique - ospf_spf_next\n\t  already knew exactly which link the cost calculated was for.\n\t  Update to match struct vertex changes too.\n\t  (ospf_spf_next) Don\u0027t create a vertex for W unnecessarily, if\n          it\u0027s there\u0027s a vertex already created for W, use it, and\n          hence there\u0027s no need to free it either.\n          Update some manipulation/comparisons of distance to match.\n          Flush the parent list if a lower cost path is found.\n          (ospf_spf_route_free) unused, removed.\n          (ospf_spf_dump) match the struct vertex changes, and dump the\n          ifname if possible.\n          (ospf_spf_calculate) At end of SPF, free the canonical nexthops\n          and call ospf_vertex_free on the root vertex to free the\n\t  entire tree.\n\t* ospf_interface.c: (ospf_vl_set_params) match struct vertex\n          changes.\n        * ospf_route.c: (ospf_intra_route_add) ditto\n          (ospf_route_copy_nexthops_from_vertex) ditto\n\t* memtypes.c: (memory_list_ospf) Add MTYPE_OSPF_VERTEX_PARENT.\n"
    },
    {
      "commit": "6638c1ab3d4c0043a49a3a67768cccf4a23648dc",
      "tree": "8fd2f7cdf8f787b495109c36ecf87d411ddee860",
      "parents": [
        "2d74db55c463231e3542207bc3d940e2563e6b5b"
      ],
      "author": {
        "name": "jardin",
        "email": "jardin",
        "time": "Sat Oct 01 00:08:54 2005 +0000"
      },
      "committer": {
        "name": "jardin",
        "email": "jardin",
        "time": "Sat Oct 01 00:08:54 2005 +0000"
      },
      "message": "2005-09-30 Vincent Jardin \u003cvincent.jardin@6wind.com\u003e\n\n\t* ospf_dump.c, ospf_ia.c, ospf_spf.c, ospf_ase.c:\n\t  remove unused DEBUG\n"
    },
    {
      "commit": "7461d4594aad716f24690c68c5f82bd865cf9c25",
      "tree": "9a65d1ec29bf635122177b87caa86115d9028d78",
      "parents": [
        "1ada81981da3e6422a59d3052d32696fc93cdea1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jun 13 13:57:16 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jun 13 13:57:16 2005 +0000"
      },
      "message": "2005-06-13 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* ospf_spf.c: Try get more information on a SEGV under\n\t  ospf_spf_vertex_add_parent.\n\t  (ospf_vertex_free) NULL out the child and nexthop lists\n\t  (ospf_vertex_add_parent) nexthop and child can not be NULL\n\t  vertex_nexthop\u0027s parent-\u003echild list can not be NULL\n\t  (ospf_spf_next) w and cw are per-loop iteration variables, move\n\t  declarations into loop body.\n"
    },
    {
      "commit": "4dadc291e56195886fd047690ded9686f4e013fa",
      "tree": "ea7c0690912d2b7d0c487f6855960e768fff1b6e",
      "parents": [
        "69e10adaf28d4e116c38db2648786557fe131828"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:37:42 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:37:42 2005 +0000"
      },
      "message": "2005-05-06 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n        * (general) extern and static qualifiers added.\n          unspecified arguments in definitions fixed, typically they should\n          be \u0027void\u0027.\n          function casts added for callbacks.\n          Guards added to headers which lacked them.\n          Proper headers included rather than relying on incomplete\n          definitions.\n          gcc noreturn function attribute where appropriate.\n        * ospf_opaque.c: remove the private definition of ospf_lsa\u0027s\n          ospf_lsa_refresh_delay.\n        * ospf_lsa.h: export ospf_lsa_refresh_delay\n        * ospf_packet.c: (ospf_make_md5_digest) make *auth_key const,\n          correct thing to do - removes need for the casts later.\n        * ospf_vty.c: Use vty.h\u0027s VTY_GET_INTEGER rather than ospf_vty\u0027s\n          home-brewed versions, shuts up several warnings.\n        * ospf_vty.h: remove VTY_GET_UINT32. VTY_GET_IPV4_ADDRESS and\n          VTY_GET_IPV4_PREFIX moved to lib/vty.h.\n        * ospf_zebra.c: (ospf_distribute_list_update_timer) hacky\n          overloading of the THREAD_ARG pointer should at least use\n          uintptr_t.\n"
    },
    {
      "commit": "1eb8ef2584833f18fb674e127d59cb5a7f771482",
      "tree": "f5b09d4781de9a9b08839fefb6530e64d2d2ec31",
      "parents": [
        "5920990fecba7e2430af3cfaa8bcbaed40d0ba1a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 07 07:30:20 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 07 07:30:20 2005 +0000"
      },
      "message": "2005-04-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global): Fix up list loops to match changes in lib/linklist,\n\t  and some basic auditing of usage.\n\t* configure.ac: define QUAGGA_NO_DEPRECATED_INTERFACES\n\t* HACKING: Add notes about deprecating interfaces and commands.\n\t* lib/linklist.h: Add usage comments.\n\t  Rename getdata macro to listgetdata.\n\t  Rename nextnode to listnextnode and fix its odd behaviour to be\n\t  less dangerous.\n\t  Make listgetdata macro assert node is not null, NULL list entries\n          should be bug condition.\n          ALL_LIST_ELEMENTS, new macro, forward-referencing macro for use\n          with for loop, Suggested by Jim Carlson of Sun.\n          Add ALL_LIST_ELEMENTS_RO for cases which obviously do not need the\n          \"safety\" of previous macro.\n\t  LISTNODE_ADD and DELETE macros renamed to ATTACH, DETACH, to\n\t  distinguish from the similarly named functions, and reflect their\n\t  effect better.\n\t  Add a QUAGGA_NO_DEPRECATED_INTERFACES define guarded section\n\t  with the old defines which were modified above,\n\t  for backwards compatibility - guarded to prevent Quagga using it..\n\t* lib/linklist.c: fix up for linklist.h changes.\n\t* ospf6d/ospf6_abr.c: (ospf6_abr_examin_brouter) change to a single\n\t  scan of the area list, rather than scanning all areas first for\n\t  INTER_ROUTER and then again for INTER_NETWORK. According to\n\t  16.2, the scan should be area specific anyway, and further\n\t  ospf6d does not seem to implement 16.3 anyway.\n"
    },
    {
      "commit": "462f20d50c8f86c26904f1c7316d910c2b83ae41",
      "tree": "3edbff28c76bdb8e1c66ea5153b1cb58d40f15aa",
      "parents": [
        "c3c07f28dcd226975b5ed0c1f8842f51968a3288"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 23 11:29:02 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 23 11:29:02 2005 +0000"
      },
      "message": "\t* ospf_lsa.h: New flag to the LSA structure for the SPF calculation.\n\t* ospf_lsdb.h: Export ospf_lsdb_clean_stat() function.\n\t* ospf_spf.h: Add link to the LSA stat structure into vertex.\n\t* ospf_spf.c: New functions cmp() and update_stat() to manage\n\t  candidates. Remove ospf_spf_has_vertex(), ospf_vertex_lookup(),\n\t  ospf_install_candidate() and ospf_spf_register() functions not needed\n\t  any more. Update ospf_vertex_new(), ospf_spf_next() and\n\t  ospf_spf_calculate() functions to use pqueue instead of linked list.\n"
    },
    {
      "commit": "2a42e285ed1b3891a479e52bf0bab958d68ca18e",
      "tree": "7f58188e992943424474199f11849f04ce62c665",
      "parents": [
        "e588f21f2adae26eaee8789bacc3a45002e86e94"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 18:43:03 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 18:43:03 2004 +0000"
      },
      "message": "2004-12-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* *.c: Change level of debug messages to LOG_DEBUG.\n"
    },
    {
      "commit": "eb1ce6059a00f3f0dd92c965aa5982907b54c00d",
      "tree": "ebd6583ba2f2f9909c25653d0349662e08c26ecf",
      "parents": [
        "2e864cfa12724ec20e82f0a24e1be5929e3a0cef"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Oct 08 08:17:22 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Oct 08 08:17:22 2004 +0000"
      },
      "message": "Compiler warnings fixes round 1.\n"
    },
    {
      "commit": "52dc7ee65f8d887b0730abc0a5d44d27fc6ecafd",
      "tree": "a557339540c56dd3953c29a50ca0e48c1911efc8",
      "parents": [
        "44983cf8a9c587dfbcad294b9dfe4dccbb68ba98"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Sep 23 19:18:23 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Sep 23 19:18:23 2004 +0000"
      },
      "message": "Remove usage of evil list and listnode typedefs.\n"
    },
    {
      "commit": "630e48072a4a4685a7c04a7b73ae9170d2f0844a",
      "tree": "1a343e551a0ce24d8c8c93aa62860742749355ee",
      "parents": [
        "94755ea13e9466fc4590994b551dc23a44571622"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Tue Aug 31 17:28:41 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Tue Aug 31 17:28:41 2004 +0000"
      },
      "message": "Assorted changes from work at BBN.  Most are minor, and several are in\nsupport of more significant changes not in this commit.  The last item\nin the ChangeLog below may be needed for p2mp to work correctly.\n\n2004-08-31  David Wiggins  \u003cdwiggins@bbn.com\u003e\n\n\t* hash.c (hash_iterate): Save next pointer before calling\n\tprocedure, so that iteration works even if the called procedure\n\tdeletes the hash backet.\n\n\t* linklist.h (listtail): new macro, not yet used.\n\n2004-08-31  David Wiggins  \u003cdwiggins@bbn.com\u003e\n\n\t* ospf_spf.c (ospf_spf_calculate): Many more comments and debug\n\t  print statements.  New function ospf_vertex_dump used in debugging.\n\n2004-08-31  David Wiggins  \u003cdwiggins@bbn.com\u003e\n\n\t* ospf_spf.h (struct vertex): Comments for flags and structure members.\n\n2004-08-31  David Wiggins  \u003cdwiggins@bbn.com\u003e\n\n\t* ospf_route.c: When finding an alternate route, log cost as well.\n\n2004-08-31  David Wiggins  \u003cdwiggins@bbn.com\u003e\n\n\t* ospf_interface.c (ospf_lookup_if_params): Initialize af in\n\tstruct prefix allocated on stack.\n\n2004-08-31  David Wiggins  \u003cdwiggins@bbn.com\u003e\n\n\t* ospf_packet.c (ospf_ls_ack_send_delayed): In p2mp mode, send\n\tacks to AllSPFRouters, rather than All-DR.\n"
    },
    {
      "commit": "d7d93997315472f2f1f40012795e31604db95491",
      "tree": "3161675e2d3f96491d3bbb57b1f6e28153d9ae00",
      "parents": [
        "7225687afa5a7c7efafbea9b737673762daaa395"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Fri Aug 27 12:03:42 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Fri Aug 27 12:03:42 2004 +0000"
      },
      "message": "2004-08-27  David Wiggins  \u003cdwiggins@bbn.com\u003e\n\n        * ospf_spf.c (ospf_nexthop_calculation): Initialize address family\n          in on-stack struct prefix_ipv4.  Fixes point-to-multipoint SPF\n          calculation.\n"
    },
    {
      "commit": "75ee0b8eed29619b98c67dcb5f6b10e1c8f201ae",
      "tree": "ebbf492147767a7161e48cb2ece2e0d36b061abe",
      "parents": [
        "049207c31d9b5da023c6c2e3689b771010098f94"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Aug 05 09:10:31 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Aug 05 09:10:31 2004 +0000"
      },
      "message": "2004-08-04 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * ospf_spf.c: (ospf_spf_consider_nexthop) Add comment about issue.\n          Compare only against list head - all nexthops must be same cost\n          anyway, fixes a reference-listnode-after-delete bug noted by\n          Kir Kostuchenko.\n          (ospf_nexthop_calculation) Use ospf_spf_consider_nexthop for all\n          candidates attached to root.\n"
    },
    {
      "commit": "d355bfa7806c77ec40e789dfb8226778ec7c36f5",
      "tree": "2ee5a4bbf85191ac0a2a5ce2af3cacf8b68789fb",
      "parents": [
        "81b81822da6e90f9f04645d63f70ac0a5a924ff4"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 08 07:43:45 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 08 07:43:45 2004 +0000"
      },
      "message": "2004-04-08 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * ospf_spf.h: Add backlink field to struct vertex\n        * ospf_spf.h: (ospf_vertex_new) initialise backlink\n          (ospf_lsa_has_link) return index of link back to\n          vertex V from candidate vertex W, or -1 if no link exists.\n          (ospf_spf_next) save backlink index for candidate vertex\n        * ospf_interface.c: (ospf_vl_set_params) Use the backlink index\n          to determine correct address for virtual-link peers. Fall back\n          to older \"pick first link\" method if no backlink index exists.\n"
    },
    {
      "commit": "fa2b17e39499a77f41a719035a588b7fb63cec63",
      "tree": "3356703917aaa8359e0106ae3c2340ee6eea0e1f",
      "parents": [
        "caa6f8ac7d07f8cd3269255e6dce6d248f74af62"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 04 17:45:00 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 04 17:45:00 2004 +0000"
      },
      "message": "Many warning fixes from PC Drew ([quagga-dev 940]) and removing using PAGER\nfrom vtysh ([quagga-dev 932]).\n"
    },
    {
      "commit": "96735eeafe4713b60700915dd2fb6dcbd0f09c8f",
      "tree": "49b7f583956e3d7ad91dcfa006d18e20f57efe15",
      "parents": [
        "286e1e71538440ed0bef4576aded1745191490d3"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Aug 10 02:51:22 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Aug 10 02:51:22 2003 +0000"
      },
      "message": "2003-08-10 amir \u003camir@datacore.ch\u003e\n\n\t* Add missing \u0027i\u0027 to getopts, short form of --pid_file.\n\t  see http://bugzilla.quagga.net/show_bug.cgi?id\u003d25\n"
    },
    {
      "commit": "0c0f9cd54b1ade198a0b92fc48844710e2a89f94",
      "tree": "2303a0aa96e067a753aaddef3156eae17c11ec93",
      "parents": [
        "592c8148981d196a7bda2f1b85a63943fd0cfdf2"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 06 23:27:04 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 06 23:27:04 2003 +0000"
      },
      "message": "2003-06-07 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* (ospf_spf.c): Fix indentation - primarily the mix of tabs and spaces.\n\tRan through indent -nut (GNU style, but only spaces for indentation)\n"
    },
    {
      "commit": "bf9392c6e932080156e70c0436977fd5dbcdb0cd",
      "tree": "06ba8c7108ffcc36b3fc93b10ceeaf2ef1f41f01",
      "parents": [
        "79cb216984c0f93e80e01e9fed6022ad27a25825"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 06 23:23:36 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 06 23:23:36 2003 +0000"
      },
      "message": "2003-06-7 kamatchi soundaram \u003ckamatchi@tdd.sj.nec.com\u003e\n\n\t* (ospf_spf.c): Fix consideration of costs for PtP nexthops in\n\t  ospf_nexthop_calculation().\n"
    },
    {
      "commit": "020709f9939c542e96b12f06522ad5e33d8cf445",
      "tree": "767b3cb9a8a17913d8395c8d5ecf7485ae882b8e",
      "parents": [
        "d18258304a79b459fe768e63f27efd17aa1fa78f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Apr 04 02:44:16 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Apr 04 02:44:16 2003 +0000"
      },
      "message": "2003-04-04 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * Sync to Zebra CVS\n        * Fix lib/thread.h leak\n        * Fix small Opaque LSA leak\n        * Do not configure OSPF interfaces for secondary addresses\n        * vtysh fixes from Hasso\n        * Dave Watson\u0027s missing ntohs fix\n"
    },
    {
      "commit": "6898008484a562ff5bae178a6fb0bd885fe8b1e5",
      "tree": "27797ca6532ca0ef85f538ac8f3070639e579229",
      "parents": [
        "1ef74ef70bdab672458c4d1e4cea24197066c0af"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 25 05:07:42 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Mar 25 05:07:42 2003 +0000"
      },
      "message": "2003-03-25 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* sync to latest zebra CVS\n\t* spec file: updated and added define for ospf-api/client\n\nNB: OSPF-API has been broken by the zebra.org changes, which\nhas added struct ospf * as a new arg to many functions\n"
    },
    {
      "commit": "7afa08da2d3690baee1739da400775f8543f5863",
      "tree": "e050940bb5e77b4cbaed844b689bbd543e2372c7",
      "parents": [
        "30961a15cf3837b62c65d4c0ecf3ee05f4b6bf55"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:59:45 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:59:45 2002 +0000"
      },
      "message": "ospfd Point-to-Multipoint support\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
