)]}'
{
  "log": [
    {
      "commit": "8f3607f84eb5d21d4732a51b39775b7edf8796c2",
      "tree": "3acdc79efb673d2797ac12abf28308815213f9fe",
      "parents": [
        "446d73b7ae544df3af68b4e85ddcd06c2d3589bf"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Jan 17 17:04:00 2012 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "babeld: add handling of \"-z\" cmdline arg\n"
    },
    {
      "commit": "446d73b7ae544df3af68b4e85ddcd06c2d3589bf",
      "tree": "9e09fbc19f68c90e7ab6c3ee43e1efbf7cf3214f",
      "parents": [
        "f8a246d6df0556fb897e1785d1c2ea81caf8956d"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Jan 17 17:00:20 2012 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "babeld: bring babel_usage() into focus\n"
    },
    {
      "commit": "f8a246d6df0556fb897e1785d1c2ea81caf8956d",
      "tree": "e78438d35439685d7427dd5bfbc404f5c32f4b5c",
      "parents": [
        "87c271c69330cfcea7955503eba3ed15a15cb634"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 11 18:18:56 2012 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "lib: update proto_redistnum() for Babel\n"
    },
    {
      "commit": "87c271c69330cfcea7955503eba3ed15a15cb634",
      "tree": "b336a3004fcdc45dea7ff336889984ca8f94e320",
      "parents": [
        "528eab1fd04434e0befe9a98191b11602e3cb2ff"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Jan 10 15:58:04 2012 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "babeld: address remaining -Wcast-qual warnings\n\n* net.c\n  * babel_send(): arguments are not treated as \"const\", justify\n    declaration\n* babel_main.c: declare constant pointers as such\n"
    },
    {
      "commit": "528eab1fd04434e0befe9a98191b11602e3cb2ff",
      "tree": "2d7db816953bda15297d9d500c3c878185f22ca3",
      "parents": [
        "c7c53fa88ccdbc2d48cf7327c9e4f33cdc517a8a"
      ],
      "author": {
        "name": "Matthieu Boutier",
        "email": "boutier@pps.jussieu.fr",
        "time": "Sun Jan 08 17:07:10 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "babeld: fix bug concerning pidfile.\n"
    },
    {
      "commit": "c7c53fa88ccdbc2d48cf7327c9e4f33cdc517a8a",
      "tree": "9bd7e691165412840555be6d10a7a37b69b00bc0",
      "parents": [
        "3dbda0ceebe369a1071600fe7d8d8ecf45f1027c"
      ],
      "author": {
        "name": "Matthieu Boutier",
        "email": "boutier@pps.jussieu.fr",
        "time": "Sun Jan 08 16:43:08 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "babeld: address some other compilation warnings.\n"
    },
    {
      "commit": "3dbda0ceebe369a1071600fe7d8d8ecf45f1027c",
      "tree": "1df830052d1a516bc4ec6b213b36b16d28c9868d",
      "parents": [
        "ef4de4d36c2dc10a68d41e518057d04b262ec867"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jan 08 16:52:36 2012 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "babeld: address some compilation warnings\n\nIncluding system headers is not necessary with zebra.h included and\nsometimes results in \"__ASSERT_FUNCTION redefined\" compilation warning.\n\n* babeld.c\n  * babel_distribute_update_interface(): make static\n* babel_interface.c\n  * interface_config_write(): unused \u0027babel_ifp\u0027\n  * don\u0027t include system headers\n* message.c\n  * send_request(): unused \u0027babel_ifp\u0027\n  * send_multihop_request(): idem\n  * don\u0027t include system headers\n* route.c: don\u0027t include system headers\n* xroute.c: idem\n* source.h: newline at EOF\n* message.h: idem\n"
    },
    {
      "commit": "ef4de4d36c2dc10a68d41e518057d04b262ec867",
      "tree": "fb194c240926977a85d3f313f65b3ab038fb8d1a",
      "parents": [
        "089082b5d51c41a4498edb6a3f495ade0d517e73"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jan 08 15:29:19 2012 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "babeld: address FreeBSD \"struct route\" issue\n\nFreeBSD system headers have their own \"struct route\", which made it\nimpossible to compile babeld. Switching babeld to \"struct babel_route\".\n"
    },
    {
      "commit": "089082b5d51c41a4498edb6a3f495ade0d517e73",
      "tree": "af876f1c7fcbd3077ffcce8c76e031c226b654cf",
      "parents": [
        "5734509c0545ebd95a5b8e3f22a911c1a39ffa1b"
      ],
      "author": {
        "name": "Matthieu Boutier",
        "email": "boutier@pps.jussieu.fr",
        "time": "Fri Jan 06 23:09:23 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:52 2012 +0100"
      },
      "message": "babeld: clean kernel_zebra (old functions, fields...).\n"
    },
    {
      "commit": "5734509c0545ebd95a5b8e3f22a911c1a39ffa1b",
      "tree": "2f35ad50d793080db1f858c2de2228cfd2946dfd",
      "parents": [
        "fe67e668881b8b8d71b1570575c913cd287fafcf"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Dec 25 17:52:09 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 17:06:51 2012 +0100"
      },
      "message": "babeld: Initial import, for Babel routing protocol.\n\n* Initial import of the Babel routing protocol, ported to Quagga.\n* LICENCE: Update the original LICENCE file to include all known potentially\n  applicable copyright claims.  Ask that any future contributors to babeld/\n  grant MIT/X11 licence to their work.\n* *.{c,h}: Add GPL headers, in according with the SFLC guidance on\n  dealing with potentially mixed GPL/other licensed work, at:\n\n  https://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html\n"
    },
    {
      "commit": "fe67e668881b8b8d71b1570575c913cd287fafcf",
      "tree": "ce48b0028e879d4e6f938bb9dd583ed9f679fa96",
      "parents": [
        "aee567450eaf32877d00f47c4cc5d05c5fb85a51"
      ],
      "author": {
        "name": "Renato Westphal",
        "email": "renatowestphal@gmail.com",
        "time": "Fri Mar 23 16:27:40 2012 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Fri Mar 23 20:51:28 2012 +0100"
      },
      "message": "lib: fix endianness bug in prefix.c\n\nWhile defining two \"maskbytes\" arrays for the respective endiannesses,\nthe code was unconditionally using one that only worked on little endian\nsystems.\n\nUse preprocessor macros to avoid the somewhat expensive\nhtonl/ntohl macros.\n\nFrom: Renato Westphal \u003crenatowestphal@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "aee567450eaf32877d00f47c4cc5d05c5fb85a51",
      "tree": "9fb0df5ce6fedc3e403f8b2b4d59ed0e556a1453",
      "parents": [
        "bd5651f0ec7aa94627a2a6868dd458f016750a35"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 28 15:15:29 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:05:45 2012 +0100"
      },
      "message": "ospfd: reduce ospf_verify_header()\n\nProtocol version checks fits ospf_packet_examin() better (like it is\nimplemented in ospf6d), and packet type check is already there.\n"
    },
    {
      "commit": "bd5651f0ec7aa94627a2a6868dd458f016750a35",
      "tree": "9f5dcd01bd90d1ea78cd841f00fea4bbdc3a6dee",
      "parents": [
        "ef1b78cbcd8ade0c5444f3ff9dd00a40e760ec92"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Feb 26 17:59:43 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:05:38 2012 +0100"
      },
      "message": "ospfd: bring ospf_check_auth() into focus\n\nThe old ospf_check_auth() function did two different jobs depending on\nAuType. For Null and Simple cases it actually authenticated the packet,\nbut for Cryptographic case it only checked declared packet size (not\ntaking the actual number of bytes on wire into account). The calling\nfunction, ospf_verify_header(), had its own set of MD5/checksum checks\ndispatched depending on AuType.\n\nThis commit makes the packet size check work against the real number of\nbytes and moves it to ospf_packet_examine(). All MD5/checksum\nverification is now performed in ospf_check_auth() function.\n\n* ospf_packet.c\n  * ospf_packet_examin(): check length with MD5 bytes in mind\n  * ospf_verify_header(): remove all AuType-specific code\n  * ospf_check_auth(): completely rewrite\n"
    },
    {
      "commit": "ef1b78cbcd8ade0c5444f3ff9dd00a40e760ec92",
      "tree": "ad1f4d0ac76be5cff0cea5c44ba23b76967746c2",
      "parents": [
        "b29adf9c3e69f298f748564a20abdf7274bbc549"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Feb 26 17:00:57 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:05:34 2012 +0100"
      },
      "message": "ospfd: introduce ospf_auth_type_str[]\n"
    },
    {
      "commit": "b29adf9c3e69f298f748564a20abdf7274bbc549",
      "tree": "1b1d18c542fa6cae9f4d7f7a6e559a23b0bdafc3",
      "parents": [
        "4e31de792ec5e48a97360b5b86196b4fa02996a3"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Feb 20 23:08:10 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:05:30 2012 +0100"
      },
      "message": "ospfd: fix packet length check for auth/LLS cases\n\nAn OSPFv2 packet with trailing data blocks (authentication and/or\nlink-local signaling) failed the recently implemented packet length\ncheck, because trailing data length isn\u0027t counted in the packet header\n\"length\" field. This commit fixes respective check conditions.\n\n* ospf_packet.c\n  * ospf_packet_examin(): use \"bytesdeclared\" instead of \"bytesonwire\"\n"
    },
    {
      "commit": "4e31de792ec5e48a97360b5b86196b4fa02996a3",
      "tree": "6312c43f628d69392676c85129f107e4ee53b802",
      "parents": [
        "2d8223c5472129eba89d630dc4f2688ebeae1dd8"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Feb 17 16:20:50 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:05:28 2012 +0100"
      },
      "message": "ospfd: introduce ospf_lsa_minlen[] (BZ#705)\n\nThis commit ports more packet checks to OSPFv2, in particular, LSA size\nverification and Router-LSA link blocks verification.\n\n* ospf_lsa.h: add LSA size macros\n* ospf_packet.h: add struct ospf_ls_update\n* ospf_packet.c\n  * ospf_lsa_minlen[]: a direct equivalent of ospf6_lsa_minlen[]\n  * ospf_router_lsa_links_examin(): new function, verifies trailing\n    part of a Router-LSA\n  * ospf_lsa_examin(): new function like ospf6_lsa_examin()\n  * ospf_lsaseq_examin(): new function like ospf6_lsaseq_examin()\n  * ospf_packet_examin(): add type-specific deeper level checks\n"
    },
    {
      "commit": "2d8223c5472129eba89d630dc4f2688ebeae1dd8",
      "tree": "482c71c9a6f149ab78938de2df7f3e534a9756a3",
      "parents": [
        "e52591481ed64e4cf9f26a76ad682ed7e6b451e7"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 30 20:32:39 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:05:22 2012 +0100"
      },
      "message": "ospfd: review ospf_check_md5_digest()\n\nRewrite some pointer arithmetics without the additional variables and\nmove byte order conversion inside the function.\n"
    },
    {
      "commit": "e52591481ed64e4cf9f26a76ad682ed7e6b451e7",
      "tree": "738a2ba31eb42b6d5d61fd61bad772a73c5cd82e",
      "parents": [
        "75c8eabbb5d3dc8aa21b61e8700ab939ce272f5c"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 30 16:07:18 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:05:19 2012 +0100"
      },
      "message": "ospfd: review ospf_check_auth()\n\n1. The only purpose of \"ibuf\" argument was to get stream size, which\nwas always equal to OSPF_MAX_PACKET_SIZE + 1, exactly as initialized\nin ospf_new().\n\n2. Fix the packet size check condition, which was incorrect for very\nlarge packets, at least in theory.\n"
    },
    {
      "commit": "75c8eabbb5d3dc8aa21b61e8700ab939ce272f5c",
      "tree": "9ecfa0b4bedf00abb544fea8b9242e59af31a5b6",
      "parents": [
        "7e0e2cb14ca16ce9eaca3b0300c1ffa92a6a104b"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 30 15:41:39 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:05:14 2012 +0100"
      },
      "message": "ospfd: introduce ospf_packet_minlen[] (BZ#705)\n\nThis commit ports some of the OSPFv3 packet reception checks\nto OSPFv2.\n\n* ospf_packet.c\n  * ospf_packet_minlen[]: a direct equivalent of ospf6_packet_minlen[]\n  * ospf_packet_examin(): new function designed after the first part\n    of ospf6_packet_examin()\n  * ospf_read(): verify received packet with ospf_packet_examin()\n* ospf_packet.h: add convenience macros\n"
    },
    {
      "commit": "7e0e2cb14ca16ce9eaca3b0300c1ffa92a6a104b",
      "tree": "1327873f183d26d4a329f1a135fb414e9163975d",
      "parents": [
        "272ca1e33016b1cbf9c72038d5e631b0adb04dc9"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 20 22:32:10 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:05:11 2012 +0100"
      },
      "message": "ospfd: fix ospf_packet_add_top() to use LOOKUP()\n"
    },
    {
      "commit": "272ca1e33016b1cbf9c72038d5e631b0adb04dc9",
      "tree": "6728fe6847947d0ddf600bd22f4bf7f040da8274",
      "parents": [
        "a20a4060c8b90e3d88ce97d439eee1a38260d7c5"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jan 15 19:12:19 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Mar 12 11:04:54 2012 +0100"
      },
      "message": "ospfd: use LOOKUP() for ospf_packet_type_str\n\n* ospf_packet.h: add proper str/max extern declarations\n* ospf_packet.c\n  * ospf_packet_type_str: rewrite in \"struct message\", add max value\n  * ospf_packet_add(): use LOOKUP()\n  * ospf_write(): ditto\n  * ospf_hello(): ditto\n  * ospf_read(): ditto\n* ospf_dump.h: the declaration does not belong here\n* ospf_dump.c\n  * ospf_header_dump(): use LOOKUP()\n  * show_debugging_ospf(): ditto\n"
    },
    {
      "commit": "a20a4060c8b90e3d88ce97d439eee1a38260d7c5",
      "tree": "bf164684241b37dfd5717bfe5b56d4acf69fce3a",
      "parents": [
        "fa482834ea1a30eff056dbf0f36a6f3262460a08"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 08 16:42:31 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 08 16:42:31 2012 +0000"
      },
      "message": "doc: Fix an apparently no longer legal @itemize @asis\n\n* basic.texi: @asis isn\u0027t legal with @itemize apparently, should be @w\n  according to docs, but @w{} seems to be needed. Fixes doc build error.\n"
    },
    {
      "commit": "fa482834ea1a30eff056dbf0f36a6f3262460a08",
      "tree": "cdabf37152e29e05724d54e4ed6bb783b0d9472e",
      "parents": [
        "096259d0623ad1a30c5da139af180909b322c91f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 08 13:51:21 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 08 16:14:13 2012 +0000"
      },
      "message": "HACKING.tex: Change to a LaTeX version of HACKING\n\n* configure.ac: Check for latexmk and pdflatex\n* Makefile.am: Add a conditional target to build HACKING.pdf, as a convenience\n* HACKING.tex: A slightly more structured HACKING, is readable on its own.\n* HACKING: removed\n"
    },
    {
      "commit": "096259d0623ad1a30c5da139af180909b322c91f",
      "tree": "74cc746a93956c5073ac82cf5270913a41ce6b4a",
      "parents": [
        "724b3aef4e59a48e9404ee17f09a504b20af0d37"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 07 11:42:03 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 07 11:42:03 2012 +0000"
      },
      "message": "HACKING: Typo fix\n"
    },
    {
      "commit": "724b3aef4e59a48e9404ee17f09a504b20af0d37",
      "tree": "a760f5b747b3378b6b8c27408a4cadb1e91bf79a",
      "parents": [
        "9fc75742397cf942ca9d684815ce63058b2576ff"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 07 11:02:05 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Mar 07 11:02:05 2012 +0000"
      },
      "message": "HACKING: Updates that have some initial consensus, for further iteration.\n"
    },
    {
      "commit": "9fc75742397cf942ca9d684815ce63058b2576ff",
      "tree": "3655b28f06ac2bdf9639b86e2df7c3abc525cd73",
      "parents": [
        "543fb49c316df9af2d25f08ba7e0da0305c36b5e",
        "5861739f8c38bc36ea9955e5cb2be2bf2f482d70"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 05 11:55:53 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 05 11:55:53 2012 +0000"
      },
      "message": "Merge remote-tracking branch \u0027quagga-gnu.org/master\u0027\n"
    },
    {
      "commit": "5861739f8c38bc36ea9955e5cb2be2bf2f482d70",
      "tree": "9675845a0b3be97362f3426430c6c2e499e8525c",
      "parents": [
        "50e7a3885da44f8f6c5c639e111109deb055cdf3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 09 20:59:26 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 04 23:55:02 2012 +0000"
      },
      "message": "bgpd: Open option parse errors don\u0027t NOTIFY, resulting in abort \u0026 DoS\n\n* bgp_packet.c: (bgp_open_receive) Errors from bgp_open_option_parse are\n  detected, and the code will stop processing the OPEN and return.  However\n  it does so without calling bgp_notify_send to send a NOTIFY - which means\n  the peer FSM doesn\u0027t get stopped, and bgp_read will be called again later.\n  Because it returns, it doesn\u0027t go through the code near the end of the\n  function that removes the current message from the peer input streaam.\n  Thus the next call to bgp_read will try to parse a half-parsed stream as\n  if it were a new BGP message, leading to an assert later in the code when\n  it tries to read stuff that isn\u0027t there. Add the required call to\n  bgp_notify_send before returning.\n* bgp_open.c: (bgp_capability_as4) Be a bit stricter, check the length field\n  corresponds to the only value it can be, which is the amount we\u0027re going to\n  read off the stream. And make sure the capability flag gets set, so\n  callers can know this capability was read, regardless.\n  (peek_for_as4_capability) Let bgp_capability_as4 do the length check.\n"
    },
    {
      "commit": "50e7a3885da44f8f6c5c639e111109deb055cdf3",
      "tree": "34ff9fa6b67d7cbb47e2450eb7f8571a6b57f092",
      "parents": [
        "b5043aabb03567b46a16463d88a8afce2acda35e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 09 13:54:33 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 04 23:55:01 2012 +0000"
      },
      "message": "tools/multiple-bgpd: Fix the PREV calculation so it works for \u003c4 bgpd\n\n* tools/multiple-bgpd: Make PREV more general and correct. Add comment\n  to route-map about why rt/soo sets are there - cause it\u0027s still broken.\n"
    },
    {
      "commit": "543fb49c316df9af2d25f08ba7e0da0305c36b5e",
      "tree": "5f1f8dd5139e47c05e37b104897485dab21f9417",
      "parents": [
        "835315bfb49bff2b2fb354f2075c6d6693c2a151"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Mar 02 11:56:38 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Mar 02 11:56:38 2012 +0000"
      },
      "message": "HACKING.pending: Add Quagga-RE details\n"
    },
    {
      "commit": "b5043aabb03567b46a16463d88a8afce2acda35e",
      "tree": "7b975c45bdbf513f62a1ad7f1aad35afb01606c9",
      "parents": [
        "b51a3a31500133e3e26f12e7639f297c655bc735"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 28 18:32:56 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 28 18:35:45 2012 +0000"
      },
      "message": "lib: fix incorrect thread list processing loops\n\n* thread.c: (thread_timer_process,thread_process) thread_list_delete nulls\n  thread-\u003enext. Loops need to save next first, or will only process the head.\n  Problem noted by Lou Berger \u003clberger@labn.net\u003e.\n"
    },
    {
      "commit": "835315bfb49bff2b2fb354f2075c6d6693c2a151",
      "tree": "b9cc49ef796bcb1e3836ff670da930765815acfa",
      "parents": [
        "3ecab4c8549574d09f8d8366098939a8ad3da6c4"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jan 18 12:28:30 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 28 18:35:45 2012 +0000"
      },
      "message": "bgpd: Move up flag-check calls, parcel up attr-parser args, and other cleanups\n\n* bgp_attr.h: (struct bgp_attr_parser_args) Attribute parsing context,\n  containing common arguments.\n* bgp_attr.c: (general) Move the bgp_attr_flag_invalid flag-check calls up,\n  out of each individual attr parser function, to be done once in attr_parse.\n\n  Similarly move the calculation of the \u0027total\u0027 attribute length field up\n  to attr_parse.\n\n  Bundle together common arguments to attr-parsing functions and helpers\n  into (struct bgp_attr_parser_args), so it can be passed by reference down\n  the stack \u0026 also de-clutter the argument lists \u0026 make it easier to\n  add/modify the context for attr-parsing - add local const aliases to avoid\n  modifying body of code too much. This also should help avoid cut \u0026 paste\n  errors, where calls to helpers with hard-coded attribute types are pasted\n  to other functions but the code isn\u0027t changed.\n\n  (bgp_attr_flags_diagnose) as above.\n  (bgp_attr_flag_invalid) as above.\n  (bgp_attr_{origin,aspath,as4_path,nexthop,med,local_pref,atomic}) as above.\n  (bgp_attr_{aggregator,as4_aggregator,community,originator_id}) as above\n  (bgp_attr_{cluster_list,ext_communities},bgp_mp_{un,}reach_parse) as above\n  (bgp_attr_unknown) as above.\n\n  (bgp_attr_malformed) as above. Also, startp and length have to be\n  special-cased, because whether or not to send attribute data depends\n  on the particular error - a separate length argument, distinct from\n  args-\u003elength, indicates whether or not the attribute data should be sent\n  in the NOTIFY.\n  (bgp_attr_aspath_check) Call to bgp_attr_malformed is wrong here, there is\n  no attribute parsing context - e.g. the \u0027flag\u0027 argument is unlikely to be\n  right, remove it. Explicitly handle the error instead.\n  (bgp_attr_munge_as4_attrs) Flag argument is pointless.\n\n  As the comment notes, the check here is pointless as AS_PATH presence\n  already checked elsewhere.\n\n  (bgp_attr_parse) Do bgp_attr_flag_invalid call here.\n  Use (struct bgp_attr_parser_args) for args to attr parser functions.\n  Remove out-of-context \u0027flag\u0027 argument to as4 checking functions.\n"
    },
    {
      "commit": "3ecab4c8549574d09f8d8366098939a8ad3da6c4",
      "tree": "7b8281980887ef0c57485be0ca6f382c054762cd",
      "parents": [
        "b5043aabb03567b46a16463d88a8afce2acda35e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jan 17 13:31:33 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 28 18:35:45 2012 +0000"
      },
      "message": "bgpd: consolidate attribute flag checks\n\n* bgpd/bgp_attr.c: (attr_flags_values []) array of required flags for\n  attributes, EXTLEN \u0026 PARTIAL masked off as \"dont care\" as appropriate.\n  (bgp_attr_flag_invalid) check if flags may be invalid, according to\n  the above table \u0026 RFC rules.\n  (bgp_attr_*) Use bgp_attr_flag_invalid.\n  (bgp_attr_as4_aggregator) ditto, also take startp argument for the\n  NOTIFY data.\n  (bgp_attr_parse) pass startp to bgp_attr_as4_aggregator\n"
    },
    {
      "commit": "b51a3a31500133e3e26f12e7639f297c655bc735",
      "tree": "07bf18aeaace7f07736caf8016082e47e0f10a0c",
      "parents": [
        "ef2d5d100431031c32ea35b3c834b46cff16f511"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Fri Feb 10 10:42:45 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 21 21:45:42 2012 +0400"
      },
      "message": "ospf6d: remove defaults from iface config (BZ#550)\n"
    },
    {
      "commit": "ef2d5d100431031c32ea35b3c834b46cff16f511",
      "tree": "c327572a6ea15d00abc8e70b45f41affb0b2d21f",
      "parents": [
        "4c78376f96cd2ca56f1c6476b76fd659654431f5"
      ],
      "author": {
        "name": "Phil Laverdiere",
        "email": "phil_laverdiere@securecomputing.com",
        "time": "Mon Jan 02 20:04:26 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 21 21:35:07 2012 +0400"
      },
      "message": "ospf6d: remove own routes on SIGTERM (BZ#448)\n"
    },
    {
      "commit": "4c78376f96cd2ca56f1c6476b76fd659654431f5",
      "tree": "1019b6adbea4ef0305c9574a9588e20345539028",
      "parents": [
        "e854095932260b3e6187902aa9a7baa0e96b9428"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Jan 21 22:50:19 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 21 21:34:21 2012 +0400"
      },
      "message": "lib: fix logging of ZEBRA_HELLO message\n"
    },
    {
      "commit": "e854095932260b3e6187902aa9a7baa0e96b9428",
      "tree": "1ee0afa3ad43b610d52bc04f86ea6e2b2e4ad00d",
      "parents": [
        "e6b03b77766dce8009ad7b4a2392e14addf4ab0f"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Feb 16 06:14:54 2012 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Thu Feb 16 06:17:11 2012 +0100"
      },
      "message": "lib: add THREAD_TIMER_MSEC_ON()\n\n * lib/thread.h: new timer macro, millisecond precision\n\n(this was cherrypicked from pimd to isolate all non-contained changes)\n\nFrom: Everton Marques \u003ceverton.marques@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "e6b03b77766dce8009ad7b4a2392e14addf4ab0f",
      "tree": "a47466541c8f85e70b228ae4ab3da31af3391507",
      "parents": [
        "c25eaffdb2190149e768dc4ee4efc913c6d02992"
      ],
      "author": {
        "name": "Fritz Reichmann",
        "email": "fritz@reichmann.nl",
        "time": "Sat Oct 01 17:49:48 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 14 03:06:36 2012 +0400"
      },
      "message": "isisd: implement MD5 circuit authentication\n\n* Replace command \"isis passwd\" with \"isis passwd {clear|md5}\"\n* Verify HMAC MD5 on ISIS Hello PDUs\n* Add HMAC MD5 authentication to md5.h/md5.c from RFC2104\n"
    },
    {
      "commit": "c25eaffdb2190149e768dc4ee4efc913c6d02992",
      "tree": "d8623ba984fcbd1e81815fa0d31f27ef7067d075",
      "parents": [
        "d034aa027ef44d0a74805c27ad2a4d8ea20395d1"
      ],
      "author": {
        "name": "Fritz Reichmann",
        "email": "fritz@reichmann.nl",
        "time": "Sat Oct 01 17:43:12 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 14 03:06:29 2012 +0400"
      },
      "message": "isisd: unexpected kernel routing table (BZ#544)\n\nFix bug 544: isisd produces an unexpected routing table for wide-metric.\n\n* isis_spf.c: Accept VTYPE_PSEUDO_TE_IS and VTYPE_NONPSEUDO_TE_IS\n  vertex types for SPF calculation\n* isis_pdu.c: Change order of TLVs to match Cisco to make bitwise\n  comparison easier for Wireshark\n* isis_tlv.c: EXTREME_TLV_DEBUG for TLV debugging instead of\n  EXTREME_DEBUG\n"
    },
    {
      "commit": "d034aa027ef44d0a74805c27ad2a4d8ea20395d1",
      "tree": "bf464ce298c822f207f14423a9a1dc847d960cc0",
      "parents": [
        "907fd95e502e10334e5390c73cc57588b88b8171"
      ],
      "author": {
        "name": "Peter Szilagyi",
        "email": "peszilagyi@gmail.com",
        "time": "Sat Oct 01 17:22:51 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 14 03:06:17 2012 +0400"
      },
      "message": "isisd: fix wrong next-hops from SPF\n\nThe forwarding table was filled with wrong next-hops, and which is even\nworse, it was done in a totally non-deterministic way.\n\nThe next-hop set for an IP prefix by isisd was the neighbor IS from\nwhich the flooded LSP about the IP prefix was arrived. So, if an IS\nreceived all the LSPs through its, say, eth0 interface, all entries\nin the forwarding table contained the next IS reachable via eth0 as\nthe next-hop.\n\nThe solution is to propagate the correct next-hop further from node to\nnode as the SPF algorithm traverses the graph and selects the next\nnode to be added to the set of already covered nodes.\n\nAlso, the construction of the tentative node list (the nodes where the\nshortest path is not known yet) was buggy: if a node was already a\nmember of this list with a certain path cost, and an alternative path\nwas found to it with a lower cost while processing a pseudo-node LSP,\nit was not added to the list. This way, the path selected by isisd for\na certain prefix was the first one it encountered during the LSDB\nprocessing.\n\nSigned-off-by: Fritz Reichmann \u003cfritz@reichmann.nl\u003e\n"
    },
    {
      "commit": "907fd95e502e10334e5390c73cc57588b88b8171",
      "tree": "751ccecafac9014ce71f1e9fe11f817daf6a3a32",
      "parents": [
        "7fd6cd819ff98f0580b745ba637990df9c20ef0f"
      ],
      "author": {
        "name": "Peter Szilagyi",
        "email": "peszilagyi@gmail.com",
        "time": "Sat Oct 01 17:15:46 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 14 03:06:09 2012 +0400"
      },
      "message": "isisd: send proper LSP after DIS election\n\nAfter an IS has been elected as the Designated IS for a LAN, it did\nnot refresh the content of the pseudo-node after a new node has been\nconnected to the same LAN. Instead, the periodically reoriginated\npseudo-node LSP still contained only those IS neighbors that were\nalready present when the DIS election process was commenced.\n\nThe fix for the problem schedules an LSP regeneration rather than\njust reoriginating the same LSP with the old content.\n\nSigned-off-by: Fritz Reichmann \u003cfritz@reichmann.nl\u003e\n"
    },
    {
      "commit": "7fd6cd819ff98f0580b745ba637990df9c20ef0f",
      "tree": "c95fc6bc290d170cd14a5962609df5baf577999d",
      "parents": [
        "4c0cf00afc4340a429a9c4830f638b4593d7c3af"
      ],
      "author": {
        "name": "Peter Szilagyi",
        "email": "peszilagyi@gmail.com",
        "time": "Sat Oct 01 17:11:45 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Feb 14 03:06:00 2012 +0400"
      },
      "message": "isisd: fix circuit state machine\n\nisisd has a so-called circuit state machine that takes care about\nthe interface state changes, such as initializing, down, up. When\nan interface was brought down by a link failure, the interface\ninformation was deleted and set to NULL. When the link was restored\nlater, the interface was looked up by the old pointer, but since it\nwas cleared, it was never found again, resulting in an interface\nnever entering the up state again.\n\nAlso, the program regularly crashed because of a deleted pointer in\nthe same context which was later accessed without any further\nchecking.\n\nSigned-off-by: Fritz Reichmann \u003cfritz@reichmann.nl\u003e\n"
    },
    {
      "commit": "4c0cf00afc4340a429a9c4830f638b4593d7c3af",
      "tree": "572ec0a416b23456d42e42b9f7c9fba4b562fd2a",
      "parents": [
        "4afa50b393ff1fb34dd577888a05b81dfdced5af"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon May 31 12:02:31 2010 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Sat Feb 11 15:26:19 2012 +0100"
      },
      "message": "ospf6d: fix out of bounds write in ospf6_prefix_apply_mask\n\nospf6_prefix_apply_mask would write one byte beyond the 4/8/12\nbytes allocated for prefixes of length 32/64/96.\n\nbased on report and patch by Jon Andersson \u003cjon.andersson@thales.no\u003e\n\nReported-by: Jon Andersson \u003cjon.andersson@thales.no\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "4afa50b393ff1fb34dd577888a05b81dfdced5af",
      "tree": "e9bb7272c91a79276f2da1450b1cee14bc80b188",
      "parents": [
        "6eb0c5ab1d43bcf9edd4fefd19031f2b96ded728"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Jan 24 12:39:58 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 26 11:43:00 2012 +0400"
      },
      "message": "zebra: justify rtadv VTY commands with arguments\n\nipv6 nd ra-interval\nipv6 nd ra-lifetime\nipv6 nd reachable-time\nipv6 nd home-agent-preference\nipv6 nd home-agent-lifetime\nipv6 nd router-preference\n\nCalls to atoi() and atol() are replaced with VTY_GET_INTEGER_RANGE()\nmacro, command patterns are clarified and aliases of some commands\nare added for consistency. Other changes are listed below.\n\n* zebra/rtadv.c\n  * ipv6_nd_ra_interval_msec(): resolve -Wsign-compare\n  * ipv6_nd_ra_interval(): idem\n  * rtadv_init(): update to list new aliases\n* doc/ipv6.texi: update to match current implementation\n"
    },
    {
      "commit": "6eb0c5ab1d43bcf9edd4fefd19031f2b96ded728",
      "tree": "734d264279d8a44022aaa8661f9c94cca6cb8a74",
      "parents": [
        "aca43b656623f38dfa6ea835dacbdfec51d03a67"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Jan 24 11:02:03 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 26 11:42:57 2012 +0400"
      },
      "message": "zebra: freshen RFC references in rtadv\n\nRFC2461 was replaced by RFC4861\nRFC3775 was replaced by RFC6275\ndraft-ietf-mip6-mipext-advapi-03 was replaced by RFC4584\n"
    },
    {
      "commit": "aca43b656623f38dfa6ea835dacbdfec51d03a67",
      "tree": "0d53b9b2340000e169cffdf1ca39983607b193d4",
      "parents": [
        "6bb1273e83c29b3aeff9584bc8f6272e773294ad"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jan 08 18:27:12 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 26 11:42:54 2012 +0400"
      },
      "message": "zebra: use prefix_ipv6 in rtadv_prefix\n\nrtadv_prefix.prefix was casted to \"struct prefix_ipv6\" and had the same\nsize, make it exactly this type to make the code a bit cleaner.\n"
    },
    {
      "commit": "6bb1273e83c29b3aeff9584bc8f6272e773294ad",
      "tree": "a40cc3cb8853c2a3188ef8aabe47a3486dac30cb",
      "parents": [
        "d660f698427277ce695a5b756f3143c8304274ea"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jan 08 17:46:34 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 26 11:42:51 2012 +0400"
      },
      "message": "zebra: clear host bits of ND RA prefix option\n\nRFC4861 4.6.2. Prefix Information\n\nPrefix         An IP address or a prefix of an IP address.  The\n               Prefix Length field contains the number of valid\n               leading bits in the prefix.  The bits in the prefix\n               after the prefix length are reserved and MUST be\n               initialized to zero by the sender and ignored by\n               the receiver.\n\n* rtadv.c\n  * ipv6_nd_prefix(): add missing call to apply_mask_ipv6()\n  * no_ipv6_nd_prefix(): idem\n"
    },
    {
      "commit": "d660f698427277ce695a5b756f3143c8304274ea",
      "tree": "f26d5f72724cae8ee9844f30ba8e0aaf7b7c3006",
      "parents": [
        "6134b875f39986564aced5e2d7329fcd852f17f4"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Dec 30 21:55:49 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 26 11:42:48 2012 +0400"
      },
      "message": "zebra: justify some IPv6 ND RA timers wrt RFC\n\nThere was a regression introduced with the previous commit:\n\"ipv6 nd home-agent-lifetime 1800000\" appeared by default in every\ninterface section of running-config, although this  command is\ninvalid in this context. Troubleshooting and bugfixing of the issue\ntracked out several bugs in router advertisement procedures, some of\nwhich are fixed in this commit.\n\n* zebra/interface.c\n  * if_zebra_new_hook(): update to treat -1 as \"uninitialized\"\n  * nd_dump_vty(): idem\n* zebra/rtadv.c\n  * rtadv_send_packet(): update processing of \"router lifetime\" field,\n    \"home agent\" option and \"home agent lifetime\" field to conform to\n    RFC6275 better\n  * ipv6_nd_ra_interval_msec(): update MaxRtrAdvInterval range check,\n    make sure it never exceeds (initialized) AdvDefaultLifetime\n  * ipv6_nd_ra_interval(): idem\n  * ipv6_nd_ra_lifetime(): update AdvDefaultLifetime range check, make\n    sure it never falls below MaxRtrAdvInterval\n  * ipv6_nd_homeagent_lifetime(): update HomeAgentLifetime range check\n  * no_ipv6_nd_ra_lifetime(): update to treat -1 as \"uninitialized\"\n  * no_ipv6_nd_homeagent_lifetime(): idem\n  * rtadv_config_write(): idem\n"
    },
    {
      "commit": "6134b875f39986564aced5e2d7329fcd852f17f4",
      "tree": "19eb8d2df066047bc25162587f2ce9e1950c20ed",
      "parents": [
        "b4e45f67057be22133b6bec88cdf285d5c8214db"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 27 18:49:15 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 26 11:42:44 2012 +0400"
      },
      "message": "zebra: fix output of IPv6 ND RA options\n\nThe following options could be configured for an interface, but were\nnever visible in the config text:\n\nipv6 nd adv-interval-option\nipv6 nd home-agent-preference\nipv6 nd home-agent-lifetime\nipv6 nd home-agent-config-flag\n"
    },
    {
      "commit": "b4e45f67057be22133b6bec88cdf285d5c8214db",
      "tree": "80f775047efb255ef573b2e9d3affb1a7caeb6d1",
      "parents": [
        "6eac79a6fed4842e00607c00c445213b51bba377"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 05 16:35:14 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:31:42 2012 +0400"
      },
      "message": "fix zebra protocol after MP-BGP changes\n\nThe previous commits modified both zebra and bgpd for additional\nSAFI field, but not any other routing daemon, which led to zebra\ndaemon crashing with failed assertion.\n"
    },
    {
      "commit": "6eac79a6fed4842e00607c00c445213b51bba377",
      "tree": "51b63c6028d7a98236cbd31880f770c9d3787bfc",
      "parents": [
        "cb32fd690a957819865219a847e3c21a53a0f419"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 05 13:43:18 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:31:34 2012 +0400"
      },
      "message": "zebra: fix recent MP-BGP commits for FreeBSD\n"
    },
    {
      "commit": "cb32fd690a957819865219a847e3c21a53a0f419",
      "tree": "d152fe1feadaaa3b14472c097770bb71a2e75730",
      "parents": [
        "73bfe0bd9adb8e4dfcee7239e56a425c6d58f4e9"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sun Nov 27 20:09:40 2011 +0530"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:31:14 2012 +0400"
      },
      "message": "zebra: Removal of the following warning messages\n       warning: too many arguments for format [-Wformat-extra-args]\n"
    },
    {
      "commit": "73bfe0bd9adb8e4dfcee7239e56a425c6d58f4e9",
      "tree": "e2f5dd3fc170a28d9aff622a8c5af77f3ebf7e45",
      "parents": [
        "f768f367bcd1f37a53c563495176a5a134caf234"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Fri Sep 23 22:36:20 2011 +0530"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:31:05 2012 +0400"
      },
      "message": "bgpd: Addition of ipv6 network command in Multicast address family mode.\n\n      The patch adds the ipv6 network command in the BGP multicast address\n      family mode.\n"
    },
    {
      "commit": "f768f367bcd1f37a53c563495176a5a134caf234",
      "tree": "57a0fff4f2a0e832623aa0d6d4d3bd2a3c951d98",
      "parents": [
        "c7ec179a95c1ed4fcd3d3be3f981c8c20dce534a"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat Nov 26 22:10:39 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:30:57 2012 +0400"
      },
      "message": "zebra: IPv6 MP-BGP Routes addition and deletion\n\nThis patch contains the following:\n1. Addition of IPv6 SAFI_MULTICAST BGP routes into the RTM\u0027s RIB.\n2. Deletion of IPv6 SAFI_MULTICAST BGP routes from the RTM\u0027s RIB.\n"
    },
    {
      "commit": "c7ec179a95c1ed4fcd3d3be3f981c8c20dce534a",
      "tree": "add6824e168ab26a28390a1d1b9a2c7be1484435",
      "parents": [
        "cddf391bf6839e9f093cef15508669c1f3f92122"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat Nov 26 22:04:05 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:30:50 2012 +0400"
      },
      "message": "bgpd: IPv6 MP-BGP Routes addition and deletion\n\nThis patch contains the following:\n1. Addition of IPv6 SAFI_MULTICAST BGP routes into the BGP Multicast RIB.\n2. Deletion of IPv6 SAFI_MULTICAST BGP routes from the BGP Multicast RIB.\n"
    },
    {
      "commit": "cddf391bf6839e9f093cef15508669c1f3f92122",
      "tree": "38dfaa5a7b98776ba67bb8a812beec8724810839",
      "parents": [
        "5a616c08ce089e25dc0e8da920727af4d11279bf"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat Nov 26 21:59:32 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:30:42 2012 +0400"
      },
      "message": "zebra: IPv4 MP-BGP Routes addition and deletion\n\nThis patch contains the following:\n1. Addition of IPv4 SAFI_MULTICAST BGP routes into the RTM\u0027s RIB.\n2. Deletion of IPv4 SAFI_MULTICAST BGP routes from the RTM\u0027s RIB.\n"
    },
    {
      "commit": "5a616c08ce089e25dc0e8da920727af4d11279bf",
      "tree": "4b5650d6602d06d0188102469e3b402abe81f16a",
      "parents": [
        "6ae93c058725991df5a9ae35cefec368919b5fea"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat Nov 26 21:58:42 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:30:33 2012 +0400"
      },
      "message": "bgpd: IPv4 MP-BGP Routes addition and deletion\n\nThis patch contains the following:\n1. Addition of IPv4 SAFI_MULTICAST BGP routes into the BGP Multicast RIB.\n2. Deletion of IPv4 SAFI_MULTICAST BGP routes from the BGP Multicast RIB.\n"
    },
    {
      "commit": "6ae93c058725991df5a9ae35cefec368919b5fea",
      "tree": "b3f3024fe3241cbfbe0a39f42860c917bcb0ad50",
      "parents": [
        "fc98d16ea77372f4ab4231e8904f8467e8d1ef71"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 27 10:45:36 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 20 17:44:02 2012 +0400"
      },
      "message": "zebra: include MTU option in RA on request (BZ#665)\n\nThis implements a new \"ipv6 nd mtu \u003c1-65535\u003e\" interface-level command.\n\n* doc/ipv6.texi: add description\n* zebra/rtadv.c\n  * rtadv_send_packet(): send option type 5, when configured\n  * ipv6_nd_mtu(): new VTY helper\n  * no_ipv6_nd_mtu(): ditto\n  * rtadv_config_write(): add new option\n  * rtadv_init(): list new helpers\n"
    },
    {
      "commit": "fc98d16ea77372f4ab4231e8904f8467e8d1ef71",
      "tree": "ad69423081bd300c5a60262f947760ac7189744f",
      "parents": [
        "dc00d2bb56aa6a84dd2328133f69db3c3e6d9dc7"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 09 11:36:23 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 09 11:36:23 2012 +0000"
      },
      "message": "bgpd: reinstate zlookup checks, required for BGP without zebra\n\n* bgp_nexthop.c: The nexthop lookup cache has to return success for queried\n  nexthops if bgpd isn\u0027t connected to zebra, or else BGP without zebra doesn\u0027t\n  work.\n"
    },
    {
      "commit": "dc00d2bb56aa6a84dd2328133f69db3c3e6d9dc7",
      "tree": "638f95d929b07067f5cac70f21d40a4b94e1f8f9",
      "parents": [
        "f31d6927b2df4340bf9ff1cc9f20d52e168a3766",
        "708a758fb8013d4b40ae09f81e4c5830279bf10c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 14:47:06 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 14:47:27 2012 +0000"
      },
      "message": "Marker merge for \u0027RE-0.99.17.6\u0027\n\nThis marker merge (i.e. an \u0027ours\u0027 strategy merge) is a placeholder to show\nthat all commits in Quagga-RE stable, to its release RE-0.99.17.6 tag, have\nbeen reviewed and merged into \u0027master\u0027.\n"
    },
    {
      "commit": "f31d6927b2df4340bf9ff1cc9f20d52e168a3766",
      "tree": "638f95d929b07067f5cac70f21d40a4b94e1f8f9",
      "parents": [
        "83a9a2213a73aeb9796b69327c87e89e2d3327ed"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 14:17:42 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 14:21:55 2012 +0000"
      },
      "message": "bgpd: Fix incorrect attribute type code in call to bgp_attr_malformed\n"
    },
    {
      "commit": "83a9a2213a73aeb9796b69327c87e89e2d3327ed",
      "tree": "ed0ef43739f593a3163309a128b179d66ceec4d8",
      "parents": [
        "9ed79b53eb89b8a663eb368ef5f7d47701f231df"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 14:15:03 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 14:15:03 2012 +0000"
      },
      "message": "bgpd: Improve flag error messages in bgp_attr_aspath\n\n* bgpd/bgp_attr.c: (bgp_attr_aspath) error message could be misleading,\n  clearly log what flag was incorrect.\n\n  (Problem noted in \"bgpd: fix error message in bgp_attr_aspath()\" in\n   Quagga-RE)\n"
    },
    {
      "commit": "9ed79b53eb89b8a663eb368ef5f7d47701f231df",
      "tree": "3a0eb140a54197a46957dd41561705853e7c345e",
      "parents": [
        "ce3cdcfbed2ca65d0d3a12b926dd1103910a6056"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 24 18:45:05 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 13:42:23 2012 +0000"
      },
      "message": "lib: use prefix bit length macros\n"
    },
    {
      "commit": "ce3cdcfbed2ca65d0d3a12b926dd1103910a6056",
      "tree": "5f0b3df2ba3a0337e535b1ed590b1adf0891485e",
      "parents": [
        "afcb767922509c4d998f1c567e350b9809c148ab"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 24 18:17:09 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 13:40:11 2012 +0000"
      },
      "message": "ospfd: use IS_LSA_SELF() where appropriate\n"
    },
    {
      "commit": "afcb767922509c4d998f1c567e350b9809c148ab",
      "tree": "ce9f742f0471377337e36235dee73a39e17cb7b0",
      "parents": [
        "d8bcd9e9c6a1801b52b166fa3873eb468ac3c5cb"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Oct 23 22:32:44 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 12:57:35 2012 +0000"
      },
      "message": "bgpd: rewrite attr flag error logging\n\n* bgp_attr.c\n  * attr_flag_str: new message list\n  * bgp_attr_flags_diagnose(): new function, implements previously added\n    error logging in a generic way\n  * bgp_attr_origin(): use bgp_attr_flags_diagnose()\n  * bgp_attr_nexthop(): ditto\n  * bgp_attr_med(): ditto\n  * bgp_attr_local_pref(): ditto\n  * bgp_attr_atomic(): ditto\n  * bgp_attr_originator_id(): ditto\n  * bgp_attr_cluster_list(): ditto\n  * bgp_mp_reach_parse(): ditto\n  * bgp_mp_unreach_parse(): ditto\n"
    },
    {
      "commit": "d8bcd9e9c6a1801b52b166fa3873eb468ac3c5cb",
      "tree": "9daf5bb631fdd97c3e998e4ddc16ba244a85ed6c",
      "parents": [
        "8216f53b73d8eb375615ad4395deace11d1e22d6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Oct 07 20:43:59 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:46:32 2012 +0000"
      },
      "message": "doc: \"[no] router zebra\" does not belong to ospfd\n"
    },
    {
      "commit": "8216f53b73d8eb375615ad4395deace11d1e22d6",
      "tree": "b5ffdff7813c92555889b1be89c907a9f1a14789",
      "parents": [
        "72f062b6ebd7f279dc3f0b66acdb0b718ff42e40"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 03 14:08:01 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:46:11 2012 +0000"
      },
      "message": "ospfd: justify ospf_default_originate_timer()\n\nThe function is implemented in ospf_lsa.c, move its \"extern\" declaration\nto ospf_lsa.h for consistency.\n"
    },
    {
      "commit": "72f062b6ebd7f279dc3f0b66acdb0b718ff42e40",
      "tree": "260bffa9e869cabb392f1914da036e9eabe04017",
      "parents": [
        "5e1731ac1d8593c1317d5d907eda62b52b17470f"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Aug 28 22:38:45 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:43:07 2012 +0000"
      },
      "message": "ospfd: address more trivial compiler warnings\n\n* ospf_ase.c\n  * ospf_ase_complete_direct_routes(): dismiss unused variable\n"
    },
    {
      "commit": "5e1731ac1d8593c1317d5d907eda62b52b17470f",
      "tree": "ca5db73351b53967c095d4e98289cb1c78155738",
      "parents": [
        "0e8032d69961ae196c11ba6ead856084c7acf7c2"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Aug 20 22:45:58 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:39:50 2012 +0000"
      },
      "message": "ospf6d: ospf6_lsa_cmd_init() does not exist\n"
    },
    {
      "commit": "0e8032d69961ae196c11ba6ead856084c7acf7c2",
      "tree": "f9adf1934b0b34fd3e4db4896bc83c05e471d234",
      "parents": [
        "b64bfc1c4a552fc0b4dd024d5f77171ec848a5df"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Aug 09 14:42:58 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:31:50 2012 +0000"
      },
      "message": "bgpd: improve \"show ip bgp scan detail\"\n\n* bgp_nexthop.c (show_ip_bgp_scan_tables): access proper structure field\n  in AF_INET6 case, handle ifindex NH type properly\n"
    },
    {
      "commit": "b64bfc1c4a552fc0b4dd024d5f77171ec848a5df",
      "tree": "f03661d27a79ae5810c861c643d85d810e885b87",
      "parents": [
        "318f0d8a7f5e8e87086bbf2a9e7c4b35638951ac"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 08 19:36:44 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:31:35 2012 +0000"
      },
      "message": "bgpd: dismiss some zlookup checks\n\nbgp_nexthop_onlink(): zlookup is not used here at all\nbgp_nexthop_lookup_ipv6(): rely on the detection performed by \"query\"\n  function (this also changes the fallback value to 0), reorder if-block\nbgp_nexthop_lookup(): idem\n"
    },
    {
      "commit": "318f0d8a7f5e8e87086bbf2a9e7c4b35638951ac",
      "tree": "deab95315df2b315ba5b03162c43b61cb6c9ff2b",
      "parents": [
        "8e80bdf20f493a71bcf74262ed3aa3a2437f4df6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Aug 05 21:47:08 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:31:17 2012 +0000"
      },
      "message": "bgpd: add \"show ip bgp scan detail\" command\n\n* bgp_nexthop.c: (show_ip_bgp_scan) transform into\n  show_ip_bgp_scan_tables(), which uses inet_ntop() and can dump\n  nexthops on request; (show_ip_bgp_scan_detail_cmd) new function\n"
    },
    {
      "commit": "8e80bdf20f493a71bcf74262ed3aa3a2437f4df6",
      "tree": "b1ebddbda4b8f12a28c3ce6299ebe931105a25b6",
      "parents": [
        "23be94ea00fadace0007b6ffa6c9107124249e91"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Aug 05 18:52:52 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:30:55 2012 +0000"
      },
      "message": "bgpd: touch nexthop handling code\n\nbgp_nexthop_lookup_ipv6(): declare variables where they are actually\nused, drop no-op initialization (the field is already 0)\nbgp_nexthop_lookup(): ditto\nbgp_nexthop_check_ebgp(): rename to bgp_nexthop_onlink()\nbgp_nexthop_cache_changed(): rename to bgp_nexthop_cache_different()\n"
    },
    {
      "commit": "23be94ea00fadace0007b6ffa6c9107124249e91",
      "tree": "40f161dfc675f1129f50f456c96151b9af56757b",
      "parents": [
        "f63f06da2e7be6b17c72dd6110aae179f42f3700"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 06 16:07:39 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 06 16:19:36 2012 +0000"
      },
      "message": "lib/if: trivial, fix rarely used if debug function to print everything\n\n* if.c: (if_dump) loop that doesn\u0027t do anything, wants to be\n  before the zlog of what it\u0027s meant to print out so all the connected\n  addresses get printed out. Trival: just a debug function\n"
    },
    {
      "commit": "f63f06da2e7be6b17c72dd6110aae179f42f3700",
      "tree": "a36b625a9ea06d0720a240276ed1b8af33193ed7",
      "parents": [
        "651e70d7f419ee7af75113f80e688c0100e9cff5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Apr 08 12:44:43 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 06 16:18:18 2012 +0000"
      },
      "message": "general: remove inline qualifiers and move in-header functions to objects\n\n* (general) Move functions in headers into files, to be compiled into\n  shared object files. Remove inline qualifier from functions. Let the\n  compiler do the work.\n"
    },
    {
      "commit": "708a758fb8013d4b40ae09f81e4c5830279bf10c",
      "tree": "8fec3a00a90988af941fb190f88418842b26706a",
      "parents": [
        "f382ad5696a2b0d4cc1dd16752638c9c4dc2b2f8"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 05 17:46:53 2012 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jan 05 17:46:53 2012 +0400"
      },
      "message": "version RE-0.99.17.6\n"
    },
    {
      "commit": "f382ad5696a2b0d4cc1dd16752638c9c4dc2b2f8",
      "tree": "44bf34d182f4d8776d4f7098337bff616730a6b4",
      "parents": [
        "2894cdc344ab15d8a80906d77cfe90378f82f71d"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 27 18:06:45 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:51:33 2012 +0400"
      },
      "message": "doc: update BGP RFC references\n"
    },
    {
      "commit": "2894cdc344ab15d8a80906d77cfe90378f82f71d",
      "tree": "c908c8e0528c9ba49c67aace7b8d74c0d1241edd",
      "parents": [
        "6dd6c307bf697184a77fd777c0226399de630be5"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 27 10:18:47 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:51:27 2012 +0400"
      },
      "message": "zebra: fix IPv6 RA wrt interface removal (BZ#480)\n"
    },
    {
      "commit": "6dd6c307bf697184a77fd777c0226399de630be5",
      "tree": "2ae25db5453e21fc5bdf6fd228bf3314ccf19eeb",
      "parents": [
        "b4b315989f9f73bdab4224eb3df80781fa986143"
      ],
      "author": {
        "name": "Matthias Ferdinand",
        "email": "mf@14v.de",
        "time": "Mon Dec 26 16:35:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:51:20 2012 +0400"
      },
      "message": "zebra: fix ifindex test condition (BZ#487)\n\nWhen the same ip address is used on several interfaces,\nand one of them gets deleted (or equivalent: set to down and\nthen address removed), rib_delete_ipv[46] will also remove\nthe connected route from other interfaces.\n\nrib_delete_ipv[46] is called twice when an interface is\ndeleted:\n    - for the \"ifdown\" event\n    - for the address removal\n(note: this may be specific to the netlink interface of linux)\nThe second call does not find the connected route to that same\nifindex anymore, but deletes similar connected routes to any\nother ifindex instead.\n\nReason: the ifindex check is on the same level as the check\nfor ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. If everything\nmatches except for the ifindex, the \"else\" part (intended for\ndifferent route types) is executed, thus removing the route\nfrom the wrong interface.\n\nfix: move ifindex check inside the \"then\" part of the check\nfor ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. Now connected\nroutes to other ifindexes will not spill over to the \"else\"\npart for different route types anymore.\n"
    },
    {
      "commit": "b4b315989f9f73bdab4224eb3df80781fa986143",
      "tree": "c6873bb8b08305ca8834f3d6b0bc3d088612f8de",
      "parents": [
        "830526a51292e6241f7b6415e070f3780fe18e1e"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Thu Dec 22 18:24:19 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:51:11 2012 +0400"
      },
      "message": "ospf6d: fix compiler warning messages\n\n* fix disagreement with C99 in zlog_debug calls\nFormat specifier in some zlog_debug calls for size_t values\nwas changed in order to C99 (\u0027%u\u0027 -\u003e \u0027%zu\u0027).\n\n* fix -Wsign-compare warnings\nType of return value of ospf6_packet_max() was changed.\n"
    },
    {
      "commit": "830526a51292e6241f7b6415e070f3780fe18e1e",
      "tree": "42cf042cfc95db7be191be0fe538386b78e45c05",
      "parents": [
        "65cd7a4a66145cf666df707781c3e46297158c58"
      ],
      "author": {
        "name": "Ulrich Weber",
        "email": "ulrich.weber@sophos.com",
        "time": "Wed Dec 21 02:24:11 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:50:57 2012 +0400"
      },
      "message": "lib: fix some strtoul() use cases\n\n...otherwise 4294967295 is not a valid value on 32bit systems\n"
    },
    {
      "commit": "65cd7a4a66145cf666df707781c3e46297158c58",
      "tree": "ffb6551b3c022e64c1cae19e86eb49172f3bda0c",
      "parents": [
        "36d3e8d828e18c5c4cd097f659e3984ff02532cb"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:03:02 2010 -0800"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:50:50 2012 +0400"
      },
      "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\nSigned-off-by: Vyacheslav Trushkin \u003cme@dogonthesun.net\u003e\n"
    },
    {
      "commit": "36d3e8d828e18c5c4cd097f659e3984ff02532cb",
      "tree": "d7ec4c0bb657f303e39d8c784f1b3ac45a72d8a9",
      "parents": [
        "a809d1cc54a621f4b31397ee5b8b79151baa4bf2"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:01:41 2010 -0800"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:50:41 2012 +0400"
      },
      "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\nSigned-off-by: Vyacheslav Trushkin \u003cme@dogonthesun.net\u003e\n\nConflicts:\n\n\tospf6d/ospf6_lsa.h\n"
    },
    {
      "commit": "a809d1cc54a621f4b31397ee5b8b79151baa4bf2",
      "tree": "2e8badac33516de66c4a0cdff9d3c7812ff65fa4",
      "parents": [
        "13351032d1d1632dbaf540cf33b7bebbc748c415"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Wed Nov 10 13:00:54 2010 -0800"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:50:32 2012 +0400"
      },
      "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": "651e70d7f419ee7af75113f80e688c0100e9cff5",
      "tree": "ecd5e15290306f9f1db42c08fd452a08977dce5a",
      "parents": [
        "fb5174a27e4122edf849c524861dfcd92d8b19f5"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 27 18:06:45 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:14:18 2012 +0400"
      },
      "message": "doc: update BGP RFC references\n"
    },
    {
      "commit": "fb5174a27e4122edf849c524861dfcd92d8b19f5",
      "tree": "1e2b4b43c033f072c27fd1de3ea94dc3ae8124ca",
      "parents": [
        "4f1735fd6ac5d0881bafa9bd421e00645b6c60fd"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 27 10:18:47 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:14:08 2012 +0400"
      },
      "message": "zebra: fix IPv6 RA wrt interface removal (BZ#480)\n"
    },
    {
      "commit": "4f1735fd6ac5d0881bafa9bd421e00645b6c60fd",
      "tree": "ec6039710bef675594c4ce50aa488bfb64e4157b",
      "parents": [
        "cba1fab2d7e22921a03b8b886772daec8b5977c4"
      ],
      "author": {
        "name": "Matthias Ferdinand",
        "email": "mf@14v.de",
        "time": "Mon Dec 26 16:35:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:13:58 2012 +0400"
      },
      "message": "zebra: fix ifindex test condition (BZ#487)\n\nWhen the same ip address is used on several interfaces,\nand one of them gets deleted (or equivalent: set to down and\nthen address removed), rib_delete_ipv[46] will also remove\nthe connected route from other interfaces.\n\nrib_delete_ipv[46] is called twice when an interface is\ndeleted:\n    - for the \"ifdown\" event\n    - for the address removal\n(note: this may be specific to the netlink interface of linux)\nThe second call does not find the connected route to that same\nifindex anymore, but deletes similar connected routes to any\nother ifindex instead.\n\nReason: the ifindex check is on the same level as the check\nfor ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. If everything\nmatches except for the ifindex, the \"else\" part (intended for\ndifferent route types) is executed, thus removing the route\nfrom the wrong interface.\n\nfix: move ifindex check inside the \"then\" part of the check\nfor ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. Now connected\nroutes to other ifindexes will not spill over to the \"else\"\npart for different route types anymore.\n"
    },
    {
      "commit": "cba1fab2d7e22921a03b8b886772daec8b5977c4",
      "tree": "b650afe06f6074434f50d6c24b5a6a5c17dc4d81",
      "parents": [
        "664711c1f4cc218073783ff6ce362093debd7b53"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Thu Dec 22 18:24:19 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:13:48 2012 +0400"
      },
      "message": "ospf6d: fix compiler warning messages\n\n* fix disagreement with C99 in zlog_debug calls\nFormat specifier in some zlog_debug calls for size_t values\nwas changed in order to C99 (\u0027%u\u0027 -\u003e \u0027%zu\u0027).\n\n* fix -Wsign-compare warnings\nType of return value of ospf6_packet_max() was changed.\n"
    },
    {
      "commit": "664711c1f4cc218073783ff6ce362093debd7b53",
      "tree": "5566b0c8b9d22de55772717ad6c701ea85b6241e",
      "parents": [
        "6fd16207fee6d4d09f29ed7ecf26303a7220e473"
      ],
      "author": {
        "name": "Ulrich Weber",
        "email": "ulrich.weber@sophos.com",
        "time": "Wed Dec 21 02:24:11 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 19:13:28 2012 +0400"
      },
      "message": "lib: fix some strtoul() use cases\n\n...otherwise 4294967295 is not a valid value on 32bit systems\n"
    },
    {
      "commit": "6fd16207fee6d4d09f29ed7ecf26303a7220e473",
      "tree": "fbc4a0ad11f99c5b7547e1aea47dce536c14f64d",
      "parents": [
        "4e677f52db2276b92bcc201b4379a66a83d45caa"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Tue Dec 20 20:52:31 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:38:11 2012 +0400"
      },
      "message": "ospf6d: add verifying user\u0027s privileges\n"
    },
    {
      "commit": "4e677f52db2276b92bcc201b4379a66a83d45caa",
      "tree": "9abc7790ba98ed7a865cba20c7f4fd3947dbf9e3",
      "parents": [
        "fe40bfa2e1b913e24d6b8374fd83a19d00ad7c1c"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 18 16:27:02 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:38:04 2012 +0400"
      },
      "message": "ospfd: fix bug in NSSA ABR status check\n\n* ospf_abr.c\n  * ospf_abr_nssa_am_elected(): feed \"best\" instead of \"address of best\"\n    into IPV4_ADDR_CMP(), because \"best\" is a pointer; also, mean s_addr\n    field of the structures to get better typed pointers\n"
    },
    {
      "commit": "fe40bfa2e1b913e24d6b8374fd83a19d00ad7c1c",
      "tree": "a804e85ac21df3fa613be8fed54f2c6cff830459",
      "parents": [
        "733cd9e5792648de50da3c00805aacb51cb27048"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 18 15:40:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:54 2012 +0400"
      },
      "message": "lib: address type-punned pointers in prefix_same()\n\nIPV4_ADDR_SAME() wasn\u0027t passed the right union member, this could cause\na bug due to strict-aliasing. IPV6_ADDR_SAME() case got its fix before\nthe error could be created by macro upgrade.\n"
    },
    {
      "commit": "733cd9e5792648de50da3c00805aacb51cb27048",
      "tree": "606ec20aa51f16b7a49fd9f5ede27893bee9ace9",
      "parents": [
        "de5ccb96023181765c9904ab40e645c397f536d6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Dec 17 19:39:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:42 2012 +0400"
      },
      "message": "bgpd: justify checks for IPv4 class D/E\n\n* lib/prefix.h\n  * IPV4_CLASS_DE(): make consistent with counterpart macros\n* bgp_packet.c\n  * bgp_open_receive(): test using macro instead of \"\u003e\u003d\"\n* bgp_route.c\n  * bgp_update_rsclient(): idem\n  * bgp_update_main(): idem\n"
    },
    {
      "commit": "de5ccb96023181765c9904ab40e645c397f536d6",
      "tree": "6f933ed4a727da24167cac66138418de4088d135",
      "parents": [
        "2ea1ab1c30c765cd4703794fcfaf044454fb533c"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Mon Dec 12 20:30:10 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:32 2012 +0400"
      },
      "message": "ospfd: fix packet reception for FreeBSD 10.\n\n* ospf_packet.c (ospf_recv_packet): FreeBSD, starting from version 10, will not\n  subtract the IP header size from ip_len.\n\nThis is the patch from FreeBSD\u0027s ports/net/quagga/files/patch-ospfd__ospf_packet.c,\nby Boris Kovalenko.\n"
    },
    {
      "commit": "2ea1ab1c30c765cd4703794fcfaf044454fb533c",
      "tree": "650e97a5a9e8cc1fb8666ff6ce87647df3e0e604",
      "parents": [
        "2654e43ca2eaa8d93268c9ec85ac2dd968e5fb94"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Sun Dec 11 18:48:47 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:24 2012 +0400"
      },
      "message": "zebra: ZEBRA_HELLO and mopping up routes (BZ#448)\n\nZEBRA_HELLO message is used by routing daemons to inform zebra\nwhat type of routes daemon will be announcing to zebra. Also\nzebra uses route_type_oaths array to track which daemon announces\nwhich protocol. Zebra mops up routes if daemon didn\u0027t for some\nreason.\n"
    },
    {
      "commit": "2654e43ca2eaa8d93268c9ec85ac2dd968e5fb94",
      "tree": "db36db2373e4cff83f6f7284aa8822ce5083dea6",
      "parents": [
        "d171bf58ef12ace43d48565e6870722dece1e6ed"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Dec 16 16:25:02 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:36:58 2012 +0400"
      },
      "message": "lib: fix type-punning in ip_masklen()\n\nip_masklen() was likely to return incorrect results after being compiled\nwith -fstrict-aliasing (-O2, -O3, -Os)\n"
    },
    {
      "commit": "d171bf58ef12ace43d48565e6870722dece1e6ed",
      "tree": "2cdd66f99933f4e0f0d175ce31599cbb6cbb981f",
      "parents": [
        "8c7f49d27767886b3706dfca11c1e13abeab7c63"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 04 23:21:55 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:23:24 2012 +0400"
      },
      "message": "lib: optimize ip_masklen()\n\nThe new implementation makes use of a 64KB mapping table, which makes it\npossible to compute masklen faster and with constant execution time. The\nmap also allows for additional version of the function, which can detect\nerrors in input argument.\n\nThe previous implementation had a variable cost of execution, which\ndepended on masklen in a non-linear manner, and at its worst (/31) was\n4 times slower, than the new implementation. The only case of old\nfunction just slightly outperforming the new one is /0, which is of\nlittle practical interest.\n"
    },
    {
      "commit": "13351032d1d1632dbaf540cf33b7bebbc748c415",
      "tree": "afbef258221ec2d954b6bcf3f9cf1b70c73be054",
      "parents": [
        "85136e904861775bdf6fbbbd4f0080f06e749bcb"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Tue Dec 20 20:52:31 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:28:01 2012 +0400"
      },
      "message": "ospf6d: add verifying user\u0027s privileges\n"
    },
    {
      "commit": "85136e904861775bdf6fbbbd4f0080f06e749bcb",
      "tree": "5e8321c2ab0203e6dfc38d324db82d26c07a48a7",
      "parents": [
        "7eed92b9653b09f064e827e887c29ee11122b4fe"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 18 16:27:02 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:27:53 2012 +0400"
      },
      "message": "ospfd: fix bug in NSSA ABR status check\n\n* ospf_abr.c\n  * ospf_abr_nssa_am_elected(): feed \"best\" instead of \"address of best\"\n    into IPV4_ADDR_CMP(), because \"best\" is a pointer; also, mean s_addr\n    field of the structures to get better typed pointers\n"
    },
    {
      "commit": "7eed92b9653b09f064e827e887c29ee11122b4fe",
      "tree": "967341976629f684906b35f79ae96d7855ef4b0a",
      "parents": [
        "45b341f72df6d7dd89133dfd21f43cf1cca74ce5"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 18 15:40:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:27:44 2012 +0400"
      },
      "message": "lib: address type-punned pointers in prefix_same()\n\nIPV4_ADDR_SAME() wasn\u0027t passed the right union member, this could cause\na bug due to strict-aliasing. IPV6_ADDR_SAME() case got its fix before\nthe error could be created by macro upgrade.\n"
    },
    {
      "commit": "45b341f72df6d7dd89133dfd21f43cf1cca74ce5",
      "tree": "246e9cc5029eab48ad46d51359017fe22fe6e819",
      "parents": [
        "b31d8fc3016615571f79161b8405aa4033cdfb8d"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Dec 17 19:39:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 17:27:34 2012 +0400"
      },
      "message": "bgpd: justify checks for IPv4 class D/E\n\n* lib/prefix.h\n  * IPV4_CLASS_DE(): make consistent with counterpart macros\n* bgp_packet.c\n  * bgp_open_receive(): test using macro instead of \"\u003e\u003d\"\n* bgp_route.c\n  * bgp_update_rsclient(): idem\n  * bgp_update_main(): idem\n"
    }
  ],
  "next": "b31d8fc3016615571f79161b8405aa4033cdfb8d"
}
