)]}'
{
  "log": [
    {
      "commit": "a5c851c7ff41ef846e83d62394176ac1753ebf45",
      "tree": "b53c24d74e7db4d5e6cdd30199cb39093df0a5a4",
      "parents": [
        "913ff66ba30093d2fdc26af215f4bc0b3d359d75"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 03:21:44 2012 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 22:09:34 2013 +0100"
      },
      "message": "lib: remove ALL_LIST_ELEMENTS dead code branch\n\nALL_LIST_ELEMENTS is checking node \u003d\u003d NULL twice, which is causing a\nwhole slew of false positives in Coverity.  In this particular case,\naddressing this in the code is reasonable; being a macro, this appears\nall over the place without easy remedy.\n\nAcked-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "913ff66ba30093d2fdc26af215f4bc0b3d359d75",
      "tree": "c05c1df603a7ef8d73460777cd6017f720b29b3a",
      "parents": [
        "61be0ee8824b30e94ddd2bfe8b51fcfd330c41dd"
      ],
      "author": {
        "name": "高鹏",
        "email": "gpstrive@gmail.com",
        "time": "Wed Nov 21 18:15:43 2012 +0800"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 22:06:04 2013 +0100"
      },
      "message": "zebra: fix netlink NL_PKT_BUF_SIZE\n\nChange default value of variable NL_PKT_BUF_SIZE to 8192UL.  Cf.\nNLMSG_GOODSIZE definition of linux in include/linux/netlink.h for detail.\n\nPreviously, on platforms with a page size greater than 8192, if you had added\ntoo many interfaces, zebra would not have enough buffer space to get the entire\ninterface list.  This resulted in an incomplete interface list.\n\nFrom: 高鹏 \u003cgpstrive@gmail.com\u003e\n[updated to apply after FPM patches]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "61be0ee8824b30e94ddd2bfe8b51fcfd330c41dd",
      "tree": "483968a7a26038e2f88056458ac575ff9938e386",
      "parents": [
        "675769b1b17a068526d90786e1c35304656faba7"
      ],
      "author": {
        "name": "Hasso Tepper",
        "email": "hasso.tepper@gmail.com",
        "time": "Fri Dec 14 14:58:32 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 21:50:06 2013 +0100"
      },
      "message": "build: Fix build for systems with no /bin/true\n\nThere are systems with no /bin/true - it might have different path\n(/usr/bin/true) or even a shell builtin.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "675769b1b17a068526d90786e1c35304656faba7",
      "tree": "21fd12ed1bb51b5111f07614a79dc7325f4ac7d5",
      "parents": [
        "327c4cdf7578debcc140f04f03d02479771c9e11"
      ],
      "author": {
        "name": "Hasso Tepper",
        "email": "hasso.tepper@gmail.com",
        "time": "Fri Dec 14 14:58:31 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 21:50:06 2013 +0100"
      },
      "message": "build: MacOSX needs BSD struct ip_mreq hack too\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "327c4cdf7578debcc140f04f03d02479771c9e11",
      "tree": "a0e02a0614f12601d8a58eeeebf9e54b27198c9f",
      "parents": [
        "b2e5bdbe10c4145f508fcf1486ffe29d5ce516f7"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Fri Dec 14 14:58:30 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 21:50:06 2013 +0100"
      },
      "message": "testzebra: pragma weak: detect systems with weak alias and provide alternative\n\nLLVM clang does not support #pragma weak (bug 3679) on OS X. There are\nother systems where the #pragma weak has varying syntax.\n\nAdded m4 file from the autoconf archives:\nhttp://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html\n\nFix up zebra/*_null.c files to use #pragma weak alias or stub functions\nif not available. It\u0027s incomplete in that the different format #pragma\nenable easier fixes on need.\n\nTested on 64bit OS X 10.7, FreeBSD 9.0 amd64 \u0026 i386 (32bit) using\ngcc \u0026 clang. Tested on linux 64bit.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b2e5bdbe10c4145f508fcf1486ffe29d5ce516f7",
      "tree": "fae70e8c1580d99fee0c2a59d6bef831c4c9465c",
      "parents": [
        "a16dcf7c11d80775b07a0fa6f3ac5527190fb486",
        "e0630cb4d61557f956318a088f68f1fc4d261ef3"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 21:46:18 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 11 21:46:22 2013 +0100"
      },
      "message": "Merge remote-tracking branch \u0027savannah/sf/ospfd\u0027\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e0630cb4d61557f956318a088f68f1fc4d261ef3",
      "tree": "954964aed06b0247b59686d73e109218951df369",
      "parents": [
        "d265548ffb8da9ba3e1dd327efbff31c7cd15027"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Mon Jan 07 10:12:52 2013 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 10:12:52 2013 -0800"
      },
      "message": "ospfd: Remove dup MaxAge LSA flood\n\nStop additional, unnecessary flooding of MaxAge LSAs.\n\nWhen a MaxAge LSA is installed, if the LSA is prematurely aged or the LSA is\nnot self-originated, the LSA is flushed. This results in a the LSA being\nflooded a second time and in some cases flooded back to the receiver\n(unless the receiver is also the advertising router). A MaxAge\u0027d LSA has\nalready been flooded in ospf_flood() as part of the LSA receive processing\n(ospf_ls_upd). A self-originated LSA will be flooded from the originate/refresh\nroutine. Thus, in the install routine, a MaxAge\u0027d LSA only needs to be added\nto the MaxAge LSA list.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d265548ffb8da9ba3e1dd327efbff31c7cd15027",
      "tree": "2a44f386797da60d850f27f591a7d5d7d763c710",
      "parents": [
        "0798cee34f5c436cd2a4b6e1d9a1ca90eee94292"
      ],
      "author": {
        "name": "Vishal Kumar",
        "email": "vishal3.kumar@gmail.com",
        "time": "Fri Dec 07 14:47:58 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 10:00:00 2013 -0800"
      },
      "message": "ospfd: Corrected ospfd Type-4/Type-5 ls update handling\n\nThis fix is for Type-4 LS updates handling at a ABR router where\nospf daemon is not distributing Type-4 LS updates with correct LS-Age\nafter learning about a ASBR router in a ospf network. Because of this\nType-5 LS updates are not learnt in ospf network.\nTesting Scenario:\nThis can be re-produced by restarting the ospfd daemon on DUT\n(mentioned in figure below)before the Hello time interval expires\nfor area 0.0.0.1.\n\n ____                       _______                       ____                    _________\n|    |   area: 0.0.0.1     |       |   area: 0.0.0.0     |    |   area: 0.0.0.2  |         |\n| R1 |---------------------|DUT/ABR|---------------------| R2 |------------------| R3/ASBR |\n|____|     x.x.x.0/24      |_______|    y.y.y.0/64       |____|     z.z.z.0/24   |_________|\n\nIn the above setup when ospfd is restarted (imp:before the Hello interval\nat R1 expires) and DUT learns about ASBR router R3 (Type-4) in the\nnetwork from R2, but this ls-update is not propagates in area\n0.0.0.1. So R1 never comes to know about the ASBR router in the\nnetwork, so all the type-5 LS updates coming from R3 are not learnt\nby R1. Further if we again restart ospfd daemon it starts working fine.\nWith the fix given this issue can be resolved.\n\nMore Discussion on this is available at:\nhttp://www.gossamer-threads.com/lists/quagga/dev/23892\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "0798cee34f5c436cd2a4b6e1d9a1ca90eee94292",
      "tree": "1b2293b711a12d743a0cd814235589bc4ce8d84f",
      "parents": [
        "de54b26caca7442af29656282e753b02aac6f093"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Tue Dec 04 13:43:42 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:59 2013 -0800"
      },
      "message": "ospfd: compile warning cleanups\n\nA set of patches to clarify some comments as well as cleanup code that was\ncausing warnings.  After these patches, the code can be compiled with\n\n-Wall -Wsign-compare -Wpointer-arith -Wbad-function-cast -Wwrite-strings\n-Wmissing-prototypes -Wmissing-declarations -Wchar-subscripts -Wcast-qual\n-Wextra -Wno-unused-parameter -Wno-missing-field-initializers\n\n(what is current in trunk plus -Wextra -Wno-unused-parameter\n-Wno-missing-field-initializers).\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "de54b26caca7442af29656282e753b02aac6f093",
      "tree": "9457016f36d1e59edf672b54cf5b66fb29c68dd9",
      "parents": [
        "703819a9314692f3a3b7f888887b0cebc15c18ae"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Tue Dec 04 13:40:58 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:57 2013 -0800"
      },
      "message": "ospfd: Update nsm_change_state to static scope, as it is not called from elsewhere\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "703819a9314692f3a3b7f888887b0cebc15c18ae",
      "tree": "5a109e346ba409f3707bd5f041f5ffb3b2b5f94c",
      "parents": [
        "7798b6321cd0c6281b1a119ac894ff3749e88cc1"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Tue Dec 04 13:36:41 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:53 2013 -0800"
      },
      "message": "ospfd: Changed TE instance check to remove -Wtype-limits warning\n\nSince LEGAL_TE_INSTANCE_RANGE() was being passed an unsigned int, a warning\nwas being thrown due to the compare against \u003e\u003d 0.  Since this macro was used\nonly in one place, I removed the macro for an explict compare against a\nconstant for the MAX.\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7798b6321cd0c6281b1a119ac894ff3749e88cc1",
      "tree": "2be0e1ed9af8a9fdf156d013287c154cb081965a",
      "parents": [
        "f92c57f8ba4f1e856934ec1736be3cad62be4785"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Tue Dec 04 13:33:24 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:51 2013 -0800"
      },
      "message": "lib: Changes to VTY string-parsing macros to remove warnings\n\nThe VTY_GET_INTEGER_RANGE macro was being used also just to check the range\non a variable that wasn\u0027t used (for the \"no\" version of a VTY command), so I\nsplit the macro into two.  Also, since the variable is unsigned, if MIN is\nzero, you get a warning about comparing an unsigned number against 0, giving\nrise to slightly convoluted logic.  Note that the previous two patches were\nfound by the -Wtype-limits and -Wunused-variables warnings.  Without the\nchanges to these macros, these warnings are triggered erroneously, making it\nharder to find the real problems.\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "f92c57f8ba4f1e856934ec1736be3cad62be4785",
      "tree": "44c11ce2ea55d168218f654baf9cb8a83a4d6cd0",
      "parents": [
        "fbc043a847149499436fe4083b6384bde43fe578"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Tue Dec 04 13:29:21 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:50 2013 -0800"
      },
      "message": "ospfd: Update comments to be more clear in packet processing\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "fbc043a847149499436fe4083b6384bde43fe578",
      "tree": "17b90e2e2b22e91eb670ce0b0102047ac0862e16",
      "parents": [
        "1a61ad1011c498c4ae66cc145db673e53ef02962"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Tue Dec 04 12:54:18 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:49 2013 -0800"
      },
      "message": "ospfd: Fixed signed/unsigned masking of negative metrics\n\nIn the original code, negative metrics would be converted successfully by\natoi() and then converted to an unsigned int that would always compare\nsuccessfully against \u003e\u003d 0, leaving a large positive metric in the route map.\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "1a61ad1011c498c4ae66cc145db673e53ef02962",
      "tree": "f46f6e0146c30159a1908c18ca54c8449fb1e075",
      "parents": [
        "bda3c326a3fe843417726bfe1bc8d4bafbb51fa9"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Tue Dec 04 12:50:23 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:49 2013 -0800"
      },
      "message": "ospfd: Fixed typo bug in ospf_vty.h:ospf_neighbor\n\nTypo bug. ospf_nbr_nbma_poll_interval_set() was being sent priority instead\nof interval.\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "bda3c326a3fe843417726bfe1bc8d4bafbb51fa9",
      "tree": "009521f1cf14b3a546bfbe3ec8850dfc0e4974d4",
      "parents": [
        "822d8f55199c0aee32c64f91532f637694d30e11"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Dec 04 11:31:16 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:48 2013 -0800"
      },
      "message": "ospfd: fix argument parsing for distribute-list\n\nUse the correct argument for the protocol lookup in\nospf distribute-list commands.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "822d8f55199c0aee32c64f91532f637694d30e11",
      "tree": "db881758131d63c95b0bca943ba52e2b33228236",
      "parents": [
        "2345a2221aa0a02b96846beab6088815f41e791b"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Dec 04 11:11:41 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:46 2013 -0800"
      },
      "message": "ospf: fix apiserver enable\n\nThe ospf_apiserver_enable flag was being cleared _after_ the \"-a\"\ncommand-line option set it to 1.  Move up the initialisation, so\nenabling the OSPF API is actually possible.\n\nReported-by: Rosario Mattera \u003crosmattera@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "2345a2221aa0a02b96846beab6088815f41e791b",
      "tree": "2486cfbf3985c95a8f5ab0724de4d256e71bfd5e",
      "parents": [
        "faf9875832539f00940904e1424f2e789fef52d4"
      ],
      "author": {
        "name": "Leonard Tracy",
        "email": "letracy@amazon.com",
        "time": "Tue Dec 04 11:02:35 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:45 2013 -0800"
      },
      "message": "ospf: Fix type-4 network mask to 0 per RFC\n\nThe OSPF RFC (2328) states that the network mask field of a type 4\nLSA \"is not meaningful and must be zero\".  OSPFD has been setting\nthe mask as /32.  This patch changes OSPFD to set the mask to 0 per\nthe RFC\n\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "faf9875832539f00940904e1424f2e789fef52d4",
      "tree": "ebf2d85a78f96b5d7b2e2a8eab7d3ad07b484af6",
      "parents": [
        "91e6a0e5ca973c7183f638987b67aa370e9b484c"
      ],
      "author": {
        "name": "Ayan Banerjee",
        "email": "ayan@cumulusnetworks.com",
        "time": "Tue Dec 04 10:49:12 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:45 2013 -0800"
      },
      "message": "ospf: Reduce MaxAge log level\n\nReduce the log level for the MaxAge LSA reception when such an LSA does\nnot exist in the database.\n\nSigned-off-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Nolan Leake \u003cnolan@cumulusnetworks.com\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "91e6a0e5ca973c7183f638987b67aa370e9b484c",
      "tree": "734c8c74baaaa6d3c303928b4f6d1d35d3394115",
      "parents": [
        "4ba4fc857685bfe31c7127826652012a750367c5"
      ],
      "author": {
        "name": "Dinesh Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Dec 04 10:46:37 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:43 2013 -0800"
      },
      "message": "ospf: Convert MAX_AGE LSA list to tree\n\nStore the MaxAge LSA list in a tree instead of a linked list for efficient access.\nWalking the list can be quite inefficient in some large systems and under certain tests.\n\nospfd maintains the list of LSA\u0027s that have been MaxAge\u0027d out in a separate\nlinked list for removal by a remover/walker thread. When a new LSA is to be\ninstalled, the old LSA is ejected and when it is ejected, the MaxAge LSA list\nis traversed to ensure that the old LSA is also removed from this list if it\nexists on this list.\n\nWhen a large number (\u003e 5K) MaxAge LSAs are bombarding the system, walking this\nlist takes a significant time causing timers to fire and actions to be taken\nsuch as expiring neighbors due to expiry of DeadInterval (especially when timer\nis really low, \u003c\u003d 12s), creating a spiral of instability.\n\nBy making this MaxAge LSA list be a tree, this problem is mitigated.\n\nSigned-off-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "4ba4fc857685bfe31c7127826652012a750367c5",
      "tree": "d7f07b950c43907d9c8c07dc4423bc008c01174a",
      "parents": [
        "16a86b3e2f82d3e19a722e2ab34c2c77f62ed926"
      ],
      "author": {
        "name": "Ayan Banerjee",
        "email": "ayan@cumulusnetworks.com",
        "time": "Mon Dec 03 11:17:24 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:41 2013 -0800"
      },
      "message": "ospf: forward ref. of areas for \"max-metric router-lsa administrative\" cmd\n\nIn the event areas are created at a later point of time with respect\nto the playback of the \"max-metric router-lsa administrative\" command,\nthose areas do not get into indefinite max-metric mode. This patch is\ninteneded to store the configuration and apply it to all future areas\nthat may be created.\n\nIn the process, some other bugs that were there with respect to restart\netc are fixed up.\n\nTested locally to see that the fix works across multiple\nareas and across multiple restarts.\n\nSigned-off-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "16a86b3e2f82d3e19a722e2ab34c2c77f62ed926",
      "tree": "7c0826c1f684292ec80f8b7898e07f9c8e56b3f1",
      "parents": [
        "e1a555b67cc868f95ea2b53c278bd8d091333e5f"
      ],
      "author": {
        "name": "Ayan Banerjee",
        "email": "ayan@cumulusnetworks.com",
        "time": "Mon Dec 03 10:48:46 2012 -0800"
      },
      "committer": {
        "name": "Scott Feldman",
        "email": "sfeldma@cumulusnetworks.com",
        "time": "Mon Jan 07 09:59:40 2013 -0800"
      },
      "message": "ospf: suppress delete using replacement\n\nAfter a SPF run, OSPF deletes routes that have changed in terms of any\nmetric, type, and/or next-hops and re-adds them. Given that the Zebra-RIB\nalready support replacement semantics, we suppress deletes for routes\nthat will be added back again.\n\nThis has the following advantages. It reduces the number of IPC messages\nbetween OSPF/Zebra. Also, in the current flow, a batch of route deletes\nwere followed by a batch of adds even for say a metric change.\n\nWith the change, routes are sent as \"add\" when they are modified. Zebra\nalready implicitly deletes older routes.\n\nSigned-off-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "a16dcf7c11d80775b07a0fa6f3ac5527190fb486",
      "tree": "b75001e80db7f24cc861b3d0d1092e4b96fafd21",
      "parents": [
        "4209a88759c41aac54465b6d4389b7daaad6ac80"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Dec 13 11:20:50 2012 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Dec 13 11:20:50 2012 +0100"
      },
      "message": "build: check for .git in configure.ac\n\nDon\u0027t error out when someone tries using --with-pkg-git-version on\nsomething that isn\u0027t actually a git checkout (like a dist tarball).\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4209a88759c41aac54465b6d4389b7daaad6ac80",
      "tree": "bab409239b92b7151284b03640c07aa3f18127f6",
      "parents": [
        "fd76f41ac0267dc4cf5438ac8f5e23fae6810d31"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Dec 13 10:59:00 2012 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Dec 13 11:04:37 2012 +0100"
      },
      "message": "build: fix dist tarball\n\nautomake file lists haven\u0027t quite kept up with recent changes, time to\nfix them up so the dist tarball actually works...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fd76f41ac0267dc4cf5438ac8f5e23fae6810d31",
      "tree": "9b1e98811be47c511c8545183b3cd145dd3b273b",
      "parents": [
        "e1a555b67cc868f95ea2b53c278bd8d091333e5f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Dec 13 10:35:45 2012 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Dec 13 10:41:18 2012 +0100"
      },
      "message": "build: update ICC warning CFLAGS\n\nIntel\u0027s icc doesn\u0027t accept \"-wd \u003cnumber\u003e\" anymore, it\u0027s \"-wd\u003cnumber\u003e\"\nthese days.  But, anyhow, the warnings disabled in Quagga\u0027s configure.ac\ndon\u0027t seem to appear anywhere at all, so let\u0027s just remove the option\ncompletely.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e1a555b67cc868f95ea2b53c278bd8d091333e5f",
      "tree": "c6d2a170693da4b78ed977b1badf9c38f84c693d",
      "parents": [
        "478c1125cfcf92c3f2a574d6b76eea28126284dc"
      ],
      "author": {
        "name": "Nick Hilliard",
        "email": "nick@inex.ie",
        "time": "Wed Nov 28 14:39:56 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:14 2012 +0100"
      },
      "message": "isisd: fix ipv6 metric endianness\n\nthe isis ipv6 reachability metric is transmitted in big endian / network\nformat, but isis_spf_process_lsp() does not convert this into host endian\nformat when mucking around with local cost + received metric.  This patch\nfixes this problem and makes received ipv6 metrics work properly on\nlittle-endian machines.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "478c1125cfcf92c3f2a574d6b76eea28126284dc",
      "tree": "a53e56a4ad3d5342a36b967ae968a2523840c0bb",
      "parents": [
        "4fb7c84f1b5e282c7dc413a578d3f42353ac7fec"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 27 19:52:00 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:08 2012 +0100"
      },
      "message": "isisd: verify metrics on metric-style transition\n\nWhen switching to metric-style transition, circuit metrics should also be\nverified to be in the narrow range 0..63.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4fb7c84f1b5e282c7dc413a578d3f42353ac7fec",
      "tree": "69fe847ce5ce242c2a714ca75182dc39c7a9b210",
      "parents": [
        "e8aca32f312cbef1cb0b0dd9e87b7e59dc9fa251"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 27 19:51:59 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:08 2012 +0100"
      },
      "message": "isisd: fix metrics check for metric-style narrow\n\nWhen switching to narrow metric style, all configured circuits are\nverified to have a valid narrow style metric. Check te_metric instead\nof metric_default as the latter is only 8bit wide and may overflow for\nwide style metrics.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e8aca32f312cbef1cb0b0dd9e87b7e59dc9fa251",
      "tree": "f1dd65169e4cbc6bb7da2d76466b049703587123",
      "parents": [
        "318c8040abc1b8a737c941382e8aca82e546da09"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 01:10:30 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:08 2012 +0100"
      },
      "message": "isisd: address Coverity warnings\n\nthis fixes a bunch of issues found by Coverity SCAN and flagged as\n\"high\" impact -- although, they\u0027re all rather minute issues.\n\n* isisd/isis_adjacency.c: one superfluous check, one possible NULL deref\n* isisd/isis_circuit.c: two prefix memory leaks\n* isisd/isis_csm.c: one missing break\n* isisd/isis_lsp.c: one possible NULL deref\n* isisd/isis_pfpacket.c: one error-case fd leak\n* isisd/isis_route.c: one isis_route_info memory leak\n* isisd/isis_routemap.c: one... fnord\n* isisd/isis_tlv.c: one infinite loop\n\nReported-by: Coverity SCAN\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "318c8040abc1b8a737c941382e8aca82e546da09",
      "tree": "3eb37c0549c27b1db1a08aadab6166728b663348",
      "parents": [
        "f818c8f3fb9c98490df29e99aa9cddde8e0296d5"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 01:10:29 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:07 2012 +0100"
      },
      "message": "isisd: always join all IS-IS multicast groups\n\nThe socket is only created once when an interface is brought up, and the\nmulticast groups were joined according to configuration at that point.\nThis breaks when later switching an interface to another IS-IS level.\n\nSince, for a separate conformance issue (ANVL ISIS-6.4), we should be\ninspecting the destination address anyway, the simplest fix here is to\njust join all groups unconditionally.  There shouldn\u0027t be much traffic\non these anyway, worst case we might be picking up some unrelated\nmulticast groups due to NIC filter aliasing though...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f818c8f3fb9c98490df29e99aa9cddde8e0296d5",
      "tree": "1b5bea6bd8996e8ab5349fc2b2abfa0dc7ac2ca4",
      "parents": [
        "de543de3d7682eaeb8c9b657e9a3bb4bcd17993d"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 27 01:10:28 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:07 2012 +0100"
      },
      "message": "isisd: save metric-style narrow\n\nisisd defaults to wide metric style. So if narrow metric style is\nconfigured, a matching setting should be written to the configuration,\nallowing a narrow metric-style setting to be saved.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "de543de3d7682eaeb8c9b657e9a3bb4bcd17993d",
      "tree": "34ea71f71b59a717f1500d2f7b6860227ecaea6d",
      "parents": [
        "b72f345d2e078d4cd0559234d051214f58eef542"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 01:10:27 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:07 2012 +0100"
      },
      "message": "isisd: fix spftree_area_del typo causing SEGV\n\nspftree_area_del didn\u0027t clear the IPv6 L2 spftree due to a simple typo,\nleading to a SEGV on shutdown when the still-armed timer would try to\nrun an IPv6 L2 SPF calculation with its data free\u0027d already.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b72f345d2e078d4cd0559234d051214f58eef542",
      "tree": "c41a98533af78d54c5e5cca0151848b86c9d5139",
      "parents": [
        "19f78cebd2ce50f0d1f367cd759cdcfb1a500f59"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 01:10:26 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:07 2012 +0100"
      },
      "message": "isisd: drop hellos without supported protocol list\n\nisisd should not form adjacencies on receiving an IS-IS Hello without a\nlist of supported protocols (cf. RFC 1195 s4.4 p32 \"Maintaining Router\nAdjacencies\")  Also fixes memleaks in these error cases.\n\n* isisd/isis_pdu.c: improve TLVFLAG_NLPID handling\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "19f78cebd2ce50f0d1f367cd759cdcfb1a500f59",
      "tree": "94526e2119d9142ca53217a9d0e5a357a260abba",
      "parents": [
        "91d799e8cdd24ad3c195ed9d11882aacc91cc2ea"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 01:10:25 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:07 2012 +0100"
      },
      "message": "isisd: refuse adjacencies with our own system ID\n\nisisd would form an adjacency with another router despite the system IDs\nbeing identical.  This would later cause an assertion failure like this:\n\n  assertion\u003d0x555555596db8 \"isis_find_vertex (spftree-\u003epaths, id, vtype) \u003d\u003d ((void *)0)\",\n  file\u003d0x555555596c60 \"isis_spf.c\", line\u003d515, function\u003d0x555555597900 \"isis_spf_add2tent\") at log.c:619\n\nwhich is caused by trying to add a path expected to not exist, but\nsuddenly colliding due to the duplicate system ID.\n\n* isis_pdu.c: check for system ID collision on receiving Hello\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "91d799e8cdd24ad3c195ed9d11882aacc91cc2ea",
      "tree": "935c32631fdb828d4ef624d081953f212a792912",
      "parents": [
        "0be793e674c8b076f0e8bf327257f15803480f49"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 01:10:24 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:38:07 2012 +0100"
      },
      "message": "isisd: do not add \u003e63 IP addresses to hello\n\nRFC1195 s4.2 \"Multiple IP Addresses per Interface\" explicitly forbids us\nfrom adding multiple tuples of IP addresses, putting a hard cutoff at 63\nIP addresses.\n\n* isisd/isis_tlv.c: cut off (and return success) at 63 addrs.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0be793e674c8b076f0e8bf327257f15803480f49",
      "tree": "28c42a679265d25ea41f4265232e2bcc167b1f49",
      "parents": [
        "324ed1f87aedf30a45aea951edb2e717c5f9b7fb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Nov 27 01:34:56 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Dec 12 15:34:37 2012 +0100"
      },
      "message": "build: include git info\n\nIf enabled with --with-pkg-gitversion on ./configure, this will append\ngit version strings and branch information at the following places:\n - overall version number: 0.99.21-g0123456\n - login motd and show version: tag information + git id + branches\n\nSample output:\n  Hello, this is Quagga (version 0.99.21-g14b49ad-dirty).\n  Copyright 1996-2005 Kunihiro Ishiguro, et al.\n\n  This is a git build of quagga_0_99_21_release-106-g14b49ad-dirty\n  Associated branch(es):\n\tlocal:master\n\n[v2]: fix build without gitinfo (add \"else\" branch)\n[v2]: fix for repos without any tags (different git describe output)\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "324ed1f87aedf30a45aea951edb2e717c5f9b7fb",
      "tree": "3e23528caf97c699bc2403a7e87443005f87f446",
      "parents": [
        "b9c24cd23091e817942d4eaab95712e84dbec8aa"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:49:01 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "zebra: include intf when sending IPv4 nexthop to FPM\n\n* zebra/zebra_fpm_netlink.c\n\n    Change the zebra FPM code to include an interface index when\n    encoding a nexthop even if the protocol only provided a gateway\n    address (e.g, NEXTHOP_TYPE_IPV4).\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b9c24cd23091e817942d4eaab95712e84dbec8aa",
      "tree": "69f4c48db4625a6fbd40eb912024db8a50f199c1",
      "parents": [
        "5adc2528d386f037cc39e8029616295c3fec2db4"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:49:00 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "doc: add blurbs on zebra FPM interface and commands\n\nUpdate documentation with some text on the zebra interface to the\noptional Forwarding Path Manager component, and the related cli\ncommands.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5adc2528d386f037cc39e8029616295c3fec2db4",
      "tree": "2f54793f50a591d99a39d75fbf6bbd7dbe752dda",
      "parents": [
        "443b993777e3e86fceb988f647d1c5b57661a182"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:59 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "zebra: add module to communicate routes to FPM\n\nEnhance zebra to send routes to the (optional) Forwarding Path Manager\ncomponent using the interface defined by fpm/fpm.h.\n\n  * configure.ac\n\n    - Add --enable-fpm flag.\n\n      The FPM-related code in zebra is activated only if the build is\n      configured with \u0027--enable-fpm\u0027.\n\n    - Add HAVE_NETLINK automake conditional.\n\n      This allows us to conditionally build netlink-dependent C code.\n\n  * zebra/{rib.h,zebra_rib.c}\n\n    - Add the \u0027fpm_q_entries\u0027 field to the rib_dest_t structure. This\n      allows dests to be placed on the fpm queue.\n\n    - Define a couple new rib_dest_t flags that hold FPM-related\n      state.\n\n    - Invoke the zfpm_trigger_update() function for a route_node\n      whenever the information to be sent to the FPM changes.\n\n    - rib_can_delete_dest(): Return FALSE if we have to update the FPM\n      about the given dest. This ensures that the dest is not deleted\n      even if there are no ribs hanging off of it.\n\n  * zebra/zebra_fpm.c\n\n    This file holds most of the code for interacting with the FPM.\n\n    - If quagga was configured with \u0027--enable-fpm\u0027, periodically try\n      to connect to the FPM.\n\n    - When the connection comes up, enqueue all relevent dests to the\n      FPM queue.\n\n    - When the FPM socket is readable, dequeue the next rib_dest_t\n      from the FPM queue, encode it in to a message and send the\n      message to the FPM.\n\n    - When the connection to the FPM goes down, remove all dests from\n      the FPM queue, and then start trying to connect to the FPM\n      again.\n\n    - Expose the following new operational commands:\n\n      show zebra fpm stats\n      clear zebra fpm stats\n\n  * zebra/zebra_fpm_netlink.c\n\n    - zfpm_netlink_encode_route(): Function to encode information\n      about a rib_dest_t in netlink format.\n\n  * zebra/zebra_fpm_private.h\n\n    Private header file for the zebra FPM module.\n\n  * zebra/zebra_fpm.h\n\n    Header file exported by zebra FPM module to the rest of zebra.\n\n  * zebra/debug.c\n\n    Add the \u0027debug zebra fpm\u0027 command.\n\n  * zebra/main.c\n\n    Initialize the zebra-FPM code on startup.\n\n  * zebra/misc_null.c\n\n    Add stub for zfpm_trigger_update().\n\n  * zebra/Makefile.am\n\n    - Include new file zebra_fpm.c in build.\n\n    - Include zebra_fpm_netlink.c in build if HAVE_NETLINK is defined.\n\n  * vtysh/Makefile.am\n\n    Include zebra_fpm.c in list of files that define cli commands.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "443b993777e3e86fceb988f647d1c5b57661a182",
      "tree": "49e929ef6339feea5bd8b634381f753dd71fa79a",
      "parents": [
        "04f7dd64dfa0f339208f0d4833276b7684ee3343"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:58 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "fpm: Add public header for Forwarding Plane Manager\n\nThe Forwarding Plane Manager (FPM) is an optional component that may\nbe used in scenarios where the router has a forwarding path that is\ndistinct from the kernel, commonly a hardware-based fast path. It is\nresponsible for programming forwarding information (such as routes and\nnexthops) in the fast path.\n\nIn Quagga, the Routing Information Base is maintained in the \u0027zebra\u0027\ninfrastructure daemon. Routing protocols communicate their best routes\nto zebra, and zebra computes the best route across protocols for each\nprefix. This latter information comprises the bulk of the Forwarding\nInformation Base.\n\nThe new header file added by this patch, \u0027fpm/fpm.h\u0027, defines a\npoint-to-point interface using which zebra can update the FPM about\nchanges in routes. The communication takes place over a stream\nsocket. The FPM listens on a well-known TCP port, and zebra initiates\nthe connection.\n\nAll messages sent over the connection start with a short \u0027FPM header\u0027.\nIn the case of route add/delete messages, the header is followed by a\nnetlink message. Zebra should send a complete copy of the forwarding\ntable(s) to the FPM, including routes that it may have picked up from\nthe kernel.\n\nThe FPM interface uses replace semantics. That is, if a \u0027route add\u0027\nmessage for a prefix is followed by another \u0027route add\u0027 message, the\ninformation in the second message is complete by itself, and replaces\nthe information sent in the first message.\n\nIf the connection to the FPM goes down for some reason, the client\n(zebra) should send the FPM a complete copy of the forwarding table(s)\nwhen it reconnects.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "04f7dd64dfa0f339208f0d4833276b7684ee3343",
      "tree": "4f753475c70762ba3a96eead9795a0f3a5904c10",
      "parents": [
        "78deec450cfa5ddcad290c13b36dd1d187da213e"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:57 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "lib: bring in sys/queue.h from FreeBSD tree\n\nBring in sys/queue.h from the FreeBSD tree as lib/queue.h.\n\nThis header implements lists of various flavors using inline\nlinkages. The imported file corresponds to SVN revision 221843 (url\nbelow) and is available under the terms of the New BSD license\n(3-clause).\n\n  http://svnweb.freebsd.org/base/head/sys/sys/queue.h?revision\u003d221843\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "78deec450cfa5ddcad290c13b36dd1d187da213e",
      "tree": "bf6e811b78c726db3fe00b168b35a67e9aa586c1",
      "parents": [
        "0915bb0ce2ca6b5fee2cd214be4499eeeaf1c9af"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:56 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:17 2012 +0100"
      },
      "message": "zebra: extern/extract some functions from rt_netlink.c\n\n* zebra/{rib.h,zebra_rib.c}\n\n    Add nexthop_type_to_str(), which returns a human-readable string\n    corresponding to a nexthop type.\n\n  * zebra/rt_netlink.[hc]\n\n    - Add new header file that exposes some existing and new\n      netlink-related functions from rt_netlink.c to the rest of\n      zebra.\n\n        addattr32\n        addattr_l\n        rta_addattr_l\n        nl_msg_type_to_str (new)\n        nl_rtproto_to_str (new)\n\n    - Use nexthop_type_to_str() instead of the static array\n      \u0027nexthop_types_desc\u0027.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0915bb0ce2ca6b5fee2cd214be4499eeeaf1c9af",
      "tree": "eb3cb410ed0dd341e2e565e71d74bba81c0dbf8a",
      "parents": [
        "1b5ed1b054b955275bb7cf0f80fb7767094bc28b"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:55 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add iterator for walking all tables in RIB\n\n* lib/zebra.h\n\n    Add macro ZEBRA_NUM_OF, which returns the number of elements in a\n    static array.\n\n  * zebra/rib.h\n\n    Add the rib_tables_iter_t structure and associated functions,\n    which allow one to walk all tables in the rib.\n\n  * zebra/zebra_rib.c\n\n    - Add vrf_id_get_next() to retrieve the first VRF id (if any) that\n      is greater than a given VRF id.\n\n    - Add rib_tables_iter_next().\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1b5ed1b054b955275bb7cf0f80fb7767094bc28b",
      "tree": "b8d886b85615f1b05679e6879c961e5dcb1496c4",
      "parents": [
        "9fd92e3c4bdcc78e0f0d94d53a2d4c7b0e893fcb"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:54 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add way to determine VRF/AFI/SAFI of table\n\nAdd some code that allows us to determine which VRF and AFI/SAFI a\ngiven RIB table corresponds to.\n\n  * zebra/rib.h\n\n    Add rib_table_info_t structure, which contains information about\n    the VRF, AFI and SAFI that a table is for.\n\n  * zebra/zebra_rib.c\n\n    - Add the vrf_table_create() function, which creates a table and\n      sets its \u0027info\u0027 pointer to a newly created rib_table_info_t.\n      The \u0027info\u0027 pointer allows us to go from a route_node or a table\n      to the associated vrf.\n\n    - vrf_alloc(): Use vrf_create_table() to create tables.\n\n  * lib/memtypes.c\n\n    Add memory type for rib_table_info_t.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9fd92e3c4bdcc78e0f0d94d53a2d4c7b0e893fcb",
      "tree": "a3adf090e5ef776b8c6dc6223890a2640217a95b",
      "parents": [
        "5aebb9c77fc2257c9d9df72db66668fabb24fc52"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:53 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add structure to hold per-prefix state in RIB\n\nAdd the rib_dest_t structure to hold per-prefix state in the routing\ninformation base. This gives us an appropriate place to maintain the\nqueueing state of a route_node. Queuing state was previously being\nstored on the first rib in the list of ribs hanging off the\nroute_node.\n\n  * zebra/rib.h\n\n    - Add new structure rib_dest_t.\n\n    - Remove the rn_status field from \u0027struct rib\u0027, it is no longer\n      required.\n\n    - Add macros (RNODE_FOREACH_RIB, RNODE_FOREACH_RIB_SAFE) for\n      walking all \u0027struct ribs\u0027 corresponding to a route_node. These\n      hide the fact that there is an intermediate rib_dest_t\n      structure.\n\n    - Add a few utility inlines to go between a rib_dest_t and\n      associated structures.\n\n  * zebra/zebra_rib.c\n\n    - rib_link()/rib_unlink()\n\n      Tweak for new behavior, where the \u0027info\u0027 pointer of a route_node\n      points to a rib_dest_t. The list of ribs for a prefix now hangs\n      off of the dest.\n\n      Change the way we ref count route_nodes. We now hold a single\n      ref count on a route_node if there is a corresponding\n      rib_dest_t.\n\n    - Maintain the queuing state of a route_node on the flags field of\n      the rib_dest_t.\n\n    - Add the rib_gc_dest() function, which deletes a rib_dest_t if it\n      is no longer required. A rib_dest_t can be deleted iff there are\n      no struct ribs hanging off of it.\n\n    - Call rib_gc_dest() any time we unlink a rib from the\n      rib_dest_t. Currently we only need to call it once, just before\n      we return from rib_process().\n\n  * zebra/{redistribute,zebra_rib,zebra_snmp,zebra_vty}.c\n\n    Use new macros to walk over route_node ribs.\n\n  * lib/memtypes.c\n\n    Add memory type for rib_dest_t.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5aebb9c77fc2257c9d9df72db66668fabb24fc52",
      "tree": "eb6964198f32c3196710ba1812902c43ef87f1b4",
      "parents": [
        "8b366b9cfd1f3ec1a45e0f82db7fdb27e3bb3594"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Wed Nov 07 23:50:09 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:10:51 2012 +0100"
      },
      "message": "bgpd: document bgp neighbor local-as peer command\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8b366b9cfd1f3ec1a45e0f82db7fdb27e3bb3594",
      "tree": "855e826ba80328b0fa106bfd8e1f826357806406",
      "parents": [
        "9d3f9705d8b386ccf006c106967c700141e5d049"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Wed Nov 07 23:50:08 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:10:25 2012 +0100"
      },
      "message": "bgpd: Fixed out-of-date comment\n\nWhen going through the code to write the documentation for local-as,\nI discovered that one of the comments was out-of-date.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9d3f9705d8b386ccf006c106967c700141e5d049",
      "tree": "9edfe2653741fa0f49ffef15bd66f5a522dcd025",
      "parents": [
        "3b96b78136d04ddb7e39d86577cad75acb25237a"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Wed Nov 07 23:50:07 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:10:00 2012 +0100"
      },
      "message": "bgpd: add replace-as modifier for BGP neighbor\n\nAdded replace-as modifier for BGP neighbors when using\nlocal-as. If the replace-as modifier is specified, only the\nreplacement AS as specified by the local-as modifier is\nprepended to the AS_PATH, not the process\u0027s AS.\n\nIn bgp_attr.c, I decided that\n\nif (peer-\u003echange_local_as) {\n  /* If replace-as is specified, we only use the change_local_as when\n     advertising routes. */\n  if( ! CHECK_FLAG (peer-\u003eflags, PEER_FLAG_LOCAL_AS_REPLACE_AS) ) {\n    aspath \u003d aspath_add_seq (aspath, peer-\u003elocal_as);\n  }\n  aspath \u003d aspath_add_seq (aspath, peer-\u003echange_local_as);\n} else {\n  aspath \u003d aspath_add_seq (aspath, peer-\u003elocal_as);\n}\n\nwas clearer than the alternative that didn\u0027t duplicate the prepending of the\nprocess\u0027s AS:\n\n/* First, append the process local AS unless we have an alternate local_as\n * and we\u0027re replacing it (as opposed to just prepending it). */\nif (! (peer-\u003echange_local_as\n       \u0026\u0026 CHECK_FLAG (peer-\u003eflags, PEER_FLAG_LOCAL_AS_REPLACE_AS) ) ) {\n  aspath \u003d aspath_add_seq (aspath, peer-\u003elocal_as);\n}\n\nif (peer-\u003echange_local_as)\n  aspath \u003d aspath_add_seq (aspath, peer-\u003echange_local_as);\n}\n\nBut I could be convinced otherwise.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3b96b78136d04ddb7e39d86577cad75acb25237a",
      "tree": "a056f89d771aa6706816b0b8507fc4b44028d865",
      "parents": [
        "43057bf22a4240b5e163c30a1f66deb702ce746e"
      ],
      "author": {
        "name": "Hasso Tepper",
        "email": "hasso.tepper@gmail.com",
        "time": "Thu Oct 11 11:31:54 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 15:16:53 2012 -0500"
      },
      "message": "lib: Implement monotonically increasing clock for Darwin.\n\nThere is no Posix CLOCK_MONOTONIC in Darwin, but monotonically\nincreasing clock can be implemented using mach_absolute_time().\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "43057bf22a4240b5e163c30a1f66deb702ce746e",
      "tree": "d5b4d164efa3034ae8006020d6d1ae5e314a867c",
      "parents": [
        "8c9ed279852393804c26e3c8c556a13d08654907"
      ],
      "author": {
        "name": "Hasso Tepper",
        "email": "hasso.tepper@gmail.com",
        "time": "Thu Oct 11 11:19:51 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 15:16:53 2012 -0500"
      },
      "message": "isisd: clock_gettime() -\u003e quagga_gettime() conversion.\n\n* isisd/isis_spf.c: Use portable quagga_gettime() like the rest of\n    the Quagga code.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c9ed279852393804c26e3c8c556a13d08654907",
      "tree": "540dfd742339845bac1079b89122a4a7b33aaba0",
      "parents": [
        "9234b382735b690f403ce018ce392316b2ad6e38"
      ],
      "author": {
        "name": "Hasso Tepper",
        "email": "hasso.tepper@gmail.com",
        "time": "Thu Oct 11 11:15:18 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 15:15:57 2012 -0500"
      },
      "message": "ospfd: remove some buggy extra \u0027;\u0027 symbols.\n\n * ospfd/ospf_apiserver.c: extra ; causing lookup to fail always\n * ospfd/ospf_lsa.c: extra ; causing debug output even when disabled\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9234b382735b690f403ce018ce392316b2ad6e38",
      "tree": "291a65a85584a3435453676bd8ed1ab0f70123ab",
      "parents": [
        "a05df8fd279e4af0f077de181fb6c4e7d7174267"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Wed Oct 10 16:12:32 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 11:22:24 2012 -0500"
      },
      "message": "build: check actually-used BSD link state fields\n\nifi_link_state missing in OS X. There could be other *BSD\u0027s that haven\u0027t\nimplemented it and possibly affects older implementations.\n\nThe existing HAVE_BSD_LINK_DETECT configure.ac check is only confirming\nthe link state detection using ifmediareq.ifm_status found in\n\u003cnet/if_media.h\u003e. This is the link state detection used in\nzebra/ioctl.c. Later, *BSD redefined struct if_data in \u003cnet/if.h\u003e and\nincluded link state detection. This is the method used in\nzebra/kernel_socket.c\n\nAdditional test defined in config.ac to test for member struct\nif_data.ifi_link_state defined in \u003cnet/if.h\u003e separate from test for\n\u003cnet/if_media.h\u003e ifmediareq.ifm_status\n\nFixed #ifdef\u0027s in zebra/kernel_socket.c to use the new #define\nNo impact on older function calls in zebra/ioctl.c\n\nTested on 64bit OS X 10.7, FreeBSD 9.0 amd64 \u0026 i386 (32bit)\nusing gcc \u0026 clang. Tested on linux 64bit.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a05df8fd279e4af0f077de181fb6c4e7d7174267",
      "tree": "3b29c8d00b70dfbf9f9ff8ab90c29b970d0aea33",
      "parents": [
        "3b33de676ac8e84b82f40520ecd0f4722e16b349"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Wed Oct 10 16:11:36 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 11:12:08 2012 -0500"
      },
      "message": "zebra: kernel_socket: fix overflow in RTA_ADDR \u0026 RTA_ATTR\n\nIn zebra/kernel_socket.c, copying sockaddr from *_msghdr:\n\nThere are really 2 different lengths that need to be determined.\n  1) the length required to point to the next sockaddr in the mesg\n     buffer which might include any required padding and\n  2) the actual length of the sockaddr data that needs to be copied\n     into the destination field.\nThey may or may not be the same value.\n\nSizeof sockaddr_in6 is 28, which to pad for alignment purposes on 32\nbit systems with a long of 4 bytes is evenly divided and requires\nno padding. On 64 bit systems, with a long of 8 it is padded with 4\nextra bytes.So the current RTA_* macros are copying 32 bytes into a 28\nbyte field on 64 bitsystems, where the field overflow did not occur\non the 32 bit systems.\n\nSince using sa_len required the use of an #ifdef which couldn\u0027t be used\ndirectly inside a #define, it made sense to move the copy into the\nfunction to allow typdef checking throughout and eliminate the hack\nto suppress compiler warnings.\n\nFixed declaration of cp in ifm_read after compiler noticed type mismatch.\n\nTested on 64bit OS X 10.7, FreeBSD 9.0 amd64 \u0026 i386 (32bit)\nusing gcc \u0026 clang\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3b33de676ac8e84b82f40520ecd0f4722e16b349",
      "tree": "28b0d91a6d3946ac244f7784274196a43c8fe0b9",
      "parents": [
        "7d50ad444ffadd4110152113cc9583db96b3ad67"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Wed Oct 10 22:10:14 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 05 11:11:36 2012 -0500"
      },
      "message": "zebra: kernel_socket: fix 64bit MacOS X alignment\n\nIn OS X 10.7 zebra crashed on invalid execution address.\n\nsockaddr padding in *_msghdr is observed to be 4 bytes in 64bit OS X.\n\nThe ROUNDUP macro assumed alignment on sizeof(long) which\nallocates 8 bytes on 64bit systems, 4 bytes on 32bit systems\nwhich is true for BSD generally.\n\nTest for Apple and use sizeof(int) which allocates 4 bytes on 32 \u0026 64bit\nsystems.\n\nTested on 64bit OS X 10.7, FreeBSD 9.0 amd64 \u0026 i386 (32bit)\nusing gcc \u0026 clang\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7d50ad444ffadd4110152113cc9583db96b3ad67",
      "tree": "ace068bdeae6075c6aeac71884e2cf3c8e73ddc4",
      "parents": [
        "e2b1580cbc450b55491efd2cf03c967e53e63f5f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 03 11:19:52 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 03 11:21:31 2012 -0700"
      },
      "message": "doc: update installation instructions\n\nconfigure parameters have changed quite a bit, several options are\nenabled by default now and there\u0027s --disable-tests.  Update\ndocumentation to match.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e2b1580cbc450b55491efd2cf03c967e53e63f5f",
      "tree": "111f0d828b16071d69b989c46788efbedaadabcd",
      "parents": [
        "326fe3df2c659d62fc76f8579a414ba271e7f3e9"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 03 09:14:29 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 03 09:51:21 2012 -0700"
      },
      "message": "build: compile tests/ by default\n\nBroke the tests again... let\u0027s just build them by default so it\u0027s easier\nto notice.  If anyone doesn\u0027t want to build tests, there\u0027s\n--disable-tests.\n\nNB: tests will be neither run nor installed.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "326fe3df2c659d62fc76f8579a414ba271e7f3e9",
      "tree": "aa493a2e7b7d487749e2109de47b1b88b16ce3fb",
      "parents": [
        "fe9bb6459afe0d55e56619cdc5061d8407cd1f15"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 03 09:13:23 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 03 09:13:23 2012 -0700"
      },
      "message": "tests: fix missing array_size() include\n\n * tests/test-sig.c: add #include \"lib/memory.h\" to get array_size()\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fe9bb6459afe0d55e56619cdc5061d8407cd1f15",
      "tree": "0de65deb7260c93592625348219f8933efbc1d04",
      "parents": [
        "d1d3ac9bad0caf7a9c465bb382b924009f0d9168"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Apr 19 20:34:13 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 01 23:07:15 2012 -0700"
      },
      "message": "bgpd: CVE-2012-1820, DoS in bgp_capability_orf()\n\nAn ORF (code 3) capability TLV is defined to contain exactly one\nAFI/SAFI block. Function bgp_capability_orf(), which parses ORF\ncapability TLV, uses do-while cycle to call its helper function\nbgp_capability_orf_entry(), which actually processes the AFI/SAFI data\nblock. The call is made at least once and repeated as long as the input\nbuffer has enough data for the next call.\n\nThe helper function, bgp_capability_orf_entry(), uses \"Number of ORFs\"\nfield of the provided AFI/SAFI block to verify, if it fits the input\nbuffer. However, the check is made based on the total length of the ORF\nTLV regardless of the data already consumed by the previous helper\nfunction call(s). This way, the check condition is only valid for the\nfirst AFI/SAFI block inside an ORF capability TLV.\n\nFor the subsequent calls of the helper function, if any are made, the\ncheck condition may erroneously tell, that the current \"Number of ORFs\"\nfield fits the buffer boundary, where in fact it does not. This makes it\npossible to trigger an assertion by feeding an OPEN message with a\nspecially-crafted malformed ORF capability TLV.\n\nThis commit fixes the vulnerability by making the implementation follow\nthe spec.\n"
    },
    {
      "commit": "d1d3ac9bad0caf7a9c465bb382b924009f0d9168",
      "tree": "ee76b87f2b3b18ac109bf8b4268bfa5251ac3b34",
      "parents": [
        "b07458a055493dd37cb955ae90f11ae8bc334d3a"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Thu Oct 04 16:21:34 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 01 23:03:24 2012 -0700"
      },
      "message": "build: reorder libraries to address linker error\n\nThe linker on some systems (for example, Ubuntu 12.04 LTS x86_64)\nappears to be sensitive to the order in which libraries are\nspecified. On these systems, if a library \u0027A\u0027 depends on a library\n\u0027B\u0027, it has to be specified before \u0027B\u0027 when linking an executable.\n\n  * zebra/Makefile.am: Make sure LIBCAP comes after libzebra.\n\n  * tests/Makefile.am: Ensure libm comes after libbgp.\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b07458a055493dd37cb955ae90f11ae8bc334d3a",
      "tree": "d0bc403501b7cc8f7be805da9dd5d6d29846af20",
      "parents": [
        "3f0bfc9e82e0d735be2cb06d5c4a3028650637bf"
      ],
      "author": {
        "name": "Daniel Kozlowski",
        "email": "dkozlowski@sevone.com",
        "time": "Wed Sep 26 12:01:24 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 01 22:58:38 2012 -0700"
      },
      "message": "bgpd: flock() dump files (BZ#742)\n\nflock()ing the BGP dump files helps consumers determine when they\u0027re\nsafe to read.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3f0bfc9e82e0d735be2cb06d5c4a3028650637bf",
      "tree": "1d923623eaecc1cd05fdc285f1e7874ad638985c",
      "parents": [
        "837d16ccbe0fca413f8927da6a34b1e97ccada8a"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Wed Sep 26 12:01:23 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 01 22:58:36 2012 -0700"
      },
      "message": "lib: treat OSX as BSD for IP_HDRINCL (BZ#739)\n\nMac OS X needs HAVE_IP_HDRINCL_BSD_ORDER defined like BSD. If it\u0027s not\ndefined, it\u0027ll fail like this:\n\n  *** sendmsg in ospf_write failed to 224.0.0.5, id 0, off 0, len 64,\n  interface en0, mtu 1500: Invalid argument\n\nWhich is caused by reordering iph-\u003eip_len in\nsockopt_iphdrincl_swab_htosys.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "837d16ccbe0fca413f8927da6a34b1e97ccada8a",
      "tree": "7aed5a517b619c03d11bf567f6a14cda6f8f5efe",
      "parents": [
        "655071f44aab42e89bcece3a93da456fdd0d913a"
      ],
      "author": {
        "name": "Balaji.G",
        "email": "balajig81@gmail.com",
        "time": "Wed Sep 26 14:09:10 2012 +0530"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "*: use array_size() helper macro\n\nUse the array_size() helper macro.  Replaces several instances of local\nmacros with the same definition.\n\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "655071f44aab42e89bcece3a93da456fdd0d913a",
      "tree": "85c195b18df1d6e64c59a5193791d2ae7333c4a0",
      "parents": [
        "80a21dc60fa007bb00437fdc047c3e059232639f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 08 13:32:53 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "isisd: don\u0027t overrun list of protocols\n\nisisd currently has a list of supported protocols as a fixed array of\nsize 4.  this can be overran, leading to an overwrite of the ipv4_addrs\npointer.\n\n  * isisd/isis_pdu.c: don\u0027t accept more protocols than there\u0027s space for\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "80a21dc60fa007bb00437fdc047c3e059232639f",
      "tree": "884fad4cd756c73e36232b6182e46d85ba64e229",
      "parents": [
        "f02a09925db53d3e1d29b1917ebbcaa8edf72c12"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 08 13:32:12 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "lib: add array_size() helper\n\nimplement array_size as sizeof(array) / sizeof(array element)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f02a09925db53d3e1d29b1917ebbcaa8edf72c12",
      "tree": "8c8fefac30fa372f4e04c6a9f8ceed6569f55570",
      "parents": [
        "948b6bef7f9cf841a98fe3ea40419696500c8c4c"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 08 13:15:45 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "isisd: don\u0027t process invalid prefixes from TLVs\n\nit\u0027s possible to feed invalid prefixes (1.2.3.4/40 or dead::beef/200) on\nIS-IS.  if this is not checked, it will later cause an assert in\nprocessing.  let\u0027s simply abort processing the TLV if the prefix is\ninvalid.\n\n  * isisd/isis_tlv.c: check prefix lengths for validity\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "948b6bef7f9cf841a98fe3ea40419696500c8c4c",
      "tree": "9dbdadff242010472e298b624e20e52bd5625328",
      "parents": [
        "0fece074e8c9e282ae2cecf9a0a79dc6c930cfb1"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 08 06:27:04 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "isisd: pull up invalid prefix assert()\n\nprocessing invalid prefixes causes isisd to assert() or otherwise\nmisbehave in ip_masklen/apply_mask.  pull up the assert() to indicate\nbetter there\u0027s broken data in isisd\u0027s LSDB.\n\n  * isisd/isis_spf.c: assert() prefix lengths\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0fece074e8c9e282ae2cecf9a0a79dc6c930cfb1",
      "tree": "57807d45aaa0869b6b90291eedd30c084891274b",
      "parents": [
        "a22ab5a560c7a46f6ecc6feb874c0dbbde9699c6"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sun May 06 00:03:07 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "isisd: fix null pointer dereference in send_lsp()\n\n  * isisd/isis_pdu.c: (send_lsp) Handle case where there are no LSPs\n    on the LSP transmission queue. This can happen if, for instance,\n    the queue is cleared because of protocol events before the\n    send_lsp thread gets a chance to run.\n"
    },
    {
      "commit": "a22ab5a560c7a46f6ecc6feb874c0dbbde9699c6",
      "tree": "0f2eb80dc14b21ef14e0de45e1f32d581c7186c0",
      "parents": [
        "4effc29fb1c33a87a8d386de39c20d36a6956645"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat May 05 23:50:30 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "isisd: tighten checks on ISIS pdu length\n\n  * isisd/isis_pdu.c: Fix problem where isisd would crash if it\n    received a LAN IIH with the \u0027pdu length\u0027 field set to zero.\n    Similar problems can occur in parsing other ISIS PDUs as well --\n    check that the PDU length in an ISIS hello, LSP or SNP packet is\n    at least as big as the size of the respective fixed header.\n"
    },
    {
      "commit": "4effc29fb1c33a87a8d386de39c20d36a6956645",
      "tree": "73e57392e4227aeae3ca3ef1db54e227f46909e6",
      "parents": [
        "b4154c145a2d1d0679983130413b81d44fbb04ab"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat May 05 17:42:43 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "lib: improve sanity checks in stream_set_endp()\n\n  * lib/stream.c: (stream_set_endp) Add checks to make sure that the\n    supplied \u0027endp\u0027 is within the \u0027size\u0027 of the stream, and that the\n    current read pointer \u0027getp\u0027 is not beyond the specified \u0027endp\u0027.\n"
    },
    {
      "commit": "b4154c145a2d1d0679983130413b81d44fbb04ab",
      "tree": "f46031cc4f632315fd7ebb71737c971faeb635f4",
      "parents": [
        "821755530e328182c885c98891af799926bd56bd"
      ],
      "author": {
        "name": "JR Rivers",
        "email": "jrrivers@cumulusnetworks.com",
        "time": "Mon Sep 24 17:26:53 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "ospfd: respect max-metric over configured cost for summary LSAs\n\nISSUE\n\nWhen max-metric router-lsa administrative is invoked on an ABR created with...\narea \u003carea\u003e range \u003caddr/mask\u003e\nthe summary LSAs are sent out with 65535 (max-metric) added to the normal cost.\n\nWhen max-metric router-lsa administrative is invoked on an ABR created with...\narea \u003carea\u003e range \u003caddr/mask\u003e cost \u003ccost\u003e\nthe summary LSAs are sent out with \u003ccost\u003e (the max-metric is ignored).  This\nsecond behavior effectively incapacitates the max-metric function.\n\nPATCH\n\nThis patch evaluates the state of the router and if it\u0027s isolated as a stub\nrouter (rfc3137) via `max-metric router-lsa`, we unconditionally uses the\nvalue of 0xff0000 when advertising summary LSAs.\n\nSigned-off-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "821755530e328182c885c98891af799926bd56bd",
      "tree": "5227803e0f5cd089a41c1fc06a47cef18612b6a7",
      "parents": [
        "8fc9e007ee752a982fe47311702d7ff3b9c5b5cd"
      ],
      "author": {
        "name": "JR Rivers",
        "email": "jrrivers@cumulusnetworks.com",
        "time": "Mon Sep 24 17:26:50 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "ospfd: ABR algorithm not propagating MAXAGE LSAs into area\n\nWhen a range (or sub-range) is deleted, the area is notified by propagating a\nMAXAGE LSA.  This LSA stays in the database for a while to both insure\npropagation as well as in the off chance that it\u0027s useful in the near future.\n\nUnfortunately, the ABR algorithm was treating these MAXAGE LSAs as unchanged and\nnot propagating them within the areas.\n\nSigned-off-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8fc9e007ee752a982fe47311702d7ff3b9c5b5cd",
      "tree": "8dd5ef95e303d34f1045afe538f44a07dab017d3",
      "parents": [
        "d8a4e42b7d19a87eacc00c825e913907a58f39ee"
      ],
      "author": {
        "name": "JR Rivers",
        "email": "jrrivers@cumulusnetworks.com",
        "time": "Mon Sep 24 17:26:46 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "ospfd: blackhole route removal for area range\n\nISSUE\n\nWhen an area range is created in which there the sub-area has routes that are\nsmaller than the range, an ABR creates a blackhole route to cover the range.\nWhen the range is removed, the blackhole route is not removed.\n\n--A----B----C---\n\nB is an ABR with A in area 1 and C in area 0.  If A advertises `10.2.0.0/30` and\n`10.2.0.4/30` and B is configured with `area 0.0.0.1 range 10.2.0.0/29` a\nblackhole is created on B (`blackhole 10.2.0.0/29 proto zebra`).  When the\narea/range is removed via the command line, the blackhole remains in existence\neven though the \"range\" route is removed from area 0 and the individual routes\nare propagated.\n\nPATCH\n\nThe reason for this behavior is that, prior to this patch, the range is deleted\nfrom the area\u0027s list, so when ospf_abr_manage_discard_routes() gets called,\nthere is nothing to clean up.  The patch removes the discard route as part of\nthe processing of the command line (ospf_area_range_unset()).\n\nSigned-off-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d8a4e42b7d19a87eacc00c825e913907a58f39ee",
      "tree": "2d0777bfbef0e77ca1722fe0e7b2591ef89d4102",
      "parents": [
        "b0145ddb4bf75d2c8853aa3d0bc7c522f4f17531"
      ],
      "author": {
        "name": "JR Rivers",
        "email": "jrrivers@cumulusnetworks.com",
        "time": "Thu Sep 13 17:17:36 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "lib: improve fletcher checksum validation\n\nOVERVIEW\n\nThe checksum used in OSPF (rfc2328) is specified in rc905 annex B.  There is an\nsample implementation in rfc1008 which forms the basis of the quagga\nimplementation.  This algorithm works perfectly when generating a checksum;\nhowever, validation is a bit problematic.\n\nThe following LSA (generated by a non-quagga implementation) is received by\nquagga and marked with an invalid checksum; however, it passes both the rfc905\nand rfc1008 validation checks.\n\nstatic uint8_t lsa_10_121_233_29[] \u003d {\n   0x0e, 0x10, 0x02, 0x03,\n   0x09, 0x00, 0x35, 0x40,\n   0x0a, 0x79, 0xe9, 0x1d,\n   0x80, 0x00, 0x00, 0x03,\n   0x00, 0x8a, 0x00, 0x1c,\n   0xff, 0xff, 0xff, 0xe0,\n   0x00, 0x00, 0x36, 0xb0\n};\n\nLS Type: Summary-LSA (IP network)\n   LS Age: 3600 seconds\n   Do Not Age: False\n   Options: 0x02 (E)\n   Link-State Advertisement Type: Summary-LSA (IP network) (3)\n   Link State ID: 9.0.53.64\n   Advertising Router: 10.121.233.29 (10.121.233.29)\n   LS Sequence Number: 0x80000003\n   LS Checksum: 0x008a\n   Length: 28\n   Netmask: 255.255.255.224\n   Metric: 14000\n\nYou\u0027ll note that one byte of the checksum is 0x00; quagga would calculate the\nchecksum as 0xff8a.\n\nIt can be argued that the sourcing implementation generates an incorrect\nchecksum; however, rfc905 indicates that, for 1\u0027s complement arithmetic, the\nvalue 255 shall be regarded as 0, thus either values are valid.\n\nEXPLANATION\n\nThe quagga ospfd and ospf6d implementations operate by copying the PDU\u0027s\nexisting checksum in a holding variable, calculating the checksum, and comparing\nthe resulting checksum to the original.  As a note, this implementation has the\nside effect of modifying the contents of the PDU.\n\nEvaluation of both rfc905 and rfc1008 shows that checksum validation should\ninvolve calculating the sum over the PDU and checking that both resulting C0 and\nC1 values are zero.  This behavior is enacted in the rfc1008 implementation by\ncalling encodecc with k \u003d 0 (checksum offset); however, this functionality had\nbeen omitted from the quagga implementation.\n\nPATCH\n\nThis patch adds the ability to call the quagga\u0027s fletcher_checksum() with a\nchecksum offset value of 0xffff (aka FLETCHER_CHECKSUM_VALIDATE) which returns\nthe sum over the buffer (a value of 0 indicates a valid checksum).  This is\nsimilar to the mechanism in rfc1008 when called with k \u003d 0.  The patch also\nintroduces ospf_lsa_checksum_valid().\n\nospf6d had it\u0027s own implementation of the fletcher checksum in\nospf6_lsa_checksum(); it\u0027s the same algorithm as in fletcher_checksum().  This\npatch removes the local implementation in favor of the library\u0027s as well as creates\nand uses ospf6_lsa_checksum_valid().\n\nquagga\u0027s ISIS implementation suffers from the same problem; however, I do not\nhave the facilities to validate a fix to ISIS, thus this change has been left to\nthe ISIS maintainers.  The function iso_csum_verify() should be reduced to\nrunning the fletcher checksum over the buffer using an offset of 0.\n\nSigned-off-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Nolan Leake \u003cnolan@cumulusnetworks.com\u003e\nReviewed-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b0145ddb4bf75d2c8853aa3d0bc7c522f4f17531",
      "tree": "01df97d02a64742e9dbd4238f77d627c9f08eee7",
      "parents": [
        "945ea293399af6c9ff3efd07686ff30c3d2a3e8b"
      ],
      "author": {
        "name": "Nolan Leake",
        "email": "nolan@cumulusnetworks.com",
        "time": "Thu Sep 13 17:17:31 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "zebra: make static routes respect table setting\n\nMake static routes respect non-default routing tables.\n\nBEFORE PATCH\n------------\n\n! in zebra.conf\ntable 1\n\n! add static route\nvtysh\u003e ip route 10.0.0.0/30 eth0\n\ncumulus@net-top0:~$ ip route\ndefault via 192.168.0.2 dev eth0\n10.0.0.0/30 dev eth0  proto zebra\n192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.15\n\n! nothing in table 1\ncumulus@net-top0:~$ ip route show table 1\n\nAFTER PATCH\n-----------\n\n! in zebra.conf\ntable 1\n\n! add static route\nvtysh\u003e ip route 10.0.0.0/30 eth0\n\ncumulus@net-top0:~$ ip route\ndefault via 192.168.0.2 dev eth0\n192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.15\n\n! static route in table 1\ncumulus@net-top0:~$ ip route show table 1\n10.0.0.0/30 dev eth0  proto zebra\n\nSigned-off-by: Nolan Leake \u003cnolan@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "945ea293399af6c9ff3efd07686ff30c3d2a3e8b",
      "tree": "81f039e5b13b1f008a20e534e27c738b970c1874",
      "parents": [
        "28971c8cb1138700e87dc7da673e59b5596bb51b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 06 12:17:12 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 19 11:49:09 2012 +0100"
      },
      "message": "Revert \"ospfd: Do not fall back to intervening router.\"\n\nThis reverts commit 9289c6ff55cd96c943d23e43fc9e5f987aa965ed.\n\nThe commit reverted an earlier change which was fixed a bug that caused\nblack-holes to remote destinations with multiple paths, that could occur\nduring convergence. Overall, the previous code is more correct.\n"
    },
    {
      "commit": "28971c8cb1138700e87dc7da673e59b5596bb51b",
      "tree": "0e55c3f830681449cd96bb36eb04a6a1293d8b44",
      "parents": [
        "67174041d2d9d8908f8b2c915bc0d186d8442c68"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Fri Aug 17 08:19:50 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 21:50:48 2012 +0200"
      },
      "message": "lib/table: add route_table_get_next() and iterator\n\n  * lib/table.[ch]\n\n    - Add a function (route_table_get_next()) to get the route_node in\n      a tree that succeeds a given prefix in iteration order.\n\n      This allows one to reliably walk nodes in a tree while allowing\n      modifications, and is useful for achieving scale and\n      performance. Other approaches are also possible -- the main plus\n      point of this one is that it does not require any state about\n      the walk to be maintained in the table data structures.\n\n    - Add an iterator for walking the nodes in a tree. This introduces\n      a new structure (route_table_iter_t) and the following main\n      functions.\n\n        route_table_iter_init()\n        route_table_iter_pause()\n        route_table_iter_next()\n        route_table_iter_cleanup()\n\n      The iterator normally uses node pointers and the existing\n      route_next() function to walk nodes efficiently. When an\n      iteration is \u0027paused\u0027 with route_table_iter_pause(), it stores\n      the last prefix processed. The next call to\n      route_table_iter_next() transparently invokes\n      route_table_get_next() with the prefix to resume iteration.\n\n  * bgpd/bgp_table.[ch]\n\n    Add wrappers for the new table features described above.\n\n  * tests/table_test.c\n\n    Add tests for the new table code.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "67174041d2d9d8908f8b2c915bc0d186d8442c68",
      "tree": "b57edeae37701055c3c21b79ce51fcbc5069e704",
      "parents": [
        "f9c1b7bb9b98342f1f3b0bfe3af01844f364dce9"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Fri Aug 17 08:19:49 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 21:50:48 2012 +0200"
      },
      "message": "bgpd: make bgp_table a wrapper around table library\n\nMake the BGP table code a thin wrapper around the table implementation\nin libzebra.\n\n  * bgpd/bgp_table.[ch]\n\n    - Use the ROUTE_NODE_FIELDS macro to embed the fields of a\n      route_node in the bgp_node structure.\n\n    - Add a route_table field to the bgp_table structure.\n\n      Initialize the route_table with a delegate, such that the nodes\n      in the table are bgp_node structures.\n\n    - Add inline wrappers that call route_table functions underneath,\n      and accept/return the correct BGP types.\n\n  * bgpd/bgp_route.c\n\n    Change some code to use inline wrappers instead of accessing\n    fields of nodes/tables directly. The latter does not always work\n    because the types of some fields need to be translated now.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f9c1b7bb9b98342f1f3b0bfe3af01844f364dce9",
      "tree": "350c8e0d98e4dcc53b126c6ce1c7568c440fcb06",
      "parents": [
        "3eb8ef37bc463f88bfa36bd26fd43f7f6ad36c20"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Fri Aug 17 08:19:48 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 21:48:49 2012 +0200"
      },
      "message": "lib: prepare table code for reuse by bgp_table\n\n  * lib/table.[ch]\n\n    - Add a macro (ROUTE_NODE_FIELDS) that expands to all the fields\n      of a route_node structure.\n\n    - Add the route_table_delegate_t structure, a function vector\n      which allows clients to customize the behavior of one or more\n      tables.\n\n      The delegate currently contains the \u0027create_node\u0027 and\n      \u0027destroy_node\u0027 functions, and hence enables a table to use an\n      alternative node structure. The alternative node is expected to\n      embed the fields of a route_node using ROUTE_NODE_FIELDS.\n\n    - Add route_table_init_with_delegate() to create a new table with\n      a given delegate.\n\n    - Make route_table_init() a thin wrapper around\n      route_table_init_with_delegate(). The delegate it passes in\n      simply creates/destroys route_node structures as before.\n\n    - Add a user data pointer (info) to the route_table\n      structure. This can be used by a client to keep per-table state.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3eb8ef37bc463f88bfa36bd26fd43f7f6ad36c20",
      "tree": "6238a10b945d98b5b06f5bf4620406579d687aa6",
      "parents": [
        "ed6e297972318a0070ad4d973401fbc6e0def558"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Fri Aug 17 08:19:47 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 21:48:48 2012 +0200"
      },
      "message": "lib: bring some changes over from bgp_table to table\n\n  * lib/table.c\n\n    - Maintain table node count. Expose it via the route_table_count()\n      function (from revision cbdfbaa5).\n\n    - route_unlock_node(): Add assertion (from revision 228da428).\n\n    - route_table_free(): Make static and fix up cleanup code (from\n      revision 228da428).\n\n    - route_node_delete(): Change to be static.\n\n    - Add \u0027const\u0027 qualifier in a couple places.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ed6e297972318a0070ad4d973401fbc6e0def558",
      "tree": "cc544ec6f62a22cb2281e7665a39d469b377cc63",
      "parents": [
        "bb2315f2878da685fae094aece13409667d21f97"
      ],
      "author": {
        "name": "Serj Kalichev",
        "email": "serj.kalichev@gmail.com",
        "time": "Fri Sep 07 13:29:42 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 25 06:07:03 2012 +0200"
      },
      "message": "build: fix extract.pl for cross compilation\n\nextract.pl should invoke the C preprocessor for the target system, not the\nhost.\n\n* vtysh/extract.pl.in: use @CPP@ to get target cpp\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "bb2315f2878da685fae094aece13409667d21f97",
      "tree": "b8625a91196bc54e4f4f253711c611bd9212e638",
      "parents": [
        "1b54f798d3cc359bec036db83c1c9bfab75d1244"
      ],
      "author": {
        "name": "Nick Hilliard",
        "email": "nick@inex.ie",
        "time": "Sat Aug 18 15:10:57 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 25 06:03:46 2012 +0200"
      },
      "message": "ripd: clear sockaddr_in before using\n\nripd_create_socket() failed in bind() on Mac OS X 10.7 since there was garbage\nin unused fields of struct sockaddr_in.\n\n* ripd/ripd.c: zero out struct sockaddr_sin from before filling.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1b54f798d3cc359bec036db83c1c9bfab75d1244",
      "tree": "b9a63cbff8cbea31b3972cc011aca1253a526fc1",
      "parents": [
        "4bed21c402fa1079301d47811a4579985997c881"
      ],
      "author": {
        "name": "Brad Smith",
        "email": "brad@comstyle.com",
        "time": "Thu Aug 09 00:44:28 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 25 05:56:04 2012 +0200"
      },
      "message": "build: fix autoconf multicast check on OpenBSD\n\nFix the \"BSD struct ip_mreq hack\" autoconf test to work with OpenBSD.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4bed21c402fa1079301d47811a4579985997c881",
      "tree": "977e18bc3403395a33de2d5fef1d5d738fa42cf7",
      "parents": [
        "9289c6ff55cd96c943d23e43fc9e5f987aa965ed"
      ],
      "author": {
        "name": "Brad Smith",
        "email": "brad@comstyle.com",
        "time": "Thu Aug 09 00:40:09 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 25 05:56:00 2012 +0200"
      },
      "message": "build: correct libtool parameter used within Makefiles\n\nThis corrects the parameters passed to libtool when linking\nthe shared libraries. The paramter name is -version-info not\n-version.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9289c6ff55cd96c943d23e43fc9e5f987aa965ed",
      "tree": "b971fa4b0ce15e02abd27a62548d53371e4cc0b2",
      "parents": [
        "ba281d3d04053b7c59ecdfdbea91a62c09e9f8a4"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:14 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:45 2012 +0200"
      },
      "message": "ospfd: Do not fall back to intervening router.\n\nThe patch in bug 330 did two things. It add a return value\nwhether ospf_nexthop_calculation() failed or not and also\nmoved the return stmt for 16.1.1 para 5 so now SPF\nwill fallback to the intervening router when no back links are found\nby 16.1.1 para 5. This is wrong and can potentially create black holes\nor routing loops according to Dave Katz and Acee Lindem at ospf@ietf.org\n\nEven if the current code could be proved to be harmless in all cases,\nit adds substantial extra processing and memory allocations.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ba281d3d04053b7c59ecdfdbea91a62c09e9f8a4",
      "tree": "3ada2bf381bef8a571776a3e54879c8d1aa8f149",
      "parents": [
        "c963c20346c0e3cd75735b88beded98389607cd5"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:13 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:45 2012 +0200"
      },
      "message": "ospfd: use ZEBRA_NEXTHOP_IPV4_IFINDEX\n\nOSPF really needs to specify interface in its routes. Otherwise\nospf may change the wrong route.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\n[fixed up some whitespace errors, split patch in two]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c963c20346c0e3cd75735b88beded98389607cd5",
      "tree": "24973f9f7859e03fafdbaec0921d5c279597a1f2",
      "parents": [
        "57c639f01ec6be70ac858f412d32b638a9756bed"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:13 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:44 2012 +0200"
      },
      "message": "zebra: Add support for ZEBRA_NEXTHOP_IPV4_IFINDEX\n\nActually implement the IPV4_IFINDEX nexthop type that has been drifting\naround as a definition forever (without any warning about it being a\nplaceholder).\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "57c639f01ec6be70ac858f412d32b638a9756bed",
      "tree": "cd415e8d098b827d69dcfdf3d3b22f5df11cc4c9",
      "parents": [
        "c81ee5c94f5b34375f3ef276fdb9bde9098e7ecb"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:12 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:37 2012 +0200"
      },
      "message": "ospf_spf_process_stubs: use LSA pos to find OSFP interface\n\nThis is better than a prefix lookup as prefixes may not be\nunique, that is, the same prefix can exist on several interfaces.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c81ee5c94f5b34375f3ef276fdb9bde9098e7ecb",
      "tree": "dad1ab0d81b72a7c7a869bc7dc051b703deec9be",
      "parents": [
        "7b92589c225ae46417fc3fa0714a1b6f53f19c51"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Jul 07 17:06:11 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:07:30 2012 +0200"
      },
      "message": "ospfd: Optimize and improve SPF nexthop calculation\n\nMaintain router LSA positions in OSPF interface.\nFind the OSPF interface in nexthop_calculation using\nthe position in the router LSA. This is possible because\nthe only time nexthop_calculation needs to look up interfaces\nis when dealing with its own Router LSA.\n\nThis has the following advantages:\n - Multiple PtP interfaces with the same IP address between two routers.\n - Use Unnumbered PtP on just one end of the link.\n - Faster OI lookup for the OSPF interface and only\n   done once for PtoP links.\n\n*ospf_interface.h: (struct ospf_interface) Add storage for\n\t\t   storing router LSA position.\n\n*ospf_interface.c: (ospf_if_lookup_by_lsa_pos)\n\t\t   lookup OSPF I/F in an area using LSA position.\n\n*ospf_lsa.c: (router_lsa_link_set) record Router LSA position.\n\n*ospf_spf.c: (ospf_spf_next) Count and pass along lsa position.\n\t     (ospf_nexthop_calculation) Add lsa position argument.\n\t     call ospf_if_lookup_by_lsa_pos() for OSFP interface handle.\n\t     Clean up and remove all calls ospf_if_is_configured() the\n\t     rest. Adjust a few debug logs.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7b92589c225ae46417fc3fa0714a1b6f53f19c51",
      "tree": "38e1add198ee857211684250858a3b946c05c6a9",
      "parents": [
        "aa5cf24b9de96245f2166ef1c4e9612890ced1b3"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jul 23 18:17:57 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 25 18:02:31 2012 +0200"
      },
      "message": "ospfd: avoid exhausting memory with OSPF vertices (BZ#476)\n\nThis was found in scale testing at OSR;  ospfd is adding the same link\nover and over again to the SPF tree.  This fix prevents the resulting\nmemory corruption from happening and adds a debug message to track\noccurence of this issue and/or confirm a proper fix.\n\n(This version was improved by Scott Feldman over the earlier RFC.)\n\n* ospfd/ospf_spf.c: (ospf_spf_add_parent) loop over existing vertices\n  and refuse to add duplicates.\n\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\nSigned-off-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "aa5cf24b9de96245f2166ef1c4e9612890ced1b3",
      "tree": "fc8a8895286c635764e2d409b7ab6567a5b9ee6f",
      "parents": [
        "ee1ac2d52a6656e589ca2fb4feb3ec5fd366ecb7"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jul 19 16:11:50 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jul 19 16:15:50 2012 +0200"
      },
      "message": "lib: make IPv6 prefix parser slightly more strict\n\nThis makes it possible to have both \"show babel route A.B.C.D/M\"\nand \"show babel route X:X::X:X/M\" commands at the same time without\nthe parser complaining about ambiguity.\n\n* lib/command.c: only accept STATE_DOT after : was seen.\n\nReported-by: Juliusz Chroboczek \u003cjch@pps.jussieu.fr\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ee1ac2d52a6656e589ca2fb4feb3ec5fd366ecb7",
      "tree": "164ab37de3c091f9bcb18f07d82c01d41d345238",
      "parents": [
        "7f062c217b262e362a3362c677dea6c5e820adf1"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jul 19 12:58:59 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jul 19 13:00:29 2012 +0200"
      },
      "message": "build: fix isisd topology out of tree build\n\nisisd got the include directory wrong on building with a separate build\ndirectory.\n\n  * configure.ac: adjust ISIS_TOPOLOGY_INCLUDES\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7f062c217b262e362a3362c677dea6c5e820adf1",
      "tree": "a74cb6fa04df4af9f60d770de5e485c37ba2866d",
      "parents": [
        "1080c13f5d3979149c1950a1c46f45e2d4bd0dc8"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Feb 01 16:41:26 2010 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jul 13 18:54:09 2012 +0200"
      },
      "message": "zebra: lingering IP address after deletion (BZ#486)\n\nzebra address bookkeeping is a mess. this is just a workaround to have\nIPv4 address deletion somewhat working on Linux.\n\nthe if_unset_prefix call is synchronous, when it returns success the\naddress deletion completed successfully. this is either signaled by a\nnetlink ACK or by an OK return value from ioctl().\n\nThis version is wrapped by #ifdef HAVE_NETLINK so we don\u0027t touch the\nBSDs for now.\n\n* zebra/interface.c: On Linux, update zebra internal state after\n  deleting an address.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1080c13f5d3979149c1950a1c46f45e2d4bd0dc8",
      "tree": "8f2147dfed3514607041e2167d4facab620c8643",
      "parents": [
        "f710888ddd413730f6025ed5d9a89b124836cde6"
      ],
      "author": {
        "name": "Joachim Nilsson",
        "email": "troglobit@gmail.com",
        "time": "Wed May 30 08:15:48 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jul 13 18:53:53 2012 +0200"
      },
      "message": "configure: Add --with-pkg-extra-version\u003dVER for packagers/distributions.\n\nThis change adds a --with-pkg-extra-version option to ./configure to allow\npackagers and distributions to fine tune the version displayed to the end\nuser to assist in support. It is also very useful when reporting bugs on\nthe official Quagga mailing lists.\n\nThere are two ways of utilsing this functionality:\n\n      a) ./configure --with-pkg-extra-version\u003d-wmo1\n      b) EXTRAVERSION\u003d-wmo1 ./configure\n\nThe latter is a common way for many distributions to add extra version\nstrings to signify their own patch level to a given package.\n\nAlso, minor whitespace fix in configure summary.\n\nSigned-off-by: Joachim Nilsson \u003cjoachim.nilsson@westermo.se\u003e\nSigned-off-by: Joachim Nilsson \u003ctroglobit@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f710888ddd413730f6025ed5d9a89b124836cde6",
      "tree": "be0dd0aaec834c52372b6914f4f87260acb2b219",
      "parents": [
        "18a4e3715f89337ac8b70f6f63cc131c3218c82c",
        "0402ca4e92fa0904d5ee0926482ebca08ffd5c81"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jul 13 14:05:55 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jul 13 14:05:58 2012 +0200"
      },
      "message": "Merge remote branch \u0027vincentbernat/feature/ospfv3-mib\u0027\n"
    },
    {
      "commit": "18a4e3715f89337ac8b70f6f63cc131c3218c82c",
      "tree": "1b38b2eae4e1cee042f96a42217b14647159bf0f",
      "parents": [
        "a47c5838e9f445ab887ad927706b11ccbb181364",
        "8046ba6ec4d6e87bf8da6563c0f3e5e66c4652b3"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jul 13 14:05:36 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jul 13 14:05:40 2012 +0200"
      },
      "message": "Merge remote branch \u0027vincentbernat/feature/agentx\u0027\n"
    },
    {
      "commit": "0402ca4e92fa0904d5ee0926482ebca08ffd5c81",
      "tree": "be0dd0aaec834c52372b6914f4f87260acb2b219",
      "parents": [
        "bf836661ef8ef880350bc41f0a82566ed5075066"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue Jul 10 09:27:57 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue Jul 10 09:27:57 2012 +0200"
      },
      "message": "ospf6d: fix segfault when requesting inexistant interfaces or areas\n"
    },
    {
      "commit": "bf836661ef8ef880350bc41f0a82566ed5075066",
      "tree": "09fe0cfd070a3984860b1ffc89020caba892eff4",
      "parents": [
        "c349bb86927d1f5fc8aa8ebc6f553786f8e70634"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 04 14:36:12 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:05:17 2012 +0200"
      },
      "message": "ospf6d: add SNMP notifications/traps support\n\nOnly implement ospfv3NbrStateChange and ospfv3IfStateChange.\n"
    },
    {
      "commit": "c349bb86927d1f5fc8aa8ebc6f553786f8e70634",
      "tree": "5560db37b8512a550dd33a7217577b54bf1cad15",
      "parents": [
        "3bc4f84efe147ebc65fccbe898b81d78341c542b"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 04 12:59:20 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:05:17 2012 +0200"
      },
      "message": "ospf6d: add SNMP support for ospfv3*LsdbTable\n\nThis includes:\n - ospfv3AsLsdbTable\n - ospfv3AreaLsdbTable\n - ospfv3LinkLsdbTable\n"
    },
    {
      "commit": "3bc4f84efe147ebc65fccbe898b81d78341c542b",
      "tree": "cfe0f904c134fdb7659f6a47897aff88208d2ddd",
      "parents": [
        "ea86e4042b7459fbf5d96835c509cb743bf013c0"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 04 11:40:04 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:05:17 2012 +0200"
      },
      "message": "ospf6d: add SNMP implementation of ospfv3IfTable\n"
    },
    {
      "commit": "ea86e4042b7459fbf5d96835c509cb743bf013c0",
      "tree": "7cf527b8084fd7ede72503d6aad273eaf73261e6",
      "parents": [
        "2c5f148065c074d51ff10808a2b6ac2b3296a828"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 04 10:29:49 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:05:17 2012 +0200"
      },
      "message": "ospf6d: complete SNMP implementation of ospfv3AreaTable\n"
    }
  ],
  "next": "2c5f148065c074d51ff10808a2b6ac2b3296a828"
}
