)]}'
{
  "log": [
    {
      "commit": "443010383e2c8e5dc1bc722d9e22a97c513b4647",
      "tree": "567e65b01392dcc8183ee92648d2d56709035c43",
      "parents": [
        "4bab6806914dbb4b43f376ebf966a034a0ea72cd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 18:14:54 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:10 2014 +0000"
      },
      "message": "bgpd: remove unused variables\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": "ad5233a1bcdd7124992300673ad9c1035336eadd",
      "tree": "bde5fc3a4e11d7b66cada6edbcd0c4c04ef988b0",
      "parents": [
        "8306be211f1bcd5a19e74d08cde399e1b518ed25"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 14:19:57 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:51 2014 +0000"
      },
      "message": "Add set ipv6 next-hop peer-address command.\n\nIPv4 has the ability to specify the peer address with the keyword peer-address.\nIPv6 mandates the use of a specific global or local address only in setting the\nnext-hop in routemaps. This makes it cumbersome to configure some large networks\nwith BGP and IPv6. This patch fixes that deficiency.\n\nSigned-off-by: Dinesh G 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": "56a5f7752d9bf7297ea022544112909cf2ccba97",
      "tree": "557d29293e55e78f9f0cbb0c90a6acd1a111734c",
      "parents": [
        "d1b0991ad8404366811a7ccc86e76f70a1ba399e"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:58:04 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:30 2014 +0000"
      },
      "message": "Added show command to display only the routes in the RIB that does not count ECMPs\n\nSigned-off-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d1b0991ad8404366811a7ccc86e76f70a1ba399e",
      "tree": "08365369f345a4bbd1d3a3ff6c4abb32b13a97a1",
      "parents": [
        "b6eef003e1a79471addea0b01853b08aed812cc8"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:54:13 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:23 2014 +0000"
      },
      "message": "Make static IPv6 routes respect non-default routing tables.\n\nSigned-off-by: Nolan Leake \u003cnolan@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "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": "88d37b902bc8127379d3293b9671aa6a11479c23",
      "tree": "33ff1c38d47bfb7f940d56c53727aa9db31ddb40",
      "parents": [
        "9511633e08ff15c23608983fdc1bc735d427332e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org",
        "time": "Mon Nov 03 01:20:09 2014 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Nov 03 06:51:10 2014 +0100"
      },
      "message": "make some structures constant.\n\nThese pre-initialized arrays are not modified.\n\nSigned-off-by: Stephen Hemminger \u003cstephen@networkplumber.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "9511633e08ff15c23608983fdc1bc735d427332e",
      "tree": "afdafaae1cfcac87ac0934fdc32928e5aa8dc565",
      "parents": [
        "c68f6d9dbb9f910d3ee82e099655fff7c12ef856"
      ],
      "author": {
        "name": "Balaji",
        "email": "balajig81@gmail.com",
        "time": "Thu Oct 23 15:25:25 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 30 07:06:13 2014 +0100"
      },
      "message": "zebra: MBGP routes should not be installed in the kernel\n\nMBGP routes are used only for PIM RPF checks and hence should\nnot be installed in the kernel\u0027s FIB. Ignore route node set to Multicast\nSAFI.\n\nSigned-off-by: Balaji.G \u003cbalajig81@gmail.com\u003e\nAcked-by: Everton Marques \u003ceverton.marques@gmail.com\u003e\n[pushed down rn-\u003etable-\u003einfo assignment below assert]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c68f6d9dbb9f910d3ee82e099655fff7c12ef856",
      "tree": "b21eac804634d638e25e83beffc2cb45715759da",
      "parents": [
        "59135bde25441cd39cea0389467eb206fc9030c9"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 30 06:42:00 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 30 07:06:01 2014 +0100"
      },
      "message": "tests: fix tests for 055086f (well-known attr check)\n\nFix tests/aspathtest.c by including an ORIGIN attribute in the\ntestcases.  After 055086f \"bgpd: well-known attr check only run for\nv4/uni, which could cause a crash,\" we\u0027re now checking for it and tests\nare failing due to that.\n\nNote that test #11 (\"4b AS4_PATH w/o AS_PATH\") is no longer accepted as\nOK since the function now checks for the existence of an AS_PATH attr.\n\nFixes: 055086f (\"bgpd: well-known attr check only run for v4/uni\"...)\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "59135bde25441cd39cea0389467eb206fc9030c9",
      "tree": "6ddfde8fb46f0c3a92b60c1c3de93b82a93c1356",
      "parents": [
        "93b344f3b14390e3952ea9025ac5996ae9131148"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 30 06:19:15 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 30 06:47:06 2014 +0100"
      },
      "message": "build: fix 9562a77... (mrlg removal)\n\nmrlg.cgi was removed in 9562a77 \"mrlg: Remove obsolete version.\" but the\nfile was still listed in Makefile.am.\n\nFixes: 9562a77 (\"mrlg: Remove obsolete version.\")\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "93b344f3b14390e3952ea9025ac5996ae9131148",
      "tree": "26f9f14848768bd7bc77fc28c1469b970c41e84a",
      "parents": [
        "773224404cb33b2dbd3d8d8d2572013603995ce4"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Oct 28 14:52:49 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Oct 28 14:55:09 2014 +0100"
      },
      "message": "Revert \"zebra: Set link-detect on by default\"\n\nThis reverts commit 773224404cb33b2dbd3d8d8d2572013603995ce4.\n\nThis patch is nontrivial but wasn\u0027t passed along on the mailing list;\nthis is a revert purely on procedural reasons.\n\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "773224404cb33b2dbd3d8d8d2572013603995ce4",
      "tree": "43a4c9582fd6b8befbebbc35d3980458ac0309cf",
      "parents": [
        "aed1b556cf2f55680ae09d7ad1a1f22729dea8c5"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:39:24 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 28 11:06:00 2014 +0000"
      },
      "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"
    },
    {
      "commit": "aed1b556cf2f55680ae09d7ad1a1f22729dea8c5",
      "tree": "26f9f14848768bd7bc77fc28c1469b970c41e84a",
      "parents": [
        "9562a7774b76df050d3e01632c6203796dc72c87"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Oct 21 16:59:01 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 28 10:46:24 2014 +0000"
      },
      "message": "bgpd: Fixes for recent well-known-attr check patch.\n\n* bgp_attr.c: Recent patch to tighten well-known attr checks and apply that\n  to all AFIs has some breakage with MP-extensions and GR, which needs to be\n  fixed.\n  (bgp_attr_check) Graceful Restart EoR can be an empty UPDATE for IPv4/uni.\n  MP-Ext allow UPDATE with just MP_UNREACH_NLRI. Check for these and return\n  proceed.\n  NEXT_HOP becomes optional, if MP_REACH_NLRI is present and there\u0027s no\n  v4 NLTI, update NEXT_HOP check accordingly.\n  Print the missing attr in string form in the log message.\n  (bgp_attr_parse) AS_PATH need not be there, so\n  bgp_attr_munge_as4_attrs call needs to be conditional on that.\n"
    },
    {
      "commit": "9562a7774b76df050d3e01632c6203796dc72c87",
      "tree": "0451dbb3d26323860d02894fa8b71dd8ac0977b4",
      "parents": [
        "f80ba04074f1211d857d08d6deddc41d029be1c7"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Oct 21 10:59:45 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 28 10:46:24 2014 +0000"
      },
      "message": "mrlg: Remove obsolete version.\n\n* mrlg.cgi: The version we shipped was very much  out of date, remove it.\n* mrlg.txt: Add file pointing to the official MRLG site.\n"
    },
    {
      "commit": "f80ba04074f1211d857d08d6deddc41d029be1c7",
      "tree": "9ce24dbe25f76eb2dab1083cc93e0ed5cb56d4bd",
      "parents": [
        "6b274d90fa9b0c9f43e3ca9494cd78df1ccad14e"
      ],
      "author": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 13:03:14 2014 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 16:59:57 2014 +0100"
      },
      "message": "Handy guidelines to contribute\n\nExplain how to be a nice contributor in a handy way.\n\nSigned-off-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.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": "3790eb0d3f0bbb24b9c6be97f547cec144ee05d1",
      "tree": "08ccf694b43a92568a1278aa28374dcd09d4b0fe",
      "parents": [
        "bdd8cd70a042473477f9144c9cedb8dde11ba2c1"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Jan 13 00:32:43 2010 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 16:08:22 2014 +0100"
      },
      "message": "stream: remove unused stream_read_unblock\n\nThe one place this was being used in BGP is now gone,\ncan remove deprecated interface.\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "bdd8cd70a042473477f9144c9cedb8dde11ba2c1",
      "tree": "edcdbc4b096f4c5b1dc1d72d32d2db81c9fa3c7c",
      "parents": [
        "ea2a598411cc7bd20456849e56bbc9e93c9916e7"
      ],
      "author": {
        "name": "Yasuhiro Ohara",
        "email": "yasu@jaist.ac.jp",
        "time": "Thu Dec 17 05:41:17 2009 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 16:01:08 2014 +0100"
      },
      "message": "Bug in ospf6_lsa_compare()\n\nThis fix is probably correct on 32bit systems,\nbut i think it will not work on 64bit systems.\nsizeof(signed long) would be 8 and therefore the\ncast from u_int32_t will map all the values to\nnon-negative part of long int.\n\nYou would like to use int (like in ospfd) and\nchange the type of seqnuma, seqnumb to that.\n\nThe type int32_t would be even more proper, but\nsizeof(int) is 4 on relevant platforms.\n\nSigned-off: Ondrej Zajicek \u003csantiago@crfreenet.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Yasuhiro Ohara \u003cyasu@jaist.ac.jp\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": "969d3550a8cbb07f8b4d5ebe8dde5064f8260140",
      "tree": "f43d5c74ed758af6b1181ce03163ebf2504a1271",
      "parents": [
        "384d7ad98c109e92eaf65bf10a3256e5657639c3"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Tue Oct 21 06:24:07 2014 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 14:37:55 2014 +0100"
      },
      "message": "zebra: route_unlock_node is missing in \"show ip[v6] route \u003cprefix\u003e\" commands\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Vincent Jardin \u003cvincent.jardin@6wind.com\u003e\n"
    },
    {
      "commit": "384d7ad98c109e92eaf65bf10a3256e5657639c3",
      "tree": "b279059f854eed239d7b8834270adecd49d9108d",
      "parents": [
        "7a6eec54eaffa82f4f03363314bb81c400eb2a66"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 16:09:10 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:10:21 2014 +0100"
      },
      "message": "docs: defines.texi include seems to want to be after setfilename\n\n* quagga.texi: I\u0027m getting warnings about stuff in defines.texi not being\n  defined when building quagga.info. Seems to be fixed by moving the include\n  of defines.texi to the end of the header. Also, the Texinfo docs suggest\n  setfilename must go first.\n"
    },
    {
      "commit": "7a6eec54eaffa82f4f03363314bb81c400eb2a66",
      "tree": "b2dcf76eb7a2c769bdd0f173c31bbe207a609fd4",
      "parents": [
        "f6444e4f6e1664f49f7552f894c8c94e45dd3c35"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 10:51:41 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "zebra: Build the test client, can be useful, and add IPv6 to testrib.conf\n"
    },
    {
      "commit": "f6444e4f6e1664f49f7552f894c8c94e45dd3c35",
      "tree": "fd7c0c86bf0ab3525056a37d3fce9d70e2a0d6f9",
      "parents": [
        "055086f70febc30fdfd94bb4406e9075d6934cd8"
      ],
      "author": {
        "name": "Olivier Cochard-Labbé",
        "email": "olivier@cochard.me",
        "time": "Thu Oct 09 10:28:21 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "FreeBSD has changed its SOCK_RAW for being truly raw.\n"
    },
    {
      "commit": "055086f70febc30fdfd94bb4406e9075d6934cd8",
      "tree": "2f511a8b1aca7b3e67e895321bbfef7d02f074b1",
      "parents": [
        "b166ea2dda9f04a8b75e0bf5adb7064580695f22"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Sep 23 15:23:01 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "bgpd: well-known attr check only run for v4/uni, which could cause a crash.\n\n* ANVL testing by Martin Winter threw up a crash in bgpd in aspath_dup\n  called from bgp_packet_attribute, if attr-\u003easpath was NULL, on an IPv6\n  UPDATE.\n\n  This root cause is that the checks for well-known, mandatory attributes\n  were being applied only if an UPDATE contained the IPv4 NLRI and the\n  peer was configured for v4/unicast (i.e. not deconfigured). This is\n  something inherited from GNU Zebra, and never noticed before.\n\n* bgp_attr.c: (bgp_attr_parse) Move the well-known mandatory attribute\n  check to here, so that it can be run immediately after all attributes\n  are parsed, and before any further processing of attributes that might\n  assume the existence of WK/M attributes (e.g. AS4-Path).\n  (bgp_attr_munge_as4_attrs) Missing AS_PATH shouldn\u0027t happen here anymore,\n  but retain a check anyway for robustness - it\u0027s definitely a hard error\n  though.\n* bgp_attr.h: (bgp_attr_check) No longer needs to be exported, make static.\n* bgp_packet.c: (bgp_update_receive) Responsibility for well-known check\n  now in bgp_attr_parse.\n"
    },
    {
      "commit": "b166ea2dda9f04a8b75e0bf5adb7064580695f22",
      "tree": "40b9468412819c0eab55798f816f6a8e1c58a4c0",
      "parents": [
        "18f420e9f99e7f6557cf5877673cd6e71ac32192"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "joakim.tjernlund@transmode.se",
        "time": "Thu Jun 25 16:40:06 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "[lib] Add support for backtrace on more platforms\n\n* lib/sigevent.c: (program_counter) extend to support more platforms. Joint\n  effort with Paul Jakma.\n"
    },
    {
      "commit": "18f420e9f99e7f6557cf5877673cd6e71ac32192",
      "tree": "1e43af3642283cb3660332624d2c58e558fe48ad",
      "parents": [
        "16f1606382b77ac6b951ea0de15384fcbc1df73f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 16:55:46 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:01 2014 +0100"
      },
      "message": "lib/plist: Add some required parentheses, according to clang-analyzer\n"
    },
    {
      "commit": "16f1606382b77ac6b951ea0de15384fcbc1df73f",
      "tree": "59382d4a4893c7cc69b55f1e9e9a27c59832765c",
      "parents": [
        "7bef33cbf5027189bd55e4890a07a6bef8277f93"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 15:35:54 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:33:21 2014 +0100"
      },
      "message": "ripng_nexthop: remove unused store to variable\n"
    },
    {
      "commit": "7bef33cbf5027189bd55e4890a07a6bef8277f93",
      "tree": "744283cc2493348e042a278062743d3ecf00abf0",
      "parents": [
        "b2dd59ee0e74926278e128846624f5c93288223b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 15:35:15 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:33:21 2014 +0100"
      },
      "message": "ospf6_lsdb: trivial, make it clear that showfunc is set before deref.\n"
    },
    {
      "commit": "b2dd59ee0e74926278e128846624f5c93288223b",
      "tree": "d54b3798315a2b0b46f8730747584eff75b5e370",
      "parents": [
        "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 15:34:48 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:33:20 2014 +0100"
      },
      "message": "bgpd.c: Remove unused store to variable\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": "010ebbbca6396f272cc2d50d147dd922dda68213",
      "tree": "99e92b1795d61adfa554e1cc00e998697962fcc9",
      "parents": [
        "ea55500409651b0f8fd2c8a02fdbf245acc96dd8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 16 11:53:49 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Sep 19 22:14:55 2014 +0100"
      },
      "message": "Add missing GPL headers, and copyright claims that certainly apply.\n\n* Fix (a subset of)? files with non-trivial code that are missing GPL headers.\n\n* A few copyright claims added which I am certain apply, but which I had\n  missed out on the original commits.\n\nNB: Copyright claims are not exclusive and the addition of any copyright\nclaim should not be read as implying a lack of any further claims, or\ndenying the validity of any other claims.  All those with claims of\ncopyright over any portion of Quagga are welcome to submit them, ideally as\npatches to update copyright strings in files.\n"
    },
    {
      "commit": "ea55500409651b0f8fd2c8a02fdbf245acc96dd8",
      "tree": "74f195200f595ae96363e007103e77654ace3f4d",
      "parents": [
        "d4a8607d12e1d3f655055647f1633ec154685545"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jul 28 16:36:14 2009 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Sep 19 22:14:54 2014 +0100"
      },
      "message": "lib: Improve error reporting from broken config files\n\n* command.h: (config_from_file) Add variable to interface for line\n      number reporting.\n    * command.c: (config_from_file) Set \u0026 increment \u0027line_num\u0027 while parsing.\n    * vty.c: (vty_read_file) Report parse errors in the correct order to\n      stderr, with added line numbers.\n"
    },
    {
      "commit": "d4a8607d12e1d3f655055647f1633ec154685545",
      "tree": "17e6c34b6d00a823715dbd89c3e120f2bba2c505",
      "parents": [
        "615f9f18fc025757a255f936748fc1e86e922783"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 19 12:02:42 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Sep 19 22:14:54 2014 +0100"
      },
      "message": "HACKING: remove an unneeded escape\n"
    },
    {
      "commit": "615f9f18fc025757a255f936748fc1e86e922783",
      "tree": "b9cd79ef71984932f4eb5f73437f9593ad2a2604",
      "parents": [
        "3493b7731b750cbc62f00be94b624a08ccccf0b2"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 18 23:52:02 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:38:56 2014 +0200"
      },
      "message": "lib: include thread information in backtraces\n\nnow that we know what thread we\u0027re currently executing, let\u0027s add that\ninformation to SEGV / assert backtraces.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3493b7731b750cbc62f00be94b624a08ccccf0b2",
      "tree": "4ea2444ddc197001b26f0b9b6e7cc2adb2bb29d2",
      "parents": [
        "621e2aaf33d8ab73bf44b0eea3f3900135d34996"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 18 23:04:27 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:38:48 2014 +0200"
      },
      "message": "lib: unstupidify thread debug information\n\nthe library\u0027s thread scheduling functions keep track of the thread\nfunction\u0027s name, so far so good.  However, copying the compiler-provided\nconstant into a buffer inside the thread structure is plain useless.\nAlso, strip_funcname() was trying to support something that never\nhappens.\n\nInstead, let\u0027s use some bytes here to track where threads are scheduled\nfrom.  Another commit will print that information on crashes.\n\nRipping out useless stuff:  -64 bytes in the thread structure\nRe-add as const ptr:         +8 bytes\nExtra debug info:           +12 bytes\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "621e2aaf33d8ab73bf44b0eea3f3900135d34996",
      "tree": "a97a9b0c33a6591ade083afbe7ed8eb46100a651",
      "parents": [
        "0b74a0a5db7bcf65bf68c44b547b02b1310b5cdb"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Fri Jul 11 07:52:15 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:37:14 2014 +0200"
      },
      "message": "zebra: fix rtnh_len in the rt_netlink messages for multipath case\n\nIn _netlink_route_build_multipath():\n- Each time when appending a IPv4 gateway in the message, rtnh_len\n  is increased by sizeof (struct rtattr) + 4, where we should use\n  \"bytelen\" instead of the hard coding \"4\".\n- As what done for IPv4, we should increase rtnh_len accordingly\n  along with adding a IPv6 gateway, or else the IPv6 gateways will\n  be lost.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0b74a0a5db7bcf65bf68c44b547b02b1310b5cdb",
      "tree": "d767a50f61d6dddaf145e8273e859fb29d74687f",
      "parents": [
        "b397cf4f0fc484c5ebfc8a680090055c8e6cbe32"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Fri Jul 18 06:13:19 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:37:08 2014 +0200"
      },
      "message": "ripd: allow to enable/disable the ECMP feature\n\nIntroduce a new command \"[no] allow-ecmp\" to enable/disable the\nECMP feature in RIP. By default, ECMP is not allowed.\n\nOnce ECMP is disabled, only one route entry can exist in the list.\n\n* rip_zebra.c: adjust a debugging information, which shows the number\n               of nexthops according to whether ECMP is enabled.\n* ripd.c: rip_ecmp_add() will reject the new route if ECMP is not\n          allowed and some entry already exists.\n          A new configurable command \"allow-ecmp\" is added to control\n          whether ECMP is allowed.\n          When ECMP is disabled, rip_ecmp_disable() is called to\n          remove the multiple nexthops.\n* ripd.h: Add a new member \"ecmp\" to \"struct rip\", indicating whether\n          ECMP is allowed or not.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b397cf4f0fc484c5ebfc8a680090055c8e6cbe32",
      "tree": "b1fe14811932e92ac87f7ddcad8660061b15cd51",
      "parents": [
        "1520e4748129c4eb97ac3090bcc97149a1900611"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Fri Jul 18 06:13:18 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:36:54 2014 +0200"
      },
      "message": "ripd: add ECMP support\n\n* Each node in the routing table is changed into a list, holding\n  the multiple equal-cost paths.\n\n* If one of the multiple entries gets less-preferred (greater\n  metric or greater distance), it will be directly deleted instead\n  of starting a garbage-collection timer for it.\n  The garbage-collection timer is started only when the last entry\n  in the list gets INFINITY.\n\n* Some new functions are used to maintain the ECMP list. And hence\n  rip_rte_process(), rip_redistribute_add() and rip_timeout() are\n  significantly simplified.\n\n* rip_zebra_ipv4_add() and rip_zebra_ipv4_delete() now can share\n  the common code. The common part is moved to rip_zebra_ipv4_send().\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1520e4748129c4eb97ac3090bcc97149a1900611",
      "tree": "f4501a77bcb9e3ecabfd9dd5f80ee3e71cb35119",
      "parents": [
        "342a31bfda21616209366679ac522471e5772a2f",
        "90444ca35e3037ed43ec695428f0ef6d82f9a320"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 19 18:15:40 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 19 18:15:40 2014 +0200"
      },
      "message": "*: merge branch stable/0.99.23\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "90444ca35e3037ed43ec695428f0ef6d82f9a320",
      "tree": "441582b4f1ee1118f6b9b696fed65a2c38064503",
      "parents": [
        "ad2f92b6b07883f6a2a26499eab1776933185960"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jul 01 16:14:05 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 18:16:28 2014 +0200"
      },
      "message": "lib: unset ZEBRA_IFA_PEER if no dst addr present (BZ#801)\n\nOn OpenBSD, carp interfaces claim to be PtP interfaces with a 0.0.0.0/0\npeer address.  We process those in zebra and try to send them to\nclients, at which point they get encoded as all-0.  The client code,\nhowever, decodes that to a NULL pointer instead of 0.0.0.0.  This later\nturns into a SEGV when CONNECTED_PREFIX sees that ZEBRA_IFA_PEER is set\nand tries to access the peer prefix.\n\nThis is a band-aid fix for stable/0.99.23, a long-term solution needs\nsome conceptual improvements on the entire thing.\n\n(The usefulness of a PtP-to-0.0.0.0/0 is a separate question;  at this\npoint dropping the peer prefix seems the least intrusive solution.)\n\nReported-by: Laurent Lavaud \u003claurent.lavaud@ladtech.fr\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ad2f92b6b07883f6a2a26499eab1776933185960",
      "tree": "8bc8790cf92b37ff2cd02e5000a3332e053feae5",
      "parents": [
        "4c005e3f65a1f5b4592b1ebbac392cbb1a710998"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 18:05:25 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 18:16:28 2014 +0200"
      },
      "message": "isisd: type mix-up in 28a8cfc \"don\u0027t require IPv4\"\n\nWhoops, these are in6_addrs, not prefix_ipv6... funnily enough, it does the\nright thing either way, if it compiles, which it only does on Linux because\nIN6_IS_ADDR_LINKLOCAL contains a cast to the right type.  On BSD there is no\nsuch cast, hence it explodes on trying to compile, trying to access struct\nmembers of in6_addrs while operating on prefix_ipv6...\n\nFixes: 28a8cfc (\"isisd: don\u0027t require IPv4 for adjacency\")\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4c005e3f65a1f5b4592b1ebbac392cbb1a710998",
      "tree": "ec2feadf6fe20841a179d31714a053863919ae1e",
      "parents": [
        "3ef0b877f08344aa52367794aa4ec32b12becd6d"
      ],
      "author": {
        "name": "John Glotzer",
        "email": "glotzer@amazon.com",
        "time": "Mon Aug 04 19:39:23 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:52:26 2014 +0200"
      },
      "message": "bgpd: memmove needed in community_del_val\n\nIn bgpd/bgp_community_del_val memcpy is used for potentially overlapping\nregions which is *not* safe. It may \"work\" in some cases but is not\nguaranteed to work in all cases. The case that I saw fail was on an\nx86_64 architecture with the number of bytes being moved/copied equal to\n8.\n\nThe way the code is written the uint32_t pointers will always differ by\n1, which is equivalent to a memcpy/memmove of regions that are 4 bytes\naway from one another. So the code failed while copying an 8 byte region\nto an address that is 4 bytes lower i.e. overlapping regions.\n\nInterestingly, the same architecture had no problems with a 12 byte\ncopy.\n\nWhen the code failed the communities were [200,300,400] and a call was\nmade to delete the 200 community. The result of this was an array that\nlooked like [400,400] which was uniquified to [400]. Of course the\nexpected result should have been [300, 400].\n\nOne additional point - in our production environment memmove would not\n*link* without including \u003cstring.h\u003e but in an isolated quagga git repo\nthis #include does not seem to be required and I see memmove is used in\nvtysh.c without this #include either.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3ef0b877f08344aa52367794aa4ec32b12becd6d",
      "tree": "3a8f27bf01700918ecb4c2fec4fa0ecfaff65744",
      "parents": [
        "c299ed717eea4dbf7ca3581bcba05ff09f79276c"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Jul 29 09:41:56 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:50:26 2014 +0200"
      },
      "message": "build: do not assume glibc on linux\n\nThe whole IPv6 stack detection could need refactoring. But this\nfixes the linux check to not assume glibc. Fixes build against\nmusl c-library.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c299ed717eea4dbf7ca3581bcba05ff09f79276c",
      "tree": "1c5bcdf75892ef9958edc8f38dd7f01922f0e57d",
      "parents": [
        "16ffb26fbbf8b3d1fee7a14eb401ecb02eed5058"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Jul 29 09:41:55 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:50:23 2014 +0200"
      },
      "message": "zebra: fix struct msghdr initializers\n\nstruct msghdr field orders are not strictly specified in POSIX.\nImprove portability by using designated initializer. This fixes\nbuild against musl c-library where struct msghdr is POSIX\ncompliant (Linux kernel and glibc definitions are non-conforming).\n\nAs the result is also more readable, struct iovec initilizers\nwere also converted.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "16ffb26fbbf8b3d1fee7a14eb401ecb02eed5058",
      "tree": "f1abb4a88c2677f1e405a855be200056c5c2bc4e",
      "parents": [
        "28a8cfcbc3a5cc74bb3b87981b878f8b4edc2dd6"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Jul 29 09:41:54 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:50:19 2014 +0200"
      },
      "message": "*: fix detection and usage of sys/cdefs.h\n\nThis header is non-standard (though present on many systems) and\nthere is no standard for what it should or should not define.\n\nRemove it where it is not really needed. But add also a configure\ncheck, so it can be used if available but otherwise fallback to\ndefining the needed macroes.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "28a8cfcbc3a5cc74bb3b87981b878f8b4edc2dd6",
      "tree": "55316289799b819a7170f908d4cf8c2f24350c99",
      "parents": [
        "8b16ed74fa61523c3348d2584b66a56a8ad4e350"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 13:48:18 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:49:32 2014 +0200"
      },
      "message": "isisd: don\u0027t require IPv4 for adjacency\n\nThis was precluding isisd from IPv6-only operation; no adjacency would\ncome up unless there was IPv4 in parallel.\n\nReported-by: Martin Winter \u003cmwinter@netdef.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8b16ed74fa61523c3348d2584b66a56a8ad4e350",
      "tree": "fe7232f0df942ca8f8bbc386f5089c13d1ec452a",
      "parents": [
        "f57000c0dbdd0e30e71b6651022392f284201e19"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jul 06 22:33:48 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:49:17 2014 +0200"
      },
      "message": "tests/bgpd: don\u0027t hardcode error number (fix f57000c)\n\nf57000c (\"bgpd: don\u0027t send NOTIFY twice for malformed attrs\") introduces\nBGP_ATTR_PARSE_ERROR_NOTIFYPLS as additional error code that implies the\ncaller should sent a NOTIFY and convert it to BGP_ATTR_PARSE_ERROR.\nSadly, the latter was hardcoded in bgp_mp_attr_test.c, which now didn\u0027t\nconsider the new value to be an error.\n\nMake the testcase treat all nonzero values as error without discern.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "342a31bfda21616209366679ac522471e5772a2f",
      "tree": "359be93388f4efe5283b291f322c78c9e2389f0f",
      "parents": [
        "052573ee2319b21657a79e1b76a5c801701fa38c"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Wed Jun 25 07:43:15 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 02 19:30:20 2014 +0200"
      },
      "message": "ripd: use only one constant for derivation\n\nRIP_MAX_RTE is defined in ripd.h as 25 but is in fact the\nresult of a formula. More over it is not used in the code:\nthe code itself includes the fomula. This makes it un-clear\nfor maintenance.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "052573ee2319b21657a79e1b76a5c801701fa38c",
      "tree": "32a731414c3b0a70516461befd9c22baf77b0587",
      "parents": [
        "0ff692ed59696c534e6bfd0f9d6e83706fbbec4a",
        "f57000c0dbdd0e30e71b6651022392f284201e19"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:52:52 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:52:52 2014 +0200"
      },
      "message": "*: merge branch stable/0.99.23\n\nbgp extcommunity fixes from stable branch\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f57000c0dbdd0e30e71b6651022392f284201e19",
      "tree": "9a00b90323fa93de9ecb10c65f9f82824fda99b8",
      "parents": [
        "bb02b82354a80f74706efc5e4c914b3f89fb033e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:01:10 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: don\u0027t send NOTIFY twice for malformed attrs\n\nMost of the attribute parsing functions were already sending a notify,\nlet\u0027s clean up the code to make it happen only once.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "bb02b82354a80f74706efc5e4c914b3f89fb033e",
      "tree": "d7662f309686113478121b54859e048f44ee6ac2",
      "parents": [
        "f80f838b2f54738937ef1281b237710132195c44"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:01:00 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix IP endianness in debug message\n\ninet_ntop expects network byte order.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f80f838b2f54738937ef1281b237710132195c44",
      "tree": "e5dbb9062560ac02ad2e5baf62c8d820560c75d2",
      "parents": [
        "27bf90a14670283a899b96c56dd23f8413e0973e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:00:51 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix memory leak on malformed attribute\n\nWhen bgp_attr_parse returns BGP_ATTR_PARSE_ERROR, it may already have\nparsed and allocated some attributes before hitting that error.  Free\nthe attr\u0027s data before returning.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "27bf90a14670283a899b96c56dd23f8413e0973e",
      "tree": "e52498c5d70f6efef4d9a827b6974a2f597b2e30",
      "parents": [
        "73d78ea0153fd36a300be5fec2ef0fca34a67477"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:59:01 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix double free after extcommunity set (BZ#799)\n\nThe route-map extcommunity set code was incorrectly assuming that it\nowns the intern\u0027d struct ecommunity reference.  In reality, the intern\u0027d\nreference belongs to bgp_update_receive() and we\u0027re not supposed to\ntouch it in the route-map code.\n\nInstead, like all the other set commands, we use a on-heap but\nnon-intern\u0027d ecommunity to set the new value.  This is then either\nintern\u0027d in bgp_update_main/_rsclient() through bgp_attr_intern(), or\nfree\u0027d through bgp_attr_flush().\n\nThis fixes Bugzilla #799, which is that bgpd otherwise crashes with a\ndouble free.  The ecommunity got unintern\u0027d first in the route-map set\ncommand, then in bgp_update_receive().\n\nDebugged-by: Milan Kocian \u003cmilon@wq.cz\u003e\nReported-by: Florian S \u003cflorian@herrenlohe.de\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "73d78ea0153fd36a300be5fec2ef0fca34a67477",
      "tree": "a56383725b587c60c584db85cb1757588d3ea2ed",
      "parents": [
        "c460e5720c1101a6da53e5b753b736ac2c7981af"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:58:47 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: remove duplicate route-map extcommunity code\n\nroute_set_ecommunity_rt and _soo share almost all of their code.\nLet\u0027s remove one of the redundant copies.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c460e5720c1101a6da53e5b753b736ac2c7981af",
      "tree": "a60baf501e16e92a472e50bc2383bfd937ba0bfd",
      "parents": [
        "a4b5665f76d9e907a547c85c9c4a7a656c568b9d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:54:58 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix some bgp_update_main() attribute leaks\n\nbgp_update_main() wasn\u0027t doing anything to release attribute values\nset from route maps for two of its error paths.  To fix, pull up the\nappropriate cleanup from further down and apply it here.\n\nbgp_update_rsclient() doesn\u0027t have the issue since it immediately\ndoes bgp_attr_intern() on the results from bgp_{export,import}_modifier.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0ff692ed59696c534e6bfd0f9d6e83706fbbec4a",
      "tree": "04ce8991a879b756c389370b5b7a9329fa13bb7b",
      "parents": [
        "a4b5665f76d9e907a547c85c9c4a7a656c568b9d",
        "b304dcb8abc4e5b93f86a4024990980746e730be"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 11:57:26 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 11:57:26 2014 +0200"
      },
      "message": "bgpd: merge branch tteras/master~3 (b304dcb)\n\nroute-map tidying + next-hop-self all\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b304dcb8abc4e5b93f86a4024990980746e730be",
      "tree": "04ce8991a879b756c389370b5b7a9329fa13bb7b",
      "parents": [
        "9e7a53c179f6897128b24435452b5d3d0f8c715a"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue May 20 09:04:49 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:21:52 2014 +0300"
      },
      "message": "bgpd: route-map: share aspath object compilation code where possible\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "9e7a53c179f6897128b24435452b5d3d0f8c715a",
      "tree": "80a5cc6e9e6dc411587764d865a2bf5f489000ba",
      "parents": [
        "2aa640bd78b64821bde9a53ecdd1e96e91b20ae4"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Apr 24 10:22:37 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:20:20 2014 +0300"
      },
      "message": "bgpd: implement \"next-hop-self all\"\n\nAs specified in:\nhttp://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/command/irg-cr-book/bgp-m1.html#wp4972925610\n\nThis allows overriding next-hop for ibgp learned routes on an\nRR for reflected routes.\n\nEspecially useful for using iBGP in DMVPN setups. See:\nhttp://blog.ipspace.net/2014/04/changes-in-ibgp-next-hop-processing.html\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "2aa640bd78b64821bde9a53ecdd1e96e91b20ae4",
      "tree": "419c61e63e6484031512e69435cdeaa6695d9aca",
      "parents": [
        "a4b5665f76d9e907a547c85c9c4a7a656c568b9d"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue May 20 08:57:26 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:20:20 2014 +0300"
      },
      "message": "bgpd: fix route-map comments\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "a4b5665f76d9e907a547c85c9c4a7a656c568b9d",
      "tree": "686fd5fae670909514f25a23b1ff3f5ed0bb32e6",
      "parents": [
        "2c32ee5f04191c6ffae9c19621548bc72b00e3ba"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Jun 24 07:14:20 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Jun 24 07:14:20 2014 +0200"
      },
      "message": "release: 0.99.23\n"
    },
    {
      "commit": "2c32ee5f04191c6ffae9c19621548bc72b00e3ba",
      "tree": "e3b7e97bddc43f4d764e8ce54b245d75d995eca8",
      "parents": [
        "6b0655a25194c7c0331154edaa6124cf783e5e5e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 24 07:12:01 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 24 07:12:01 2014 +0200"
      },
      "message": "doc: update NEWS for 0.99.23 changes\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": "fdb913aedb5a9807ad60715e8badb4f25d57acea",
      "tree": "0146642cbd4e6234b21e088c789a801a58299d21",
      "parents": [
        "fd6f39a514093973bb0fb39484a0ed9615534c89"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Jun 03 18:42:25 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 18:43:07 2014 +0200"
      },
      "message": "build: Quagga 0.99.23-rc1\n\nthis is not a full release version, so neither release notes nor\ndocumentation are updated yet.  Also, signing the tag with my private\nGPG key instead of the Quagga one.\n"
    },
    {
      "commit": "fd6f39a514093973bb0fb39484a0ed9615534c89",
      "tree": "a5365a15610b6d02ad8e761013b65e26637c1700",
      "parents": [
        "404fd2974fb53340be6d570b86f2f6f4c0a100c6"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Wed Feb 19 09:05:05 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:48:14 2014 +0200"
      },
      "message": "isisd: ignore the unrecognized TLVs\n\nWhen processing LSPDUs, the unrecognized TLVs/sub-TLVs should be\nsilently ignored.\n\nIn parse_tlvs(), ISIS_WARNING is returned once an unrecognized TLV\nexists. It breaks the processing in lsp_authentication_check() and\nlsp_update_data(). So remove it.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "404fd2974fb53340be6d570b86f2f6f4c0a100c6",
      "tree": "28941c7a03fdd30fbebdc7e734d51854823261a8",
      "parents": [
        "7b3b98ae3ecdad20cf5cebd2a6532aee17184d95"
      ],
      "author": {
        "name": "Joachim Nilsson",
        "email": "troglobit@gmail.com",
        "time": "Wed Aug 21 09:39:33 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:34:22 2014 +0200"
      },
      "message": "ripd: fix \"show ip rip status\" documentation\n\nThe command was mis-named in the documentation as \"show ip protocols\".\n\nSigned-off-by: Joachim Nilsson \u003ctroglobit@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7b3b98ae3ecdad20cf5cebd2a6532aee17184d95",
      "tree": "e95cee3c81dec96641e6c7497f69faa3134a5085",
      "parents": [
        "224e7e515747b74dd6d3610570a64b9726a27722"
      ],
      "author": {
        "name": "Lu Feng",
        "email": "lu.feng@6wind.com",
        "time": "Mon Apr 14 08:09:29 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:32:11 2014 +0200"
      },
      "message": "ripd \u0026 ripngd: avoid the zero interface metric\n\nThe interface metric is initialized to 0 in the commit db19c85:\nzebra: set metric for directly connected routes via netlink to 0\n\nRipd and ripngd must be aware of it and avoid increase the\nroute metric by 0.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "224e7e515747b74dd6d3610570a64b9726a27722",
      "tree": "7e461067f11c264931c3f2a03174db434a174c58",
      "parents": [
        "d9d4ae5157207b9b8bdb167983519a7ffb860f2c"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Apr 24 06:40:33 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:31:32 2014 +0200"
      },
      "message": "lib: remove redundant and incorrect sys/fcntl.h include\n\nPOSIX defines \u003cfcntl.h\u003e, \u003csys/fcntl.h\u003e is the same thing. However,\nit should not be used as it\u0027s existence can depend on C-library\nimplementation. E.g. musl gives warning if \u003csys/fcntl.h\u003e is used.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d9d4ae5157207b9b8bdb167983519a7ffb860f2c",
      "tree": "8919a83dcb99aac5fa0141f873525517d5e3b7ac",
      "parents": [
        "8c71e481dae11b7ae3f1ef561a989624b2ae84b6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org",
        "time": "Wed Jan 13 00:32:39 2010 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:30:22 2014 +0200"
      },
      "message": "bgpd: fix crash when allowas-in is done on inactive peer\n\nWhen allowas-in is changed on a peer that is not up, BGP would crash\ntrying to do route_refresh.  If peer is not up, there is no need\nto do notification or send.\n\nSigned-off-by: Stephen Hemminger \u003cstephen@networkplumber.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c71e481dae11b7ae3f1ef561a989624b2ae84b6",
      "tree": "4c13b76e1b9aedc45ad9b086be972ba4999ada03",
      "parents": [
        "2c13299a05e5544a5e79c2a970256a21f488a3fa"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Jan 15 06:57:57 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:32 2014 +0200"
      },
      "message": "bgpd: efficient NLRI packing for AFs !\u003d ipv4-unicast\n\nISSUE:\n\n  Currently, for non-ipv4-unicast address families where prefixes are\n  encoded in MP_REACH/MP_UNREACH attributes, BGP ends up sending one\n  prefix per UPDATE message. This is quite inefficient. The patch\n  addresses the issue.\n\nPATCH:\n\n  We introduce a scratch buffer in the peer structure that stores the\n  MP_REACH/MP_UNREACH attributes for non-ipv4-unicast families. This\n  enables us to encode multiple prefixes. In the end, the two buffers\n  are merged to create the UPDATE packet.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n[DL: removed no longer existing bgp_packet_withdraw prototype]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2c13299a05e5544a5e79c2a970256a21f488a3fa",
      "tree": "1d277afb9b346388e1aa244484c3af41dcd6a72e",
      "parents": [
        "66d2ead7df2db9144605c973fcd80b88df33f81b"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:07:20 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:08 2014 +0200"
      },
      "message": "bgpd: don\u0027t compare next-hop to router-id\n\nWhile announcing a path to a peer, the code currently compares the path\u0027s\nnext-hop with the peer\u0027s router-id. This can lead to problems as the router\nIDs are unique only within an AS. Suppose AS 1 sends route with next-hop\n10.1.1.1. It is possible that the speaker has an established BGP peering\nwith a router in AS 2 with router ID 10.1.1.1. The route will not be\nadvertised to that peer in AS 2.\n\nThe patch removes this check.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "66d2ead7df2db9144605c973fcd80b88df33f81b",
      "tree": "77ebf094c8084f2a22c9c00fb53a88df798301b6",
      "parents": [
        "8e998b1eb5fea53f2a2eddd9f7f2b8ab004406f3"
      ],
      "author": {
        "name": "Sébastien Luttringer",
        "email": "seblu@seblu.net",
        "time": "Tue May 27 19:55:11 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 27 19:55:11 2014 +0200"
      },
      "message": "vtysh: fix build against readline 6.3\n\nreadline 6.3 removes some old deprecated funnily-named types.  This\nupdates vtysh to use the new types so it builds again.\n\nReported-by: Joel Teichroeb \u003cklusark@archlinux.invalid\u003e\nReferences: https://bugs.archlinux.org/task/39495\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8e998b1eb5fea53f2a2eddd9f7f2b8ab004406f3",
      "tree": "95b756ddc86e043189c49a930a016051128c949b",
      "parents": [
        "000e157c852653288c5a1e6d0dee821c1765d315"
      ],
      "author": {
        "name": "Michal Sekletar",
        "email": "msekleta@redhat.com",
        "time": "Fri May 16 14:13:43 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 27 19:50:45 2014 +0200"
      },
      "message": "zebra: raise the privileges before calling socket()\n\nBecause of recent changes when creating AF_NETLINK socket, kernel will\ncache capabilities of the caller and if file descriptor is used or\notherwise handed to another process it will check that current user has\nnecessary capabilities to use the socket. Hence we need to ensure we\nhave necessary capabilities when creating the socket and at the time we\nuse the socket.\n\nSee: http://www.spinics.net/lists/netdev/msg280198.html\n\nSigned-off-by: Michal Sekletar \u003cmsekleta@redhat.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "000e157c852653288c5a1e6d0dee821c1765d315",
      "tree": "28a654105d50b5f55c9e865a223ba93366fe3839",
      "parents": [
        "5d804b439a4138c77f81de30c64f923e2b5c1340"
      ],
      "author": {
        "name": "Milan Kocian",
        "email": "milon@wq.cz",
        "time": "Fri Oct 18 07:59:38 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:51:19 2014 +0200"
      },
      "message": "bgpd: Fix condition allowas-in in rsclient code\n\nCurrently when you set neighbour\u0027s \u0027allowas-in\u0027 option on route server side\nyou get redistribution of the prefixes from this neighbour\u0027s table into all\nneighbour\u0027s tables which have the same AS number. I think that wanted behaviour\nis to allow import prefixes from neighbour\u0027s tables with the same AS num\ninto neighbour which has \u0027allowas-in\u0027 option set.\n\nSigned-off-by: Milan Kocian \u003cmilon@wq.cz\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5d804b439a4138c77f81de30c64f923e2b5c1340",
      "tree": "b63e3dc3a266d42311392e57c37e2b0a9855ff0b",
      "parents": [
        "5f9adb5d26d3af31b00c02084468e9f92b461b01"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Thu Sep 12 03:37:07 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: support TTL-security with iBGP\n\nTraditionally, ttl-security feature has been associated with EBGP\nsessions as those identify directly connected external peers. The\nGTSM RFC (rfc 5082) does not make any restrictions on type of\npeering. In fact, it is beneficial to support ttl-security for both\nEBGP and IBGP sessions. Specifically, in data centers, there are\ndirectly connected IBGP peerings that will benefit from the protection\nttl-security provides.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\n[DL: function refactoring split out into previous 2 patches.  changes:\n     - bgp_set_socket_ttl(): ret type int -\u003e void\n     - is_ebgp_multihop_configured(): stripped peer \u003d\u003d NULL check\n     - comments/whitespace]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5f9adb5d26d3af31b00c02084468e9f92b461b01",
      "tree": "640a6c4e855697777f672c384c37fffd5ae72d07",
      "parents": [
        "ef0b0c3e95a1f30d6f338100c689feef8ad5cd6e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:15:02 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: factor out eBGP multihop check\n\nThe check for an eBGP multihop configuration is unwieldy;  factor it out\ninto a separate function.\n\n[DL: originally by Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e,\n     split off from the next commit]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ef0b0c3e95a1f30d6f338100c689feef8ad5cd6e",
      "tree": "9848b1d05c2e1424e464cac41be51f32d7b87d78",
      "parents": [
        "8da8689d91a6436c17aca5000b1426aaea47e23c"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 22:52:04 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: factor out TTL setting\n\nTTL/min TTL are set from both bgp_accept() and bgp_connect().  Factor\nthem out so the following change to enable iBGP GTSM becomes more\nreadable.\n\n[DL: originally by Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e,\n     split off from the next commit]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8da8689d91a6436c17aca5000b1426aaea47e23c",
      "tree": "f4929119d4f41c668708d19374719765d7cb7f25",
      "parents": [
        "3374bef0412ac11815779f54321cbc4bf96da909"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Sep 11 03:33:55 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:39 2014 +0200"
      },
      "message": "bgpd: fix fast external fallover behavior\n\nISSUES\n\n1. When an interface goes down, the zclient callbacks are invoked\n   in the following order: (a) address_delete() that removes the\n   connected address list: ifp-\u003econnected, (b) interface_down()\n   that performs \"fast external fallover\" operation. The operation\n   relies on ifp-\u003econnected to look for peers that should be brought\n   down. That\u0027s a cyclic dependency.\n\n2. \u0027ttl-security\u0027 configuration handler sets peer-\u003ettl to\n   MAXTTL (so that BGP packets are sent with TTL\u003d255, as per the\n   requirement of ttl-security). This, however, is incompatible\n   with \u0027fast external fallover\u0027 as the fallover operation checks\n   for (ttl \u003d\u003d 1) to determine directly connected peers.\n\n3. The current fallover operation does not work for IPv6 address family.\n\nPATCH\n\n1. The patch removes the dependency on \u0027ifp-\u003econnected\u0027 list for fast\n   fallover. The peer already contains a nexthop structure that reflects\n   the peering address. The nexthop structure has a pointer to the\n   interface (ifp) that peering address resolves to. Everytime the TCP\n   connection succeeds, the ifp is updated. The patch uses this ifp in\n   the interface_down() callback for a match for the peers that should be\n   brought down.\n\n2. The evaluation for directly connected peering is enhanced as\n   \u0027peer-\u003ettl \u003d\u003d 1\u0027 OR \u0027peer-\u003egtsm_hops \u003d\u003d 1\u0027. Thus a ttl-security\n   configuration on the peer with one hop is directly connected and\n   should be brought down under \u0027fast external fallover\u0027.\n\n3. Because of fix (1), IPv6 address family works automatically.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3374bef0412ac11815779f54321cbc4bf96da909",
      "tree": "bba5f91b10c31e5987aa2d02d44de7d5c74c537c",
      "parents": [
        "48fc05fb7e6ee44db9f73f3194bfd4738b7f9dc1"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Thu Jan 09 00:31:22 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 20:34:53 2014 +0200"
      },
      "message": "bgpd: increase TCP socket buffer size\n\nBGP does not respond fairly in high scale.  As the number of BGP peers\nand prefixes increase, triggers like interface flaps which lead to BGP\npeer flaps, cause blockage in bgp_write.\n\nBGP does handle the cases of TCP socket buffer full by queuing a write\nevent back, there is no functional issue there as such. Still,\nincreasing the peer socket buffer size should help reduce event queueing\nin BGP.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n[DL: patch split, this is item 3.]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "48fc05fb7e6ee44db9f73f3194bfd4738b7f9dc1",
      "tree": "e0c11382f69fd3159600d18150f846dc104d8e43",
      "parents": [
        "6aa136f1eaeb0dfc1e39e6c2cd6380a399ef126f"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Thu Jan 09 00:31:22 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 20:27:12 2014 +0200"
      },
      "message": "bgpd: fix O_NONBLOCK on outgoing connects\n\nBGP was setting sockets to be non-blocking only for the accepted passive\npeers.  As a fix, setting the BGP sockets to be non-blocking even for\nthe active peers.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n[DL: patch split, this is item 1.]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6aa136f1eaeb0dfc1e39e6c2cd6380a399ef126f",
      "tree": "b1313a9961fe29a4ccf91571a5c772545351084d",
      "parents": [
        "b366b518401e0b0652cd70d297d3fb67b4803db0"
      ],
      "author": {
        "name": "Vitaliy Senchyshyn",
        "email": "vsenchyshyn@toroki.com",
        "time": "Wed Oct 02 10:40:20 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:54:04 2014 +0200"
      },
      "message": "bgpd: send notify in OpenSent when stopping manually\n\nThe issue it fixes is that the notification message is not sent to a\nsecond peer when bgp is stopped manually.\n\nAccording to BGP RFC4271, section 8.2.2, regarding the FSM transitions,\nin OpenSent state:\n\nIf a ManualStop event (Event 2) is issued in the OpenSent state, the\nlocal system:\n\n  * sends the NOTIFICATION with a Cease,\n  * sets the ConnectRetryTimer to zero,\n  * releases all BGP resources,\n  * drops the TCP connection,\n  * sets the ConnectRetryCounter to zero, and\n  * changes its state to Idle.\n\nI\u0027ve added a check for OpenSent state when the notification is sent from\nthe functions which are called from the CLI commands which\ndirectly/indirectly stop/restart BGP.\n\nAcked-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b366b518401e0b0652cd70d297d3fb67b4803db0",
      "tree": "5f05079e281f0ec503ee408b1f7502cc49cad82e",
      "parents": [
        "689bb66c6a92d238bed1a8b0920438c5a2271966"
      ],
      "author": {
        "name": "Boian Bonev",
        "email": "bbonev@ipacct.com",
        "time": "Mon Sep 09 16:41:35 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:23:36 2014 +0200"
      },
      "message": "bgpd: display multipath status in \"show ip bgp\"\n\nThe output of \"show ip bg\" does not show whether and which routes are\ninstalled as multipath routes along the best route:\n\nBGP table version is 0, local router ID is 10.10.100.209\nStatus codes: s suppressed, d damped, h history, * valid, \u003e best, i - internal,\n              r RIB-failure, S Stale, R Removed\nOrigin codes: i - IGP, e - EGP, ? - incomplete\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003ei1.0.0.0/24       10.10.100.1              1    111      0 15169 i\n* i                 10.10.100.2              1    111      0 15169 i\n* i                 10.10.100.3              1    111      0 65100 15169 i\n\nThis patch adds a new status code that is showing exactly which routes\nare used as multipath:\n\nBGP table version is 0, local router ID is 10.10.100.209\nStatus codes: s suppressed, d damped, h history, * valid, \u003e best, \u003d multipath,\n              i internal, r RIB-failure, S Stale, R Removed\nOrigin codes: i - IGP, e - EGP, ? - incomplete\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003ei1.0.0.0/24       10.10.100.1              1    111      0 15169 i\n*\u003di                 10.10.100.2              1    111      0 15169 i\n* i                 10.10.100.3              1    111      0 65100 15169 i\n\nThe inconsistency in the status code legend (\"i - internal\" vs. \"i internal\")\ninherent from old IOS was fixed. It had to be touched anyways.\n\nSigned-off-by: Boian Bonev \u003cbbonev at ipacct.com\u003e\n[DL: rewrap long line, clean whitespace in same chunk]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "689bb66c6a92d238bed1a8b0920438c5a2271966",
      "tree": "4cf3ee1be6acdb4cf3b85d3da83e09cb64d29ba9",
      "parents": [
        "2fdd455cfd1f758b7aa2e6c8e3d185098b93908c"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:13:37 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:15:45 2014 +0200"
      },
      "message": "bgpd: track correct originator-id in reflected routes\n\nISSUE:\n\nSuppose route1 and route2 received from route-reflector-client1 and client2\nrespectively have identical attributes. The current logic of creating the\nadj-rib-out for a peer threads the \u0027adv\u0027 structures for both routes against\nthe same attribute. This results in \u0027bgp_update_packet()\u0027 to pack those\nroutes in the same UPDATE message with one attr structure formatted. The\noriginator-id is thus set according to the first route\u0027s received router id.\nThis is incorrect.\n\nPATCH:\n\nFix bgp_announce_check() function to set the originator-id in the\nadvertising attr structure. Also, fix the attribute hash function and\ncompare function to consider originator-id. Otherwise attributes where all\nfields except the originator-id are identical get merged into one memory\nlocation.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nReviewed-by: Ken Yin \u003ckyin at cumulusnetworks.com\u003e\n[DL: whitespace changes dropped]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2fdd455cfd1f758b7aa2e6c8e3d185098b93908c",
      "tree": "3b2d28c7b389228cc6c1e3809660c4f7f22c3f18",
      "parents": [
        "d92a2f39b46f1990052d2db046b47edf7bb21ebb"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:02:36 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:15:22 2014 +0200"
      },
      "message": "bgpd: add \u0027bgp bestpath as-path multipath-relax\u0027\n\nCompute multipath in BGP based on AS_PATH hop count match. If the knob\nis turned on, it is not required to have an exact match of AS_PATHs\n(provided other multipath conditions are met, of course).\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d92a2f39b46f1990052d2db046b47edf7bb21ebb",
      "tree": "17d73b5e879e6ce15c28496d86166bd78ec3f3b0",
      "parents": [
        "cbf435cb72b937c9e5bfe38905e05de3755b1021"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Wed Jul 31 16:36:08 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:02:21 2014 +0200"
      },
      "message": "bgpd: use ATTR_FLAG_BIT() for BGP_ATTR_ values\n\n* bgp_attr.c: this UNSET_FLAG()s are bogus. I did a quick review and\n  I think that they could not cause any bug anyway.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\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": "24c84dbe806084552d7bb14b9f1d00514a048b9d",
      "tree": "cb53212866638b8aa559e573aa320f027d7ed8b7",
      "parents": [
        "4becea724ccd87e88f8454622ae227308b5fa3ce"
      ],
      "author": {
        "name": "Ken Williams",
        "email": "kenneth.j.williams@intel.com",
        "time": "Tue Apr 15 02:23:11 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 22 21:17:26 2014 +0200"
      },
      "message": "zebra: Change the mechanism for comparing route ID\u0027s.\n\nThe current format uses subtraction of two ints. Unfortunately, the\nsubtraction method does not work for all combinations of numbers.\nFor example, the with numbers represented by 10.x.x.x and 192.x.x.x,\n10.x.x.x - 192.x.x.x will yield a very large positive number indicating\nthat 10.x.x.x is larger.\n\nSigned-off-by: Ken Williams \u003ckenneth.j.williams@intel.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4becea724ccd87e88f8454622ae227308b5fa3ce",
      "tree": "a1e07f06ae43698a72a15ee801de86ce3d9ffdf4",
      "parents": [
        "514991c76366c2a9f4c644714ad0722df0eed532"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 19 14:11:42 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 22 21:17:00 2014 +0200"
      },
      "message": "lib: use heap to manage timers\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "514991c76366c2a9f4c644714ad0722df0eed532",
      "tree": "e9cb854e881c4733b3aa5145d7c17388ee99f035",
      "parents": [
        "ba32db1e854ff2b26861a2d4e4193a9f1b3816cd"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 19 14:11:41 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 22 21:16:10 2014 +0200"
      },
      "message": "lib: remove unused thread_master_debug function\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ba32db1e854ff2b26861a2d4e4193a9f1b3816cd",
      "tree": "ac1e4d87ad17a4ae653576009800b4077c4db00f",
      "parents": [
        "6f2a67031cfb21362fc7ecd3251761799c8ffe27"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 19 14:11:40 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 22 21:15:11 2014 +0200"
      },
      "message": "tests: Add tests for timers\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\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"
    }
  ],
  "next": "cd40b329a2e4da882bcad0431c048c876bbeafbd"
}
