)]}'
{
  "log": [
    {
      "commit": "5fdaa04e635fdef7deca9bdfe1be4b60ec90add6",
      "tree": "77e76c6bf353685dc9c13698b79b16f68aca3232",
      "parents": [
        "75d044d234d1826db729f9ca580c966a028dbfc3"
      ],
      "author": {
        "name": "Jon Andersson",
        "email": "jonirucoeith@gmail.com",
        "time": "Tue Sep 13 15:47:14 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:02:41 2011 +0400"
      },
      "message": "ospf6d: add lost lines to area config block\n\n* ospf6_area.c\n  * ospf6_area_config_write(): write filter-list, import-list and\n    export-list lines\n"
    },
    {
      "commit": "75d044d234d1826db729f9ca580c966a028dbfc3",
      "tree": "42a43d0c27bc08dee5d2e77b627f42474c6bfbab",
      "parents": [
        "2b43bf231c3004efaef96f2b85d0e0f4cf6a1ea1"
      ],
      "author": {
        "name": "Christian Hammers",
        "email": "ch@debian.org",
        "time": "Mon Sep 12 14:23:05 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:02:26 2011 +0400"
      },
      "message": "ospf6d: fix crash on filter-list handling (BZ#530)\n\nThis essentially merges the fix available from Debian build of Quagga.\n\n* ospf6_area.c\n  * area_filter_list(): use correct argv indices\n  * no_area_filter_list(): idem\n"
    },
    {
      "commit": "2b43bf231c3004efaef96f2b85d0e0f4cf6a1ea1",
      "tree": "d98048f9f306b7fda9fc5cb3a0e51de0dcc42715",
      "parents": [
        "306ca83213aabe069f1645d1708bbc4f278e2a63"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jul 14 16:30:08 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:59:46 2011 +0400"
      },
      "message": "configure: fix FreeBSD header detection (BZ#408)\n\nThis change is based on Xavier Beaudouin\u0027s patch (which fixes detection\nof 3 config.h macros on FreeBSD without any impact to Linux build of\nQuagga) and FreeBSD port patch (which fixes 5 config.h macros, but\nbreaks the Linux build), it fixes 5 macros and works for both FreeBSD 8\nand Linux.\n"
    },
    {
      "commit": "306ca83213aabe069f1645d1708bbc4f278e2a63",
      "tree": "bede2e33f238ff1d68fe16ee527e1b997e58a1b2",
      "parents": [
        "89980759568ec5f5f50c225ef25a00938fc86c72"
      ],
      "author": {
        "name": "Peter Szilagyi",
        "email": "peszilagyi@gmail.com",
        "time": "Tue Sep 13 17:37:06 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:50:17 2011 +0400"
      },
      "message": "isisd: include hash.h, not hash.c\n"
    },
    {
      "commit": "89980759568ec5f5f50c225ef25a00938fc86c72",
      "tree": "dec49d657e301443a28d275bbb6695af0f90aee4",
      "parents": [
        "5574999e598eee290c7e43a2b3a7aafd27be0ee0"
      ],
      "author": {
        "name": "Fritz Reichmann",
        "email": "fritz@reichmann.nl",
        "time": "Wed Sep 14 20:46:57 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:49:26 2011 +0400"
      },
      "message": "isisd: raise hello rate for DIS (BZ#539)\n\n* isis_pdu.c: Divide hello interval by three, depending if we are DIS or\n  not.\n"
    },
    {
      "commit": "5574999e598eee290c7e43a2b3a7aafd27be0ee0",
      "tree": "0d3b6cdf55031385cec680045edcd1315c6e8812",
      "parents": [
        "b69442d456fa6a00716c5a0684395b04f5794cd6"
      ],
      "author": {
        "name": "Fritz Reichmann",
        "email": "fritz@reichmann.nl",
        "time": "Wed Sep 14 19:31:51 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:48:43 2011 +0400"
      },
      "message": "isisd: fix crash on \"no router isis\" (BZ#536)\n\nThe crash is due to threads accessing data that gets destroyed\nduring the removal of the configuration.\n\n* isis_circuit.c: Destroy adjacencies to stop adjacency expiry thread.\n  Stop PSNP threads.\n* isisd.c: Change state of circuit back to INIT and reassign the\n  circuit structure to isis-\u003einit_circ_list rather than destroying\n  the circuit data structure. Stop SPF threads. Stop LSP generation\n  threads.\n* isisd.h: Add pointers to LSP threads into area structure in order to\n  stop them in isisd.c\n* isis_lsp.c: Store pointer to LSP thread in area structure.\n* isis_pdu.c: Stop PDU generation for a circuit with a removed area.\n* isis_pfpacket.c: Stop processing received PDUs for a circuit with a\n  removed area.\n"
    },
    {
      "commit": "b69442d456fa6a00716c5a0684395b04f5794cd6",
      "tree": "149ba75d630f31ce4018e3b6673a23f286b08d5b",
      "parents": [
        "83d1614952faf100a0a1bacaa0a1b3f70a013c9f"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Sep 13 17:15:51 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:47:18 2011 +0400"
      },
      "message": "configure: dismiss libutil.h\n\nRecent versions of libc on Linux (Debian Testing) create lots of\ncompile warnings about direct usage of libutil.h\n"
    },
    {
      "commit": "83d1614952faf100a0a1bacaa0a1b3f70a013c9f",
      "tree": "3b1ffb4fbd385e6f5ee2277ed24015ce2305f5db",
      "parents": [
        "3c9cfcdebf680c1d2c0e6b69cb4e11885a049e05"
      ],
      "author": {
        "name": "Dmitry Popov",
        "email": "dp@highloadlab.com",
        "time": "Sun Sep 11 13:48:25 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:46:25 2011 +0400"
      },
      "message": "zebra: fix loss of metric for Linux routes\n\n* rt_netlink.c\n  * netlink_route_change(): fetch metric information like\n    netlink_routing_table() does and pass it further\n"
    },
    {
      "commit": "3c9cfcdebf680c1d2c0e6b69cb4e11885a049e05",
      "tree": "c374a8a8d26ed9481e78828b96f7480574521197",
      "parents": [
        "c31e5726bece392e1d20081c712482e9954fec66"
      ],
      "author": {
        "name": "Alexandre Chappuis",
        "email": "alc@open.ch",
        "time": "Tue Aug 02 17:37:39 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:45:22 2011 +0400"
      },
      "message": "ospfd: remove useless RFC1583 check\n\n* ospf_route.c: Function ospf_asbr_route_cmp is called uniquely from\n  ospf_route_cmp() when the flag OSPF_RFC1583_COMPATIBLE is not set.\n  Therefore, the check that the flag is set doesn\u0027t make sense at all\n  and it can consequently be removed without doing any harm.\n\nSigned-off-by: Alexandre Chappuis \u003calc@open.ch\u003e\nSigned-off-by: Roman Hoog Antink \u003crha@open.ch\u003e\n"
    },
    {
      "commit": "c31e5726bece392e1d20081c712482e9954fec66",
      "tree": "60877e3fe755a4d9f147ceb57954557469e4eec1",
      "parents": [
        "37075da75df0451fec4109d440c1a52705222fc6"
      ],
      "author": {
        "name": "Alexandre Chappuis",
        "email": "alc@open.ch",
        "time": "Sun Sep 11 16:54:11 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:42:26 2011 +0400"
      },
      "message": "doc: BGP route-flap dampening\n"
    },
    {
      "commit": "37075da75df0451fec4109d440c1a52705222fc6",
      "tree": "f1536ef128a81e0c6a76e97aa91ff9e20b15a6ef",
      "parents": [
        "0998342b5f79b2441d4beade4bb8ac304de86741"
      ],
      "author": {
        "name": "Alexandre Chappuis",
        "email": "alc@open.ch",
        "time": "Tue Sep 13 16:33:45 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:39:19 2011 +0400"
      },
      "message": "doc: add missing word\n\n* ospfd.texi: Adjust meaning of the rfc1583compatibility option in\n  order to match the RFC specification and the actual source code.\n"
    },
    {
      "commit": "0998342b5f79b2441d4beade4bb8ac304de86741",
      "tree": "f8b35bd4cba2e19a1be832a102eff484f84472c5",
      "parents": [
        "abc7ef44ca05493500865ce81f7b84f5c4eb6594"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 18:50:06 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 18:50:06 2011 +0400"
      },
      "message": "release: 0.99.19\n"
    },
    {
      "commit": "abc7ef44ca05493500865ce81f7b84f5c4eb6594",
      "tree": "35504952c627e93203df81ebd5c96023879df00b",
      "parents": [
        "09395e2a0e93b2cf4258cb1de91887948796bb68"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 13:18:51 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 18:47:16 2011 +0400"
      },
      "message": "ospf6d: CVE-2011-3323 (fortify packet reception)\n\nThis vulnerability (CERT-FI #514840) was reported by CROSS project.\n\nospf6d processes IPv6 prefix structures in incoming packets without\nverifying that the declared prefix length is valid. This leads to a\ncrash\ncaused by out of bounds memory access.\n\n* ospf6_abr.h: new macros for size/alignment validation\n* ospf6_asbr.h: idem\n* ospf6_intra.h: idem\n* ospf6_lsa.h: idem\n* ospf6_message.h: idem\n* ospf6_proto.h: idem\n* ospf6_message.c\n  * ospf6_packet_minlen: helper array for ospf6_packet_examin()\n  * ospf6_lsa_minlen: helper array for ospf6_lsa_examin()\n  * ospf6_hello_recv(): do not call ospf6_header_examin(), let upper\n    layer verify the input data\n  * ospf6_dbdesc_recv(): idem\n  * ospf6_lsreq_recv(): idem\n  * ospf6_lsupdate_recv(): idem\n  * ospf6_lsack_recv(): idem\n  * ospf6_prefixes_examin(): new function, implements A.4.1\n  * ospf6_lsa_examin(): new function, implements A.4\n  * ospf6_lsaseq_examin(): new function, an interface to above\n  * ospf6_packet_examin(): new function, implements A.3\n  * ospf6_rxpacket_examin(): new function, replaces\n    ospf6_header_examin()\n  * ospf6_header_examin(): sayonara\n  * ospf6_receive(): perform passive interface check earliest possible,\n    employ ospf6_rxpacket_examin()\n"
    },
    {
      "commit": "09395e2a0e93b2cf4258cb1de91887948796bb68",
      "tree": "771622102161a372b45f730bd48ab23e69676350",
      "parents": [
        "717750433839762d23a5f8d88fe0b4d57c8d490a"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 13:18:36 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 18:47:06 2011 +0400"
      },
      "message": "ospf6d: CVE-2011-3324 (DD LSA assertion)\n\nThis vulnerability (CERT-FI #514839) was reported by CROSS project.\n\nWhen Database Description LSA header list contains trailing zero octets,\nospf6d tries to process this data as an LSA header. This triggers an\nassertion in the code and ospf6d shuts down.\n\n* ospf6_lsa.c\n  * ospf6_lsa_is_changed(): handle header-only argument(s)\n    appropriately, do not treat LSA length underrun as a fatal error.\n"
    },
    {
      "commit": "717750433839762d23a5f8d88fe0b4d57c8d490a",
      "tree": "aea292ef6dab658197d1df6c9a5bf3f3925013ad",
      "parents": [
        "61ab0301606053192f45c188bc48afc837518770"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 13:18:02 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 18:46:54 2011 +0400"
      },
      "message": "ospfd: CVE-2011-3325 part 2 (OSPF pkt type segv)\n\nThis vulnerability (CERT-FI #514838) was reported by CROSS project.\n\nThe error is reproducible only when ospfd debugging is enabled:\n  * debug ospf packet all\n  * debug ospf zebra\nWhen incoming packet header type field is set to 0x0a, ospfd will crash.\n\n* ospf_packet.c\n  * ospf_verify_header(): add type field check\n  * ospf_read(): perform input checks early\n"
    },
    {
      "commit": "61ab0301606053192f45c188bc48afc837518770",
      "tree": "b7d9037390cd7beefcd7c1c54d2573ef92af80cd",
      "parents": [
        "6b161fc12a15aba8824c84d1eb38e529aaf70769"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 13:17:52 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 18:46:42 2011 +0400"
      },
      "message": "ospfd: CVE-2011-3325 part 1 (OSPF header underrun)\n\nThis vulnerability (CERT-FI #514838) was reported by CROSS project.\n\nWhen only 14 first bytes of a Hello packet is delivered, ospfd crashes.\n\n* ospf_packet.c\n  * ospf_read(): add size check\n"
    },
    {
      "commit": "6b161fc12a15aba8824c84d1eb38e529aaf70769",
      "tree": "abd6c391a491495c70203420e5d91dbcdf282383",
      "parents": [
        "94431dbc753171b48b5c6806af97fd690813b00a"
      ],
      "author": {
        "name": "CROSS",
        "email": "info@codenomicon.com",
        "time": "Mon Sep 26 13:17:21 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 18:46:28 2011 +0400"
      },
      "message": "ospfd: CVE-2011-3326 (uknown LSA type segfault)\n\nThis vulnerability (CERT-FI #514837) was reported by CROSS project.\nThey have also suggested a fix to the problem, which was found\nacceptable.\n\nQuagga ospfd does not seem to handle unknown LSA types in a Link State\nUpdate message correctly. If LSA type is something else than one\nsupported\nby Quagga, the default handling of unknown types leads to an error.\n\n* ospf_flood.c\n  * ospf_flood(): check return value of ospf_lsa_install()\n"
    },
    {
      "commit": "94431dbc753171b48b5c6806af97fd690813b00a",
      "tree": "463b917f9f80236be01e4502863b34ae2d52b53d",
      "parents": [
        "a0bf59bcac8b40c3f83e7f2e7f65087ece6acfc7"
      ],
      "author": {
        "name": "CROSS",
        "email": "info@codenomicon.com",
        "time": "Mon Sep 26 13:17:05 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 26 18:46:16 2011 +0400"
      },
      "message": "bgpd: CVE-2011-3327 (ext. comm. buffer overflow)\n\nThis vulnerability (CERT-FI #513254) was reported by CROSS project.\nThey have also suggested a fix to the problem, which was found\nacceptable.\n\nThe problem occurs when bgpd receives an UPDATE message containing\n255 unknown AS_PATH attributes in Path Attribute Extended Communities.\nThis causes a buffer overlow in bgpd.\n\n* bgp_ecommunity.c\n  * ecommunity_ecom2str(): perform size check earlier\n"
    },
    {
      "commit": "a0bf59bcac8b40c3f83e7f2e7f65087ece6acfc7",
      "tree": "e1352b965caa07bdc181f8d30f3e107deb97bc60",
      "parents": [
        "ef95122eb214f80700fc79b4a95686eadfea859b"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Aug 20 23:12:00 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Aug 27 21:20:40 2011 +0400"
      },
      "message": "ospf6d: add missing include\n\nTwo extern declarations in ospf6_abr.h are based on struct ospf6_route,\nwhich may not be available at the time ospf6_abr.h is included. This may\nlead to warnings after including ospf6_abr.h just for the structures\ndefined in it.\n"
    },
    {
      "commit": "ef95122eb214f80700fc79b4a95686eadfea859b",
      "tree": "1aa3631ef8d9e0a5036124c4029d68259df774b5",
      "parents": [
        "d91f35bc90ec4e5c8513cd7ac1f6fd00c5113c27"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Aug 20 20:58:15 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Aug 27 21:18:51 2011 +0400"
      },
      "message": "ospf6d: move named constants to ospf6d.h\n"
    },
    {
      "commit": "d91f35bc90ec4e5c8513cd7ac1f6fd00c5113c27",
      "tree": "29499885dfe8f2f16a0fb49bd36f400fe7194265",
      "parents": [
        "538cb284864c17de66152a5236db4cd80e3e7639"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Aug 19 22:24:27 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Aug 27 21:18:38 2011 +0400"
      },
      "message": "ospf6d: justify some ABR debug code\n\n* ospf6_abr.c\n  * ospf6_abr_examin_summary(): only fill \"buf\" when it is used\n"
    },
    {
      "commit": "538cb284864c17de66152a5236db4cd80e3e7639",
      "tree": "d74ad1f719ca611e13bef19aea129f0653551fff",
      "parents": [
        "036a6e6cf63a1046ab260d090719b305069288eb",
        "8ced4e82e6f417b13f4bfc09018fc51fd31058e2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jul 29 18:21:50 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jul 29 18:21:50 2011 +0100"
      },
      "message": "Merge remote-tracking branch \u0027origin/master\u0027\n"
    },
    {
      "commit": "036a6e6cf63a1046ab260d090719b305069288eb",
      "tree": "638b920464ce82b188e32013f768d6f5d7b1a6dd",
      "parents": [
        "8dd1a8daae0b15065d54c46f82d44d21aa7a2320",
        "b881c7074bb698aeb1b099175b325734fc6e44d2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jul 29 18:16:25 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jul 29 18:16:25 2011 +0100"
      },
      "message": "Merge branch \u0027attr-errors\u0027\n\nContains BGP fixes:\n\n- set extcommunity crash: tihs patch tries to make the refcounting more robust\n  but does not fully solve the problem, sadly.\n- BGP attribute error handling: Little testing.\n"
    },
    {
      "commit": "8ced4e82e6f417b13f4bfc09018fc51fd31058e2",
      "tree": "9d744d6f95473a0b8d49338ee502dfb765e00f5f",
      "parents": [
        "7e924e11a965fc1053a16945ace10c9bd1d868f8",
        "0150c9c969cfbacb28fa9e05c8bf7f65448d9914"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Jul 13 13:20:06 2011 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Jul 13 13:20:06 2011 -0400"
      },
      "message": "Merge remote-tracking branch \u0027polymorf/master\u0027\n"
    },
    {
      "commit": "7e924e11a965fc1053a16945ace10c9bd1d868f8",
      "tree": "45bda95c903de5b9426c9da5a676ab2a10efbb95",
      "parents": [
        "fe0a1a45c31f4ce8c15041cd213de4b6ac9f76a1"
      ],
      "author": {
        "name": "Roman Hoog Antink",
        "email": "rha@open.ch",
        "time": "Mon Jun 27 17:24:21 2011 +0200"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Tue Jun 28 15:05:35 2011 -0400"
      },
      "message": "fix typo\n"
    },
    {
      "commit": "fe0a1a45c31f4ce8c15041cd213de4b6ac9f76a1",
      "tree": "f9780d7dd0d0529fe0dd3d6b814e2b1349f0f741",
      "parents": [
        "d42306d98fa327eb0ea6094cc6d6ae9202a07475"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Tue Jun 28 15:05:05 2011 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Tue Jun 28 15:05:05 2011 -0400"
      },
      "message": "Omit --opaque-lsa from build (now default).\n"
    },
    {
      "commit": "d42306d98fa327eb0ea6094cc6d6ae9202a07475",
      "tree": "00b8b426615925a6f3b17592cfe8e8032463aafc",
      "parents": [
        "8dd1a8daae0b15065d54c46f82d44d21aa7a2320"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Fri Apr 22 19:27:54 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Apr 22 19:27:54 2011 +0400"
      },
      "message": "ospf6d: copy \"mtu-ignore\" option from ospfd\n\n\"mtu-ignore\" is an option ospfd used to mimic from the vendor\u0027s\nimplementation, now ospf6d will also implement it.\n\n* ospf6_interface.h: extend ospf6_interface structure by one flag\n* ospf6_interface.c: (ipv6_ospf6_mtu_ignore, no_ipv6_ospf6_mtu_ignore):\n  new declarations; (ospf6_interface_create): show initial value for\n  consistency; (ospf6_interface_show): print flag status\n* ospf6_message.c: (ospf6_dbdesc_recv): consider interface-specific flag\n  when checking MTU\n"
    },
    {
      "commit": "8dd1a8daae0b15065d54c46f82d44d21aa7a2320",
      "tree": "b14e8ed07f1a6ee97de84262bb85cd0a50f9c250",
      "parents": [
        "fdbc8e77c88f751924299d0bc752371d5cc31116"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Apr 11 16:33:20 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Apr 13 15:13:33 2011 +0100"
      },
      "message": "zebra: trivial warning fix\n\n* zebra_routemap.c: (route_set_src) get rid of the dummy family variable.\n"
    },
    {
      "commit": "fdbc8e77c88f751924299d0bc752371d5cc31116",
      "tree": "8f8a5b59c222552b14f3fb79efeb52ff83d1c8b1",
      "parents": [
        "072990e22e66ed9a15261b70658dc4a8801975b5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Apr 11 16:31:43 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Apr 13 15:13:33 2011 +0100"
      },
      "message": "bgpd: trivial format / warning fixes\n\n* bgp_aspath.c: (assegments_parse) just bail early if length doesn\u0027t match\n  and fix the formatting.\n* bgp_network.c: add include needed for set_nonblocking\n* bgp_packet.c: formatting\n"
    },
    {
      "commit": "072990e22e66ed9a15261b70658dc4a8801975b5",
      "tree": "6fd4e1dcfb4d076a5c14ab148da71679b06a6322",
      "parents": [
        "8f6f78a761fc66f9668b68810a1bac032227b2d1"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Apr 11 16:28:16 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Apr 13 15:13:33 2011 +0100"
      },
      "message": "ospf: Fix OSPF API and ospf-te LSA refreshers to match recent API change\n\n* ospf_apiserver.{c,h}: (ospf_apiserver_lsa_refresher) refreshers must now\n  return the refreshed LSA.\n* ospf_te.{c,h}: (ospf_mpls_te_lsa_refresh) ditto\n* ospf_api.c: trivial compiler warning fix\n"
    },
    {
      "commit": "8f6f78a761fc66f9668b68810a1bac032227b2d1",
      "tree": "cbf84ef77631ac75e4f34d9b037663ced9ba5ef6",
      "parents": [
        "57c4f4f45b7a3c327f274272afe43893e10008e1",
        "597de5a01a59759db05e00b0a1d4e0b158cf2c9e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Apr 04 11:18:39 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Apr 04 11:18:39 2011 +0100"
      },
      "message": "Fix authorship of previous ospf6d commit\n"
    },
    {
      "commit": "57c4f4f45b7a3c327f274272afe43893e10008e1",
      "tree": "cbf84ef77631ac75e4f34d9b037663ced9ba5ef6",
      "parents": [
        "604a9b43dd68a087ca5a4ac2cae19eb17591ba5f"
      ],
      "author": {
        "name": "Ingo Flaschberger",
        "email": "if@xip.at",
        "time": "Mon Apr 04 11:17:45 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Apr 04 11:17:45 2011 +0100"
      },
      "message": "ospf6d: fix crash if zebra_interface_state_read can\u0027t find interface\n\n* ospf6_zebra.c: (ospf6_zebra_if_state_update) zebra_interface_state_read\n  may return NULL, if it can\u0027t find an interface, deal with it.\n"
    },
    {
      "commit": "597de5a01a59759db05e00b0a1d4e0b158cf2c9e",
      "tree": "cbf84ef77631ac75e4f34d9b037663ced9ba5ef6",
      "parents": [
        "604a9b43dd68a087ca5a4ac2cae19eb17591ba5f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Apr 04 10:39:15 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Apr 04 10:39:15 2011 +0100"
      },
      "message": "ospf6d: fix crash if zebra_interface_state_read can\u0027t find interface\n\n* ospf6_zebra.c: (ospf6_zebra_if_state_update) zebra_interface_state_read\n  may return NULL, if it can\u0027t find an interface, deal with it.\n"
    },
    {
      "commit": "604a9b43dd68a087ca5a4ac2cae19eb17591ba5f",
      "tree": "060a9bc1987cb04cc530c91923367ab5498dd914",
      "parents": [
        "4a2035fd71990848017237838fe11bc1aeb41641"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Mon Sep 13 11:48:11 2010 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Apr 01 15:58:39 2011 +0100"
      },
      "message": "bgpd: fix memory leak when deleting a community\n\n* bgp_routemap.c: (route_set_community_delete) When deleting a\n  community in a route-map the old community was being orphaned.  Like\n  the description of the same code in route_set_community, this is a\n  hack, not a true fix.\n"
    },
    {
      "commit": "4a2035fd71990848017237838fe11bc1aeb41641",
      "tree": "6cc2abfc5b6e3dd51e71a42cae122c9b935a2f4f",
      "parents": [
        "7015b8a24965ce144296a791be816dc9bbeb477a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Apr 01 15:58:27 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Apr 01 15:58:27 2011 +0100"
      },
      "message": "Revert \"bgpd: \"Intern\" communities in route maps\"\n\nThis reverts commit 2c9fd7e07283b8904ef20030c9dadb032e999b12.\n"
    },
    {
      "commit": "7015b8a24965ce144296a791be816dc9bbeb477a",
      "tree": "668c3aa1d8757a269fff2c6e9aeb9e15a84fde05",
      "parents": [
        "74bd8495d0fc3c24e5fba09164093bd6d997771e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 30 14:30:20 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 30 14:30:20 2011 +0100"
      },
      "message": "doc: Add dependency for quagga.pdf make target\n\n* doc/Makefile.am: pdf target needs to depend on all the input files.\n"
    },
    {
      "commit": "74bd8495d0fc3c24e5fba09164093bd6d997771e",
      "tree": "14ad3ebed3b524fe517d2805eb7a7f921a1f0d10",
      "parents": [
        "31d0f1b3c64903d56a47caebf887067d222c7cd6",
        "0d51c7ef830c3930bb0d7207d93f26bcb8cee455"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 29 14:25:56 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 29 14:25:56 2011 +0100"
      },
      "message": "Merge remote-tracking branch \u0027remotes/quagga/master\u0027\n"
    },
    {
      "commit": "31d0f1b3c64903d56a47caebf887067d222c7cd6",
      "tree": "7a7d90f0517bc2816fc0279f79b5d7a9ab195095",
      "parents": [
        "f5a4827db60545309d0ee378b85acac56cf7837a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 29 14:18:49 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 29 14:18:49 2011 +0100"
      },
      "message": "bgpd: Fix merge error in jhash commit\n\n* bgp_attr.c: (attrhash_key_make) 98e30f should have changed jhash2 to jhash.\n\n  These kinds of merge errors would be reduced and life would be easier if\n  people would submit fully-formed fixes that could be chucked directly into\n  git-am.\n"
    },
    {
      "commit": "f5a4827db60545309d0ee378b85acac56cf7837a",
      "tree": "a28de765a209f772d1b95b78a357ddf17318844a",
      "parents": [
        "d876bdf4a84f40ac3f9bec8d5040858b3725db3e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Mar 24 17:30:21 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 28 11:27:41 2011 +0100"
      },
      "message": "bgpd: refine the setting up of GTSM\n\n* bgpd.h: Add error code for setting GTSM on iBGP\n* bgpd.c: (peer_ttl_security_hops_set) use previous error code and signal\n  incompatibility of GTSM+iBGP to vty.\n  Consider the session state when setting GTSM, and reset Open/Active peers\n  to let them pick up new TTL from start.\n"
    },
    {
      "commit": "0d51c7ef830c3930bb0d7207d93f26bcb8cee455",
      "tree": "5e0f8395940b03349c07bcab44b4e6d91d35c22b",
      "parents": [
        "d876bdf4a84f40ac3f9bec8d5040858b3725db3e"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Thu Mar 24 10:19:43 2011 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Thu Mar 24 10:19:43 2011 -0400"
      },
      "message": "build: treat opaque-lsa default correctly for ospfapi\n\nIn deciding whether to default ospfapi to on or off, use the same rule\nfor opaque-lsa as earlier: !\u003d no rather than \u003d yes, so that not having\nset it implies yes.\n"
    },
    {
      "commit": "d876bdf4a84f40ac3f9bec8d5040858b3725db3e",
      "tree": "9eec834951f91dcf626af620903113630ec179d3",
      "parents": [
        "89b6d1f8e2759cc38bc768067abe3a296d93f454"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:27 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 24 11:18:41 2011 +0000"
      },
      "message": "lib: Add support for IPv6 ttl security\n\n* sockunion.c: (sockopt_minttl) Add IPv6 support for min hop count.\n  The kernel support is Linux kernel 2.6.35 or later.\n"
    },
    {
      "commit": "89b6d1f8e2759cc38bc768067abe3a296d93f454",
      "tree": "ebf4d27f1d93558bba8d0bf6f1022182f7066404",
      "parents": [
        "fa411a212b55bba650d68fd0456686f3e47b7395"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Mar 24 10:51:59 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 24 10:51:59 2011 +0000"
      },
      "message": "bgpd: Cleanups \u0026 fixes for minttl / GTSM\n\n* bgp_vty.c: (peer_ebgp_multihop_{un,}set_vty) tail-call cleanup.\n  ({no_,}neighbor_ttl_security) ditto.\n* bgpd.c: (peer_ttl_security_hops_set) Peer group checks and TTL set only\n  need to be done on transition.\n* sockunion.c: (sockopt_minttl) remove always-on debug and improve readability.\n"
    },
    {
      "commit": "fa411a212b55bba650d68fd0456686f3e47b7395",
      "tree": "4d7ef846c2cbc154631a5901747b3384854d497c",
      "parents": [
        "db07ad7358cb5e26358326332629ffb658f5747a"
      ],
      "author": {
        "name": "Nick Hilliard",
        "email": "nick@inex.ie",
        "time": "Wed Mar 23 15:33:17 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 23 15:33:17 2011 +0000"
      },
      "message": "bgpd: RFC 5082 Generalized TTL Security Mechanism support\n\n* bgpd: Add support for RFC 5082 GTSM, which allows the TTL field to be used\n  to verify that incoming packets have been sent from neighbours no more\n  than X IP hops away. In other words, this allows packets that were sent from\n  further away (i.e. not by the neighbour with known distance, and so possibly\n  a miscreant) to be filtered out.\n* lib/sockunion.{c,h}: (sockopt_minttl) new function, to set a minimum TTL\n  using the IP_MINTTL socket opt.\n* bgpd.h: (BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK) define for command\n  error for minttl.\n  (struct peer) add a config variable, to store the configured minttl.\n  (peer_ttl_security_hops_{set,unset}) configuration handlers\n* bgpd.c: (peer_group_get) init gtsm_hops\n  (peer_ebgp_multihop_{un,}set) check for conflicts with GTSM. Multihop and\n  GTSM can\u0027t both be active for a peer at the same time.\n  (peer_ttl_security_hops_set) set minttl, taking care to avoid conflicts with\n  ebgp_multihop.\n  (bgp_config_write_peer) write out minttl as \"neighbor .. ttl-security hops X\".\n* bgp_vty.c: (bgp_vty_return) message for\n  BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK\n  (peer_ebgp_multihop_{un,}set_vty)\n* bgp_network.c: (bgp_accept) set minttl on accepted sockets if appropriate.\n  (bgp_connect) ditto for outbound.\n"
    },
    {
      "commit": "db07ad7358cb5e26358326332629ffb658f5747a",
      "tree": "c8663d225fddb5ce7f6bfaef7b1cdc797932cca4",
      "parents": [
        "3bde17f1af635c9ca19df0b3516cb8ad0376e6d3",
        "fc95186c30884c96543aecfc56cfe5b08774525b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 23 10:38:45 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 23 10:38:45 2011 +0000"
      },
      "message": "Merge branch \u0027master\u0027 of ssh://code.quagga.net/var/git/quagga\n"
    },
    {
      "commit": "3bde17f1af635c9ca19df0b3516cb8ad0376e6d3",
      "tree": "a963755de10136b6d8670bee5d577a49c0f0f984",
      "parents": [
        "98e30f5db6dea65a5d6a176065cd0b60eb7bb001"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 23 10:30:30 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 23 10:30:30 2011 +0000"
      },
      "message": "bgpd: Fix compile failure if IPv6 build was disabled.\n\n* bgp_route.c: ({no_,}ipv6_bgp_network_ttl_cmd) depends on ipv6_bgp_network\n  which is HAVE_IPV6, so these should be too.\n  (bgp_route_init) and the installs should be similarly ifdefed\n"
    },
    {
      "commit": "fc95186c30884c96543aecfc56cfe5b08774525b",
      "tree": "370b07b428152c8979b081b1a9267755b6df42be",
      "parents": [
        "98e30f5db6dea65a5d6a176065cd0b60eb7bb001"
      ],
      "author": {
        "name": "Christian Hammers",
        "email": "ch@debian.org",
        "time": "Wed Mar 23 13:07:55 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Mar 23 13:07:55 2011 +0300"
      },
      "message": "lib: fix more format warnings (#637)\n\nThe following patch was also neccessary to compile.\n\n* command.c: (config_logmsg_cmd) use \"%s\" format spec\n* if.c: (connected_log) ditto\n"
    },
    {
      "commit": "98e30f5db6dea65a5d6a176065cd0b60eb7bb001",
      "tree": "3ce8f796dd5f6607a77f1971fd540fcbf2193e3c",
      "parents": [
        "d71ea65270408a45e4bec036671ec73b24b994b4"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Mar 22 16:14:57 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 22 16:18:44 2011 +0000"
      },
      "message": "bgpd: attribute jhash call should use a standard interface to in6_addr data\n\n* bgp_attr.c; (attrhash_key_make) s6_addr is only member of in6_addr\n  guaranteed to be available - s6_addr32 isn\u0027t. Fix to be more portable, and\n  thus allow compilation on BSD again.\n"
    },
    {
      "commit": "d71ea65270408a45e4bec036671ec73b24b994b4",
      "tree": "8690d8a3e447ececf09d7a760af66703b7268f4d",
      "parents": [
        "36de261b57eab7a7539fb6527a1f02f3898cbafd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 22 15:23:55 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 22 15:23:55 2011 +0000"
      },
      "message": "ospfd: Compile fix for opaque support\n\n* ospfd: Refresher logic cleanup broke OSPF opaque, which does its own thing\n  with regard to refresher logic and which also, in the protocol, requires\n  implementations to keep state of which OI an LSA is received on (rather\n  than providing information in the LSA to allow it to be looked up - as\n  other LSAs requiring such assocation were careful to do).\n* ospf_lsa.h: (struct ospf_interface) Add back the pointer to oi, but only\n  for type-9 now.\n* ospf_nsm.c: (ospf_db_summary_add) check the oi actually exists first -\n  doesn\u0027t obviate the need for opaque to ensure oi pointers get cleaned up\n  when ospf_interfaces disappear.\n* ospf_opaque.{c,h}: (ospf_opaque_functab,ospf_opaque_lsa_refresh) Refresher\n  LSA functions now need to return the LSA to the general refresh logic,\n  to indicate whether the LSA was refreshed.\n"
    },
    {
      "commit": "36de261b57eab7a7539fb6527a1f02f3898cbafd",
      "tree": "315031a251f0f080e4f48980605d0081fab174fa",
      "parents": [
        "eac5702d06ee574e9e155c4e60c251e525dc4149"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 22 10:18:05 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 22 12:09:11 2011 +0000"
      },
      "message": "build: change sense of opaque-{lsa,te} enable args to enable by default\n\n* configure.ac: (AC_ARG_ENABLE({ospf-te,opaque-lsa})) reverse the sense to\n  --disable\n  (enable_{opaque_lsa,ospf_te}) treat as enabled unless explicitly disabled.\n"
    },
    {
      "commit": "eac5702d06ee574e9e155c4e60c251e525dc4149",
      "tree": "0b2fc1b7ff7432d21df8e0346736f6bf2f25287a",
      "parents": [
        "58192df7746231fbc82e248b5ddfc7cab95ab1e7"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:25 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: enable TCP corking\n\n* bgp_packet.c: (bgp_write) On BGP write, use TCP_CORK to provide hints to\n  kernel about TCP buffering.  This will cause BGP packets to occur in\n  bigger chunks (full size MTU), improving performance and getting rid of\n  one of the problems reported in the UNH BGP conformance test.\n"
    },
    {
      "commit": "58192df7746231fbc82e248b5ddfc7cab95ab1e7",
      "tree": "15184e9fadcad65385fda94ae9f397bdc6e53b76",
      "parents": [
        "35398589cf1293956dfefb5096aa5284c72a696f"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:24 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "lib: add TCP_CORK wrapper\n\n* sockunion.{c,h}: (sockopt_cork) wrapper for TCP_CORK socket option for\n  those platforms that provide it.  For other platforms, it is just a nop.\n"
    },
    {
      "commit": "35398589cf1293956dfefb5096aa5284c72a696f",
      "tree": "a0d844e42273fd0ee217652a6fd33552661f8b6f",
      "parents": [
        "2c9fd7e07283b8904ef20030c9dadb032e999b12"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:23 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: leave peer socket in non-blocking mode (mostly)\n\n* bgpd: Rather than toggling socket in/out of non-block mode, just leave it\n  in nonblocking mode.\n\n  One exception is in bgp_notify which only happens just before close.\n"
    },
    {
      "commit": "2c9fd7e07283b8904ef20030c9dadb032e999b12",
      "tree": "e134706cdc5c91daf0002ef3e2d22d12b09cb758",
      "parents": [
        "95cbbd2ace2f88019a7a54e67b4b12aaeda177f7"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Sat Jul 24 12:44:07 2010 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: \"Intern\" communities in route maps\n\n* bgp_community.[ch]: (community_lookup) New helper function to look\n  up a community list in the hash table.\n\n* bgp_routemap.c: A new community structure was being allocated for\n  every BGP update which matched a route map which set a community.\n  This behavior led to rapid growth in the memory consumed by bgpd.\n  Adding the communities to the hash table addresses the memory\n  growth, but may introduce a problem in modifying or deleting the\n  \u0027set community\u0027 statement in the route map.\n"
    },
    {
      "commit": "95cbbd2ace2f88019a7a54e67b4b12aaeda177f7",
      "tree": "b3a43ef5d9da20802df0dba9c72814354eb84267",
      "parents": [
        "d8509631b47aba867c59eb463bb346d7ae5b91c7"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Fri Jul 23 14:43:04 2010 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: New show commands for improved view and address family support\n\nMany show commands do not have support for multiple views and do not\ntreat different address families uniformly.  The following changes add\na number of commands with support for views and rationalized treatment\nof IPv4 v IPv6 and unicast v multicast (such as in JUNOS, IOS XR and\nmore recent versions of IOS).\n\n* bgp_route.c: (bgp_show_community) Inserted a new second argument (the\n  name of the view) and the code to look up that name in the BGP structure.\n  The NULL argument in the call to bgp_show (indicating the default view)\n  was replaced by the specified view.  The existing calls to\n  bgp_show_community had a NULL second argument inserted to make clear\n  that they refer to the default view.\n\n  (top level) Added new functions via the DEFUN and/or ALIAS macros (and\n  the associated command table entries) to add the commands\n\n    show bgp ipv4 (unicast|multicast)\n    show bgp ipv4 (unicast|multicast) A.B.C.D\n    show bgp ipv4 (unicast|multicast) A.B.C.D/M\n    show bgp ipv6 (unicast|multicast)\n    show bgp ipv6 (unicast|multicast) X:X::X:X\n    show bgp ipv6 (unicast|multicast) X:X::X:X/M\n\n      These show either the full BGP table or the specified route or\n      prefix for the given address family.\n\n    show bgp view WORD (ipv4|ipv6) (unicast|multicast) community\n    show bgp view WORD (ipv4|ipv6) (unicast|multicast) community \\\n            (AA:NN|local-AS|no-advertise|no-export){1,4}\n\n      For the specified view and address family, these show entries\n      matching any community or the specified communit(y)(ies).\n\n    show bgp view WORD (ipv4|ipv6) (unicast|multicast) neighbors \\\n            (A.B.C.D|X:X::X:X) (advertised-routes|received-routes)\n\n      For the specified view and address family, show the routes\n      advertised to or received from the given BGP neighbor.\n\n    show bgp [view WORD] ipv4 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X)\n    show bgp [view WORD] ipv4 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X) A.B.C.D\n    show bgp [view WORD] ipv4 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X) A.B.C.D/M\n    show bgp [view WORD] ipv6 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X)\n    show bgp [view WORD] ipv6 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X) X:X::X:X\n    show bgp [view WORD] ipv6 (unicast|multicast) \\\n            rsclient (A.B.C.D|X:X::X:X) X:X::X:X/M\n\n      For the specifed (optional) view and address family, show either\n      the full BGP table or the specified route or prefix for the given\n      route server client peer.\n\n* bgp_vty.c: (top level) Added new functions via the DEFUN and/or ALIAS\n  macros (and the associated command table entries) to add the commands\n\n    show bgp [view WORD] (ipv4|ipv6) (unicast|multicast) summary\n    show bgp [view WORD] (ipv4|ipv6) (unicast|multicast) rsclient summary\n\n      For the specified (optional) view and address family, display\n      either the normal summary table for BGP peers, or the route server\n      client table showing the import and export policies.\n"
    },
    {
      "commit": "d8509631b47aba867c59eb463bb346d7ae5b91c7",
      "tree": "d30c6b0a92ba8f6a2dfcac6ab89bf8bf548c3ad5",
      "parents": [
        "c8f3fe3063cb9ff193b13011cfbda3e605395340"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 14:56:00 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 14:56:00 2011 +0000"
      },
      "message": "release: 0.99.18\n\n* configure.ac: Bump to 0.99.18\n"
    },
    {
      "commit": "b881c7074bb698aeb1b099175b325734fc6e44d2",
      "tree": "70b4816a083166bbf00c1f85f19a67df0c0a5948",
      "parents": [
        "c112af27ed8f158ecece0d73ce2016c166076c00"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 23 16:35:42 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "bgpd: Implement revised error handling for partial optional/trans. attributes\n\n* BGP error handling generally boils down to \"reset session\". This was fine\n  when all BGP speakers pretty much understood all BGP messages. However\n  the increasing deployment of new attribute types has shown this approach\n  to cause problems, in particular where a new attribute type is \"tunneled\"\n  over some speakers which do not understand it, and then arrives at a speaker\n  which does but considers it malformed (e.g. corruption along the way, or\n  because of early implementation bugs/interop issues).\n\n  To mitigate this drafts before the IDR (likely to be adopted) propose to\n  treat errors in partial (i.e.  not understood by neighbour), optional\n  transitive attributes, when received from eBGP peers, as withdrawing only\n  the NLRIs in the affected UPDATE, rather than causing the entire session\n  to be reset.  See:\n\n   http://tools.ietf.org/html/draft-scudder-idr-optional-transitive\n\n* bgp_aspath.c: (assegments_parse) Replace the \"NULL means valid, 0-length\n  OR an error\" return value with an error code - instead taking\n  pointer to result structure as arg.\n  (aspath_parse) adjust to suit previous change, but here NULL really\n  does mean error in the external interface.\n* bgp_attr.h (bgp_attr_parse) use an explictly typed and enumerated\n  value to indicate return result.\n  (bgp_attr_unintern_sub) cleans up just the members of an attr, but not the\n  attr itself, for benefit of those who use a stack-local attr.\n* bgp_attr.c: (bgp_attr_unintern_sub) split out from bgp_attr_unintern\n  (bgp_attr_unintern) as previous.\n  (bgp_attr_malformed) helper function to centralise decisions on how to\n  handle errors in attributes.\n  (bgp_attr_{aspathlimit,origin,etc..}) Use bgp_attr_malformed.\n  (bgp_attr_aspathlimit) Subcode for error specifc to this attr should be\n  BGP_NOTIFY_UPDATE_OPT_ATTR_ERR.\n  (bgp_attr_as4_path) be more rigorous about checks, ala bgp_attr_as_path.\n  (bgp_attr_parse) Adjust to deal with the additional error level that\n  bgp_attr_ parsers can raise, and also similarly return appropriate\n  error back up to (bgp_update_receive). Try to avoid leaking as4_path.\n* bgp_packet.c: (bgp_update_receive) Adjust to deal with BGP_ATTR_PARSE_WITHDRAW\n  error level from bgp_attr_parse, which should lead to a withdraw, by\n  making the attribute parameter in call to (bgp_nlri_parse) conditional\n  on the error, so the update case morphs also into a withdraw.\n  Use bgp_attr_unintern_sub from above, instead of doing this itself.\n  Fix error case returns which were not calling bgp_attr_unintern_sub\n  and probably leaking memory.\n* tests/aspath_test.c: Fix to work for null return with bad segments\n"
    },
    {
      "commit": "c8f3fe3063cb9ff193b13011cfbda3e605395340",
      "tree": "42713ac0369f0ef372c657ded091b00dbe6a019b",
      "parents": [
        "0c46638122f10019a12ae9668aec91691cf2e017"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Dec 05 20:28:02 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "bgpd: Remove AS Path limit/TTL functionality\n\n* draft-ietf-idr-as-pathlimit doesn\u0027t seem to have gone anywhere, and its\n  author does not think it will make progress in IDR. Remove all support\n  introduced for it, but leave stubs for the commands to avoid breaking\n  any configurations.\n\n  Basically reverts cecab5e9725792e60a5e4b473e238a14cd85815d.\n"
    },
    {
      "commit": "c112af27ed8f158ecece0d73ce2016c166076c00",
      "tree": "411cc6431c0ba658ca6428b5ee9bb627dea588a1",
      "parents": [
        "f6f434b2822c453f898552537180a812538bd19e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Nov 27 11:49:09 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "tools/multiple-bgpd.sh: set some community attributes to help test them\n"
    },
    {
      "commit": "f6f434b2822c453f898552537180a812538bd19e",
      "tree": "81f5de3c1eeb6679635e7363396c08b807b04ad9",
      "parents": [
        "50ef565e4e689ba653b9709be4d28a01f6cca885"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 23 21:28:03 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "bgpd: Try fix extcommunity resource allocation probs, particularly with \u0027set extcom..\u0027\n\n* Extended communities has some kind of resource allocation problem which\n  causes a double-free if the \u0027set extcommunity ...\u0027 command is used.\n  Try fix by properly interning extcommunities.\n\n  Also, more generally, make unintern functions take a double pointer\n  so they can NULL out callers references - a usefully defensive programming\n  pattern for functions which make refs invalid.\n\n  Sadly, this patch doesn\u0027t fix the problem entirely - crashes still\n  occur on session clear.\n\n* bgp_ecommunity.h: (ecommunity_{free,unintern}) take double pointer\n  args.\n* bgp_community.h: (community_unintern) ditto\n* bgp_attr.h: (bgp_attr_intern) ditto\n* bgp_aspath.h: (bgp_aspath.h) ditto\n* (general) update all callers of above\n* bgp_routemap.c: (route_set_ecommunity_{rt,soo}) intern the new extcom added\n  to the attr, and unintern any old one.\n  (route_set_ecommunity_{rt,soo}_compile) intern the extcom to be used\n  for the route-map set.\n  (route_set_ecommunity_*_free) unintern to match, instead of free\n  (route_set_ecommunity_soo) Do as _rt does and don\u0027t just leak\n  any pre-existing community, add to it (is additive right though?)\n"
    },
    {
      "commit": "50ef565e4e689ba653b9709be4d28a01f6cca885",
      "tree": "c9655b58de02931d9c314f9f3325a42f1079ef89",
      "parents": [
        "ab005298526f4b14126cae1a6461ad3d700af29c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Nov 27 23:14:02 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "tests: Extend aspath_test.c with cases for invalid segments \u0026 attributes\n\n* aspath_test.c: Add more test cases. In particular ones to cover the\n  last invalid-segment problem. Also add ability to specify aspath attribute\n  headers and test them somewhat.\n\n  NB: It\u0027s obvious this test has not been run for a year by anyone, despite\n  2 non-trivial commits to bgpd aspath code.\n"
    },
    {
      "commit": "ab005298526f4b14126cae1a6461ad3d700af29c",
      "tree": "8b27b97dc351ae1c89c943750e8ad53d4781de44",
      "parents": [
        "c8f3fe3063cb9ff193b13011cfbda3e605395340"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Nov 27 22:48:34 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "bgpd: Rollback some of the changes made for invalid AS_PATH segment fix\n\nSome of the changes made in commit cddb8112b80fa9867156c637d63e6e79eeac67bb\ndon\u0027t work particularly well for other changes that need to be made to\naddress BGP attribute error handling problems. In particular, returning\na pointer from complex attribute data parsing functions will not suffice\nto express the require range of return status conditions.\n\n* bgp_aspath.c: (assegments_parse) Rollback to a more minimal set of\n  changes to fix the original problem.\n  (aspath_parse) Slightly needless pushing around of code, and taking\n  2 parameters to say whether ot use 2 or 4 byte encoding seems unnecessary.\n* bgp_attr.c: (bgp_attr_as{,4}path) Rollback, in preparation for BGP\n  attribute error handling update.\n"
    },
    {
      "commit": "0c46638122f10019a12ae9668aec91691cf2e017",
      "tree": "1302073e844ff46061ebb938bcd218ed9fbb96bf",
      "parents": [
        "8f228de7b3f9d6f641c75b27ac7ac6e5862cf804"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Dec 05 17:17:26 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:50:56 2011 +0000"
      },
      "message": "bgpd/security: CVE-2010-1674 Fix crash due to extended-community parser error\n\n* bgp_attr.c: (bgp_attr_ext_communities) Certain extended-community attrs\n  can leave attr-\u003eflag indicating ext-community is present, even though no\n  extended-community object has been attached to the attr structure.  Thus a\n  null-pointer dereference can occur later.\n  (bgp_attr_community) No bug fixed here, but tidy up flow so it has same\n  form as previous.\n\n  Problem and fix thanks to anonymous reporter.\n"
    },
    {
      "commit": "8f228de7b3f9d6f641c75b27ac7ac6e5862cf804",
      "tree": "16af34ad6f3f792c1175ae4cc92bab31cdcd5dcf",
      "parents": [
        "e7a6d80d4fe70a546a33ffe063f182252237ccd8"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:02:11 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Extend the \"[no] debug ospf6 route\" vty commands\n\n* ospf6_route.c ([no_]debug_ospf6_route) Include memory as a debug\n  option.  This allows ospf6 route memory debugging to be enabled or\n  disabled interactively or from a config file.\n"
    },
    {
      "commit": "e7a6d80d4fe70a546a33ffe063f182252237ccd8",
      "tree": "d0315314a3772846fef416f027ec42b445fb0ce9",
      "parents": [
        "ae2254aa7f2eb7436734f497658f1f26f4bf37c7"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:03:02 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Route locking (memory) cleanup\n\n* ospf6_route.c: (ospf6_route_best_next) Allows unlock route, even\n  when there\u0027s no next route.  This is consistent with how\n  ospf6_route_next() behaves.\n\n* ospf6_intra.c: (ospf6_intra_prefix_lsa_remove) Make sure the last\n  route considered is always unlocked.  This is needed when the for\n  loop terminates because ospf6_route_is_prefix() returns zero.\n"
    },
    {
      "commit": "ae2254aa7f2eb7436734f497658f1f26f4bf37c7",
      "tree": "8734f0e2aa855b90d9ec5cb961cd9990b5574905",
      "parents": [
        "fd795eb89cc421097f6580016ea9fbd3585d07bb"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:01:41 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Have ospf6d cleanup when it terminates normally\n\nA clean exit makes it easier to use memory debuggers.\n\n* ospf6_asbr.c: (ospf6_asbr_terminate) Add a function to do route map\n  cleanup.\n* ospf6_lsa.c: (ospf6_lsa_terminate) Add a function to cleanup the lsa\n  handler vector.\n* ospf6_main.c: (ospf6_exit) Add an function that causes ospf6d to\n  gracefully exit.\n* ospf6_message.c: (ospf6_message_terminate) Add a function that frees\n  the send and receive buffers.\n* ospf6_top.c: (ospf6_delete) Enable the ospf6_delete() function.\n  Disable ospf6 before freeing everything.\n"
    },
    {
      "commit": "fd795eb89cc421097f6580016ea9fbd3585d07bb",
      "tree": "a8d49db03924483ad0662294f2a8f44f4f5a6d66",
      "parents": [
        "1d19234e79c77a7d55194b513f2a77c6a691bc2c"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:03:23 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Remove obsolete code\n\n* ospf6_area.c: (ospf6_area_delete) Get rid of unused code that refers\n    to a nonexistent function and structure member.\n"
    },
    {
      "commit": "1d19234e79c77a7d55194b513f2a77c6a691bc2c",
      "tree": "4daf54c79e1cc3c3c6fa3ca66cfccb68770b3dd1",
      "parents": [
        "7e69d993673597334b1e1b3d1072a4c064f293d5"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:02:38 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:31:16 2011 +0000"
      },
      "message": "ospf6d: Fix memory allocation issues in SPF\n\n* ospf6_area.c: Call ospf6_spf_table_finish() before deleting the spf\n    table.  This ensures that the associated ospf6_vertex structures\n    are also freed.\n* ospf6_spf.c: Only allocate a priority queue when a spf calculation\n    is actually performed.  Also defer calling ospf6_spf_table_finish().\n"
    },
    {
      "commit": "7e69d993673597334b1e1b3d1072a4c064f293d5",
      "tree": "cf0362e38edca6f487aa638cc67c3c994a4cfcf1",
      "parents": [
        "4bd045d5dd28653af899c01d6f0c413d74677114"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:01:17 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:30:54 2011 +0000"
      },
      "message": "lib: zlog should clean up its memory\n\n* log.c: (closezlog) Also free the dynamically allocated filename when\n    a log is closed.\n"
    },
    {
      "commit": "4bd045d5dd28653af899c01d6f0c413d74677114",
      "tree": "f1e633f50e4dc19b4b0cda9dc6e6feb46e3bab46",
      "parents": [
        "c8e7b8959051bf525183bdbff605e54b4b532e2c"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:00:54 2010 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:30:54 2011 +0000"
      },
      "message": "lib: Add a function to delete all interfaces\n\nif.c: (if_terminate) This adds a cleanup function that can be called\n    when a daemon exits, similar to vty_terminate().\n"
    },
    {
      "commit": "c8e7b8959051bf525183bdbff605e54b4b532e2c",
      "tree": "af9af45c64164f7e7ee9aec5575837624e23df65",
      "parents": [
        "6392aa83c4f895ebbd23817c68d9b0da0de2e0f8"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Aug 27 14:12:54 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:30:54 2011 +0000"
      },
      "message": "bgpd: use Jenkins hash for BGP transit, cluster and attr hashes\n\n* bgp_attr.c: I observed while doing some debugging that even for simple\n  tests there was a lot of hash collisions for BGP attributes.  Switch to\n  using Jhash rather than additive hashing.  Probably overkill, but the\n  function is fast and available.\n\n  ({attrhash,cluster,transit}_hask_key_make) convert to Jenkins hash,\n  instead of additive hash.\n"
    },
    {
      "commit": "6392aa83c4f895ebbd23817c68d9b0da0de2e0f8",
      "tree": "535c89a194ec7fd3b9f4a6e33ceab10579e62329",
      "parents": [
        "25ff1e88bb5f1b0a16a364d7206db3ebdc5ecf52"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Aug 27 14:11:14 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:30:54 2011 +0000"
      },
      "message": "lib: Better hashing of string values using Bernstein hash\n\n* hash.{h,c}: (string_hash_make) Hash optimised for strings, current\n  implementation using Bernstein hash, which offers a good compromise\n  between distribution and performance.\n* distribute.c: (distribute_hash_make) use previous instead of additive\n  string hash.\n* if_rmap.c: (if_rmap_hash_make) ditto\n"
    },
    {
      "commit": "25ff1e88bb5f1b0a16a364d7206db3ebdc5ecf52",
      "tree": "cdb0c95588899c39ad676ef167c87b5c2a4d3a51",
      "parents": [
        "c099baf6f0a6509d70fb62a8d6341432abb50d91"
      ],
      "author": {
        "name": "Barry Friedman",
        "email": "barryf@google.com",
        "time": "Thu Feb 03 14:02:53 2011 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: Remove extra lock on interior table node\n\nIf the radix tree creates an extra interior node in bgp_node_get(),\nit locks the interior node even though this node is not returned to\nthe caller, so it may never be unlocked. The lock prevents this node\nfrom being deleted.\n\n* bgpd/bgp_table.c: (bgp_node_get) Remove lock on interior node which\n  prevents proper node deletion\n"
    },
    {
      "commit": "c099baf6f0a6509d70fb62a8d6341432abb50d91",
      "tree": "2fb2449dbf00789ca69cbd6a9dd9bb3f65d5bc1f",
      "parents": [
        "7badc26301c8063dc2c6f171c11f9af4f3d0df20"
      ],
      "author": {
        "name": "Wataru Tanitsu",
        "email": "wataru@ate-mahoroba.jp",
        "time": "Fri Sep 10 09:47:56 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: Fix display of unsigned attributes\n\n* bgp_route.c: (route_vty_out*) The local prefix, metric and weight values\n  are all stored as uint32_t.  Change the format to %u so that large values\n  are not displayed as negative integers.\n"
    },
    {
      "commit": "7badc26301c8063dc2c6f171c11f9af4f3d0df20",
      "tree": "32ccf03522bacb163529e00c10df4798e5365808",
      "parents": [
        "368473f6120ff295253bcc0d774c6bd75d8cf98b"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:31 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: fix use of free memory by update_rsclient\n\n* bgp_route.c: (bgp_static_update_rsclient) BGP sometimes crashes when\n  removing route server client because of use after free.\n\n  The code to update rsclient created a local static copy of bgp attributes\n  but neglected to handle the extra information pointer.  The extra\n  information was getting freed by bgp_attr_unintern() and reused later when\n  the copy was passed to bgp_attr_intern().\n\n  The fix is to use the attr_dup function to create a copy of the extra\n  information, then clean it up.\n"
    },
    {
      "commit": "368473f6120ff295253bcc0d774c6bd75d8cf98b",
      "tree": "2c8663378a82c107a6feb2955a10e61e06f5b869",
      "parents": [
        "f6269b4f7a2faddc44d03ff0a0e4d141562c67ee"
      ],
      "author": {
        "name": "Robert Bays",
        "email": "rbays@vyatta.com",
        "time": "Thu Aug 05 10:26:29 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: unlock node on aggregate error\n\n* bgp_route.c: (bgp_aggregate_set) make sure to unlock BGP node if failure\n"
    },
    {
      "commit": "f6269b4f7a2faddc44d03ff0a0e4d141562c67ee",
      "tree": "6a1b638f032f7bb49888b8582451b2420ae4da9f",
      "parents": [
        "fac9c6b63aa74b34a22c89f005f7241d65a1765a"
      ],
      "author": {
        "name": "Robert Bays",
        "email": "rbays@vyatta.com",
        "time": "Thu Aug 05 10:26:28 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: fix errors in aggregate address command\n\n* bgpd: (bgp_aggregate_{set,unset,delete}) This fixes locking and other\n  issues with aggregate set/unset command\n"
    },
    {
      "commit": "fac9c6b63aa74b34a22c89f005f7241d65a1765a",
      "tree": "5ae640ab0541712f8c794ad394558d2974d8e5cf",
      "parents": [
        "6c88b44dcb26b60bb1f93e5c387aa102019ed849"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:30 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: use XCALLOC to allocate bgpd damp array\n\n* bgpd: (bgp_damp_parameter_set) The BGP reuse_index is not initialized\n  properly.  This would cause sporadic crash when disabling dampening.  Use\n  XCALLOC correctly and the right size array is initialized and no memset is\n  needed.\n"
    },
    {
      "commit": "6c88b44dcb26b60bb1f93e5c387aa102019ed849",
      "tree": "772aacb2702dd635ca271ceca966986e38ecb3be",
      "parents": [
        "cca85d27a59c31e1b20e4c4adc7d9bb57606e584"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jul 27 16:28:55 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: fix bgp_node locking issues\n\n* bgpd: Connected table locks were being locked but not unlocked, such that\n  eventually a lock would exceed 2^31 and become negative, thus triggering\n  an assert later on.\n* bgp_main.c: (bgp_exit) delete connected elements along with ifp\u0027s.\n* bgp_nexthop.c: (bgp_nexthop_lookup{,_ipv6}) add missing unlocks\n  (bgp_multiaccess_check_v4) ditto\n  (bgp_connected_{add,delete}) Use a distinct memtype for bgp_connected_ref.\n  (bgp_scan_finish) reset the nexthop cache to clean it up when bgpd exits\n* bgp_route.c: fix missing bgp_node unlocks\n* lib/memtype.c: (memory_list_bgp) add MTYPE_BGP_CONN\n* testing: has been tested for almost 2 months now.\n"
    },
    {
      "commit": "cca85d27a59c31e1b20e4c4adc7d9bb57606e584",
      "tree": "2330a624f08c04a4125dc3153c97d93361c2da85",
      "parents": [
        "d1de1c25962b5470f3825bc82d15e4dd29e1f842"
      ],
      "author": {
        "name": "Chris Hall",
        "email": "chris.hall.list.highwayman.com",
        "time": "Fri Jul 23 11:27:11 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 11:09:13 2011 +0000"
      },
      "message": "lib: Fix accounting of memory\n\n* lib/memory.c: (zrealloc) If is called with NULL pointer then it should\n  increment allocations because it behaves the same as zmalloc.\n\n  (zfree) is called with NULL pointer, it does nothing therefore allocation\n  count should not change.\n"
    },
    {
      "commit": "d1de1c25962b5470f3825bc82d15e4dd29e1f842",
      "tree": "9e9b3c6ed51a0fdc78e0eb8900fad8f7e7598b98",
      "parents": [
        "4dd87df5af8a59174362e44f83df11f12457c8b4",
        "e6844aa5d23cf56dd1f31afc96e8145ab188953f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 20 22:08:02 2011 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 20 22:09:15 2011 +0000"
      },
      "message": "Merge paul/ospfd/201012-review ospfd and lib/ fixes and performance improvements\n"
    },
    {
      "commit": "e6844aa5d23cf56dd1f31afc96e8145ab188953f",
      "tree": "38d3e2be40a99f26e926a2733ac2ea70b466d236",
      "parents": [
        "30b0017696dfe300b6ea630a6b6c91ea440d7828"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Mar 18 20:20:53 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Mar 18 20:20:53 2011 +0300"
      },
      "message": "doc: fix \"ipv6 address\" interface command syntax (#608)\n"
    },
    {
      "commit": "30b0017696dfe300b6ea630a6b6c91ea440d7828",
      "tree": "0438c379abb3c2a779e82de2cbcb20ebb59d31ce",
      "parents": [
        "b016e9def4255a7406f5633c6edb820e13c9088e"
      ],
      "author": {
        "name": "John Kemp",
        "email": "kemp@network-services.uoregon.edu",
        "time": "Fri Mar 18 17:52:18 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Mar 18 17:52:18 2011 +0300"
      },
      "message": "bgpd: improve \"monotonic\" uptime correction\n\nOlder versions of Quagga/Zebra would output a value in MRT table\ndump files for \"uptime\" aka \"ORIGINATED\" that was a WALL clock\nvalue.  Given that uptime is now internally a bgp_clock MONOTONIC\nvalue, the output in the MRT files is showing up as monotonic.\n\nNote: time of MRT dump is still recorded correctly as a\ntime() based value, so we haven\u0027t lost that value.\n\nProposal is to correct the uptime output on the vty and in the\nMRT files to again display something more akin to WALL time.\n\n* bgp_dump.c: (bgp_dump_routes_func) add conditional correction\n* bgp_route.c: (route_vty_out_detail) make correction conditional, move\n  variable declaration to beginning of the function\n"
    },
    {
      "commit": "b016e9def4255a7406f5633c6edb820e13c9088e",
      "tree": "195c03ca0e79b7e4a33cb55b62713580b775ec55",
      "parents": [
        "0fa0335316ce14a79ea4bbb0c40e1322c9941dd3"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Sun Mar 13 01:14:08 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Mar 13 01:14:08 2011 +0300"
      },
      "message": "ripngd: copy debug statements fix from ripd\n\nDoesn\u0027t ripng needs same fix as ripd.\n"
    },
    {
      "commit": "0fa0335316ce14a79ea4bbb0c40e1322c9941dd3",
      "tree": "10c01d97fd76b037fc8f8d321eb70d62ff6e29b5",
      "parents": [
        "6e22b9017e1ae2ce61c383b1b2b63973207704ac"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Feb 24 13:52:14 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Feb 24 13:52:14 2011 +0300"
      },
      "message": "ripd: resolve debug statements issue (bug 442)\n\n...A nasty bug, if you forgot to disable debugging, stored the config\nand reboot your machine - if you really depend on ripd, then the machine\nwill not fully come back on the network, because ripd fails.\n"
    },
    {
      "commit": "6e22b9017e1ae2ce61c383b1b2b63973207704ac",
      "tree": "9a0288714317c886de2588d2c3a03b10b1cca8a1",
      "parents": [
        "c7aa8abd8788c3607ad0131f02e892cf92221e40"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Mon Jan 17 10:58:52 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 17 10:58:52 2011 +0300"
      },
      "message": "bgpd: VTY string fixes for debug commands\n\n* bgpd/bgp_debug.c: fix VTY strings for BGP debug commands to match\n  correct syntax\n"
    },
    {
      "commit": "c7aa8abd8788c3607ad0131f02e892cf92221e40",
      "tree": "01495f12e5a9fa0cff3b1ddecb24bccb4975de35",
      "parents": [
        "403138e189c24f6867824c4eeb668d11564e1ca0"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Fri Jan 14 18:27:05 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 14 18:27:05 2011 +0300"
      },
      "message": "bgpd: fix handling of \"Unsupported Capability\"\n\n* bgp_packet.c: (bgp_notify_receive) justify the difference between\nBGP_NOTIFY_OPEN_UNSUP_PARAM and BGP_NOTIFY_OPEN_UNSUP_CAPBL cases, as\nit is explained in RFC5492, page 3, paragraph 1.\n\n\"Unsupported Capability\" error does not mean, that the peer doesn\u0027t\nsupport capabilities advertisement -- quite the opposite (if the peer\nwould not support capabilities advertisement, the code would be\n\"Unsupported Optional Parameter\"). Thus there is no reason to mark\nthe peer as one non-supporting capabilities advertisement.\n\nExample: suppose the peer is in fact IPv6-only, but we didn\u0027t configure\nanything address-family specific for it. Then, the peer would refuse\nthe session with \"Unsupported Capability\" code. If we internally set\nthe peer as non-supporting capabilities advertisement after that, we\nwill not be able to establish the session with it ever, even with a\nfixed configuration -- IPv6-only BGP session cannot be established\nwithout capabilities.\n\nIn practice an edge case would be seen as the same IPv6 peer working\nwith its \"neighbor\" block read from bgpd.conf, but not working, when\nslowly input in \"conf t\" mode.\n"
    },
    {
      "commit": "403138e189c24f6867824c4eeb668d11564e1ca0",
      "tree": "436c9c428ad21fe1718ad083c790c1bf7d077f52",
      "parents": [
        "b729294c8c5c6f2af8ddf6cfbea2374b6faabe9d"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Thu Jan 13 18:25:40 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 13 18:25:40 2011 +0300"
      },
      "message": "ospf6d: fix crash in SPF calculation\n\n* ospf6_spf.c: Don\u0027t replace a node with another node with a lower\n  number of hops, instead get them from the queue in the correct\n  order. (Actually, the replacement crashed the ospf6d daemon\n  rather than worked.)\n"
    },
    {
      "commit": "4dd87df5af8a59174362e44f83df11f12457c8b4",
      "tree": "bec3ba26fcf730d6348567ddd530e74846af824b",
      "parents": [
        "dfbd5176ea863e378999c03314dc42adfdd4e424"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Apr 15 08:11:51 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:19 2010 +0000"
      },
      "message": "ospfd: Remove oi field from LSA, have network_lsa_refresh look up when needed\n\n* ospf_lsa.h: (struct ospf_lsa) remove oi pointer\n* ospf_lsa.c: (ospf_network_lsa_refresh) instead of keeping a pointer, just\n  lookup the oi when it\u0027s needed. This decouples network LSA from oi lifetime\n  and avoids having to invalidate pointers in LSAs when an oi changes,\n  simplifying the code.\n"
    },
    {
      "commit": "dfbd5176ea863e378999c03314dc42adfdd4e424",
      "tree": "f18faa60d794ef5feb628f2e089e419bb3c5dec2",
      "parents": [
        "02d942c9d4afabf04bd781f0e1e5e8aa36945df2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Apr 14 10:32:12 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:19 2010 +0000"
      },
      "message": "ospfd: potential fix for router-id change assert on refresh cleanup patch\n\n* ospf_lsa.c: (various) unregister LSAs from refresher before flushing.\n"
    },
    {
      "commit": "02d942c9d4afabf04bd781f0e1e5e8aa36945df2",
      "tree": "1874fc70a20b6b0407e808c926c362aa03415662",
      "parents": [
        "c363d3861b5384a31465a72ddc3b0f6ff007a95a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 24 23:36:20 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:19 2010 +0000"
      },
      "message": "ospfd: Fix maxage/flush to not try flood twice, remember maxages for longer\n\n2006-05-30 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Fix confusion around MaxAge-ing and problem with\n\t  high-latency networks. Analysis and suggested fixes by\n\t  Phillip Spagnolo, in [quagga-dev 4132], on which this commit\n\t  expands slightly.\n\t* ospf_flood.{c,h}: (ospf_lsa_flush) new function.\n\t  Scope-general form of existing flush functions, essentially\n\t  the dormant ospf_maxage_flood() but without the ambiguity of\n\t  whether it is responsible for flooding.\n\t* ospf_lsa.c: (ospf_lsa_maxage) Role minimised to simply setup\n\t  LSA on the Maxage list and schedule removal - no more.\n\t  ospf_lsa_flush* being the primary way to kick-off flushes\n\t  of LSAs.\n\t  Don\u0027t hardcode the remover-timer value, which was too\n\t  short for very high-latency networks.\n\t  (ospf_maxage_lsa_remover) Just do what needs to be done to\n\t  remove maxage LSAs from the maxage list, remove the call\n\t  to ospf_flood_through().\n\t  Don\u0027t hardcode remove-timer value.\n\t  (ospf_lsa_{install,flush_schedule}) ospf_lsa_flush is the correct\n\t  entrypoint to flushing maxaged LSAs.\n\t  (lsa_header_set) Use a define for the initial age, useful for\n\t  testing.\n\t* ospf_opaque.c: (ospf_opaque_lsa_refresh) ditto.\n\t  (ospf_opaque_lsa_flush_schedule) ditto.\n\t* ospfd.h: ({struct ospf,ospf_new}) Add maxage_delay parameter,\n\t  interval to wait before running the maxage_remover. Supply a\n\t  suitable default.\n\t  Add a define for OSPF_LSA_INITIAL_AGE, see lsa_header_set().\n"
    },
    {
      "commit": "c363d3861b5384a31465a72ddc3b0f6ff007a95a",
      "tree": "3fcbfc071dc2a376979ca6a80d06599a5b574047",
      "parents": [
        "7eb5b47e54169ac0da40ed1a6760db5d5f915a4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 24 22:42:13 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:19 2010 +0000"
      },
      "message": "ospfd: Unify router and network LSA refresh logic with general refresher\n\n* (general) Get rid of the router and network LSA specific refresh timers\n  and make the general refresher do this instead. Get rid of the twiddling\n  of timers for router/network LSA that was spread across the code.\n\n  This lays the foundations for future, general LSA refresh improvements,\n  such as making sequence rollover work, and having generic LSA delays.\n\n* ospfd.h: (struct ospf) Bye bye to the router-lsa update timer thread\n  pointer.\n  (struct ospf_area) and to the router-lsa refresh timer.\n* ospf_interface.h: Remove the network_lsa_self timer thread pointer\n* ospf_lsa.h: (struct ospf_lsa) oi field should always be there, for benefit\n  of type-2/network LSA processing.\n  (ospf_{router,network}_lsa_{update_timer,timer_add}) no timers for these\n  more\n  (ospf_{router,network}_lsa_update) more generic functions to indicate that some\n  router/network LSAs need updating\n  (ospf_router_lsa_update_area) update router lsa in a particular area alone.\n  (ospf_{summary,summary_asbr,network}_lsa_refresh) replaced by the general\n  ospf_lsa_refresh function.\n  (ospf_lsa_refresh) general LSA refresh function\n"
    },
    {
      "commit": "7eb5b47e54169ac0da40ed1a6760db5d5f915a4d",
      "tree": "8d70f87bea20b07f2bbc753a3661c9be9058e1ef",
      "parents": [
        "aa276fd783f5cdbeefe22bf54109fe523a465e07"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 13 16:13:13 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:13:14 2010 +0000"
      },
      "message": "ospfd: Remember network LSA sequence numbers across up/downs of an interface\n\n* ospf_interface.h: (struct ospf_if_params) add field for saved network LSA\n  seqnum\n* ospf_interfa.c: (ospf_new_if_params) init network_lsa_seqnum field to\n  initial seqnum - doesnt matter though.\n* ospf_lsa.c: (ospf_network_lsa_new) check for any saved sequence number,\n  and use if it exists.  Save the result back. This should help avoid needless\n  round of LSUpdate/LSRequests when a neighbour has to tell the originator\n  \"uhm, i have something newer than that already\".\n* ospf_vty.c: (show_ip_ospf_interface_sub) Show the saved network LSA seqnum\n"
    },
    {
      "commit": "aa276fd783f5cdbeefe22bf54109fe523a465e07",
      "tree": "7427b7bdfd25a9f07c72461d56c3981db9761227",
      "parents": [
        "57c5c6526df82970ca24293798d278862cf55106"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 08 17:11:15 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:19 2010 +0000"
      },
      "message": "ospfd: Prioritise hellos for sending by queueing to head of output buffer\n\n* It\u0027s possible for the packet output buffer to be filled up with a long\n  series of non-Hello packets in between Hellos packets, such that the\n  router\u0027s neighbours don\u0027t receive the Hello packet in time, even though\n  the hello-timer ran at about the right time. Fix this by prioritising\n  Hello packets, letting them skip the queue and go ahead of any packets\n  already on the queue.\n\n  This problem can occur when there are lots of LSAs and slow links.\n\n* ospf_packet.h: (ospf_hello_send_sub) not used outside of ospf_packet.c\n* ospf_packet.c: (ospf_fifo_push_head) add packet to head of fifo (so its\n  no longer really a fifo, but hey)\n  (ospf_packet_add_top) add packet to top of the packet output queue.\n  (ospf_hello_send_sub) Put Hello\u0027s at the top of the packet output queue.\n  make it take in_addr_t parameter, so that this\n  ospf_hello_send can re-use this code too.\n  (ospf_hello_send) consolidate code by using ospf_hello_send_sub\n  (ospf_poll_send,ospf_hello_reply_timer) adjust for ospf_hello_send_sub.\n"
    },
    {
      "commit": "57c5c6526df82970ca24293798d278862cf55106",
      "tree": "91847b2de0f333fa3a45691054f38c82f44f7609",
      "parents": [
        "94b6bfd28357dfa5a4f478b7393522816976c0b0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jan 07 06:12:53 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: Reset neighbour inactivity timer for any packet arrival\n\n* The hello protocol monitors connectivity in 2 different ways:\n\n  a) local -\u003e remote\n  b) remote -\u003e local\n\n  Connectivity is required in both directions (2-way) for adjacencies to\n  form.\n\n  The first requires a round-trip to detect, and is done by advertising\n  which other hosts a router knows about in its hello messages.  This allows\n  a host to detect which other routers are and are not receiving its\n  message.  If a remote neighbour delists the local router, then the local\n  router raises a \"1-Way Received\" event.\n\n  The latter is straight-forward, and is detected by setting a timer for the\n  neighbour. If another Hello packet is not received within this time then\n  the neighbour is dead, and a separate \"Inactive\" event is raised.\n\n  These are 2 different and relatively independent measures.\n\n  Knowing that we can optimise the 2nd, remote-\u003elocal measure and reset\n  the timer when /any/ packet arrives from that neighbour. For any packet\n  is as good as a Hello packet. This can help in marginal situations, where\n  the number of protocol messages that must be sent sometimes can exceed\n  the capacity of the network to transmit the messages within the configured\n  dead-time. I.e. an OSPF network with lots of LSAs, slow links and/or\n  slow hosts (e.g. O(10k) LSAs, O(100kbit) links, embedded CPUs, and O(10s)\n  dead-times).\n\n  This optimisation allows an OSPF network to run closer to this margin,\n  and/or allows networks to perhaps better cope with rare periods of\n  exceptional load, where otherwise they would not.\n\n  It\u0027s fully compatible with plain OSPF implementations and doesn\u0027t\n  prejudice dead-neighbour detection.\n\n* ospf_nsm.h: Rename HelloReceived event to PacketReceived.\n* ospf_nsm.c: (nsm_hello_received) -\u003e nsm_packet_received\n* ospf_packet.c: Schedule PacketReceived whenever a valid message is\n  received.\n"
    },
    {
      "commit": "94b6bfd28357dfa5a4f478b7393522816976c0b0",
      "tree": "8c94b1e1730a3db7cd0c5371495a944745d8aa20",
      "parents": [
        "e8f2226195e86f90f2409549ad8a8e5c8d64d23b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Jan 09 14:11:02 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: the maxage_lsa_remover should check whether it needs to yield the cpu\n"
    },
    {
      "commit": "e8f2226195e86f90f2409549ad8a8e5c8d64d23b",
      "tree": "e06409c762058421671fa7eacedeeccd364d871d",
      "parents": [
        "6634974d68b8cc78cdde1104636fe97d7e310845"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Apr 13 22:43:34 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: Fix various route_unlock discrepencies\n\n* ospf_ase.c: (ospf_ase_calculate_route) Fix compiler warning about eval\n  needing brackets.\n  (various) add defensive asserts.\n* ospf_lsdb.c: (ospf_lsdb_add) add missing node unlock if same lsa already\n  was indexed.\n  (ospf_lsdb_delete) check it\u0027s actually the same as specified lsa before\n  deleting\n  (ospf_lsdb_lookup_by_id_next) fix another corner case - no result \u003d\u003e\n  don\u0027t go on.\n"
    },
    {
      "commit": "6634974d68b8cc78cdde1104636fe97d7e310845",
      "tree": "ac049e9e0e61ba90ee3790e4162c561b32894e1b",
      "parents": [
        "8a81ee114a122966cb396d53dd8fcbda2eb619f5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Apr 13 22:33:54 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: fix lsa_refresh_walker unlock before use bug\n\n* ospf_lsa.c: (ospf_lsa_refresh_walker) fix an \"unlock before use\" bug\n  (various) add asserts for lsa refcounting.\n"
    },
    {
      "commit": "8a81ee114a122966cb396d53dd8fcbda2eb619f5",
      "tree": "1d797e811dd2dc0971ecb8b6585b47e6524f2275",
      "parents": [
        "2c9f8e36c4de4bb1412364b79c3a44881208266e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 24 21:34:54 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: interface code should leave  network_lsa_self alone\n\n* ospf_interface.c: (ospf_if_{new,cleanup}) don\u0027t touch the network_lsa_self,\n  ISM and NSM take care of cleaning it up if needs be + we want to keep\n  network_lsa_self around when possible for the the seqnum.\n\n  This shouldn\u0027t really make much difference though, particularly as we have\n  a separate sequence number memory mechanism.\n"
    },
    {
      "commit": "2c9f8e36c4de4bb1412364b79c3a44881208266e",
      "tree": "71b5273262a386644ced282b8b257b5201ffee7c",
      "parents": [
        "cfd670f3af25dfc34d5c06e30d21160e3dfb6421"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 11 16:22:12 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:18 2010 +0000"
      },
      "message": "ospfd: OSPF_MIN_LS_ARRIVAL compare should be \u003e\u003d to match ospf_flood\n\n* ospf_packet.c: (ospf_ls_upd) the corresponding test on the arrival side\n  in (ospf_flood) is \u003c, so this should be \u003e\u003d, not \u003e, purely for consistency.\n\n  There is no practical effect here though.\n"
    },
    {
      "commit": "cfd670f3af25dfc34d5c06e30d21160e3dfb6421",
      "tree": "6b2888d0ac50a60416a92a7226cf513b0537f14f",
      "parents": [
        "ec70497bc5eac732139c3d94987ecb6691557795"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Apr 15 11:39:05 2010 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 17:11:17 2010 +0000"
      },
      "message": "ospfd: ospf_if_free can leave dangling references on ISM events - cancel them\n\n* ospf_interface.c: (ospf_if_free) events with dangling pointers left\n  scheduled can be seriously bad for ospfd\u0027s health. Cancel the event.\n"
    }
  ],
  "next": "ec70497bc5eac732139c3d94987ecb6691557795"
}
