)]}'
{
  "log": [
    {
      "commit": "9206f9ecd5526778bf449bbb12f056d681d3b040",
      "tree": "cd11853fe47a30bb2a28838f6ad8f8d49300b4fa",
      "parents": [
        "b48cebbba0dc01ad7d1fbd7cbcc39a11e1ae972d"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Sun Dec 18 19:43:40 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Dec 18 20:21:21 2011 +0400"
      },
      "message": "fix set never used warnings\n\n(This patch was modified to leave calls to stream_getl() in place, they\nare necessary for the stream\u0027s internal pointer to advance to the\ncorrect position. -- Denis)\n\nSigned-off-by: Denis Ovsienko \u003cinfrastation@yandex.ru\u003e\n\nFix gcc warnings about varables that are set but never used.\n\n* bgpd/bgp_attr.c\n  * cluster_unintern(): ret\n  * transit_unintern(): ret\n  * bgp_attr_default_intern(): attre\n  * bgp_mp_reach_parse(): rd_high, rd_low\n* bgpd/bgp_route.c\n  * bgp_announce_check_rsclient(): bgp\n* bgpd/bgp_zebra.c\n  * zebra_read_ipv4(): ifindex\n  * zebra_read_ipv6(): ifindex\n* bgpd/bgpd.c\n  * bgp_config_write_peer(): filter\n* lib/distribute.c\n  * distribute_list_all(): dist\n  * distribute_list(): dist\n  * distribute_list_prefix_all(): dist\n  * distribute_list_prefix(): dist\n* lib/if_rmap.c\n  * if_rmap(): if_rmap\n* lib/vty.c\n  * vty_accept(): vty\n* lib/zclient.c\n  * zclient_read(): ret\n* zebra/irdp_interface.c\n  * if_group(): zi\n* zebra/rt_netlink.c\n  * kernel_read(): ret, sock\n"
    },
    {
      "commit": "bb915f5fa60de1a5b7e6089fcfc680281a590463",
      "tree": "e5ee800f9a18c1b8ebbe390e1762ad93fc778d9e",
      "parents": [
        "32ca97392057d279eeddd1aef36c1836880e8b89"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 21:11:39 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 21:11:39 2011 +0400"
      },
      "message": "bgpd: fix regression in ORF procesing (BZ#688)\n\nThis issue has been pointed out by Lou Berger and Tim Browski.\n\n* bgp_packet.c\n  * bgp_route_refresh_receive(): restore if() condition, which was\n    broken by commit fdbc8e77c88f751924299d0bc752371d5cc31116\n"
    },
    {
      "commit": "ca0512692156d5bbb902523d2f123fc89dbec1ab",
      "tree": "6dd0206cb175c3e790023f9e5d5d755b57181b0d",
      "parents": [
        "e0ca5fde7be5b5ce90dae78c2477e8245aecb8e9"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Sun Oct 04 16:21:49 2009 +0200"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:23:38 2011 +0400"
      },
      "message": "lib: add sockopt helper for setting IPV6_V6ONLY and use it\n\ngetaddrinfo returns a list of socket parameters for listening. it\nwill contain both IPv4 and IPv6 listening sockets. unless we use\nIPV6_V6ONLY on the IPv6 ones, only the socket listed first will\nwork. if the IPv4 one came first, the IPv6 one would get an\n\"Address in use\" error.\n\nthis functionality was already present for bgpd and its listening\nsockets. as it is needed for vtys as well, make it a common helper.\n\nConflicts:\n\n\tlib/sockunion.c\n"
    },
    {
      "commit": "e0ca5fde7be5b5ce90dae78c2477e8245aecb8e9",
      "tree": "0e0b32ddbed4a84a3b2de9dd7217165cb81f52fa",
      "parents": [
        "ebf08631cad8a420fc6bfb7c45af5496dc11023e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed Sep 16 01:52:42 2009 +0200"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:13:17 2011 +0400"
      },
      "message": "lib: put route_types.txt to real use\n\nthis replaces most occurences of routing protocol lists by preprocessor\ndefines from route_types.h. the latter is autogenerated from\nroute_types.txt by a perl script (previously awk). adding a routing\nprotocol now is mostly a matter of changing route_types.txt and log.c.\n\nConflicts:\n\n\tlib/route_types.awk\n"
    },
    {
      "commit": "05e54ee3df973194f2a00e3ea0b1da7bebc71fd6",
      "tree": "c07e2bbad0c55fe03eb2975b98f121de6ae55707",
      "parents": [
        "ad8d4802a3078de694539fa9bae12322fc82042f"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Dec 03 17:45:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:27:01 2011 +0400"
      },
      "message": "build: delete .cvsignore files\n"
    },
    {
      "commit": "b51146856e660bcec723f535c17dc1c38b2f6efc",
      "tree": "8f501c98b3714e1d5ed381bd4d82fece4106aa8c",
      "parents": [
        "2f658673fa477b58ed38caf94c156c95948de382"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Fri Nov 25 18:51:48 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:26:28 2011 +0400"
      },
      "message": "quagga: option \"-z\" (\"--socket \u003cpath\u003e\") added\n\nAll daemons modified to support custom path to zserv\nsocket.\n\nlib: generalize a zclient connection\n\nzclient_socket_connect added. zclient_socket and\nzclient_socket_un were hidden under static expression.\n\"zclient_serv_path_set\" modified.\n"
    },
    {
      "commit": "1add115a9cfd3a2ee33a61731008b6ece90ec61d",
      "tree": "934e618a134821e75266fef036153498c8017c9e",
      "parents": [
        "9a9446eabb8f153251d6d93d225a68ca44b436ac"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Tue Nov 22 20:15:10 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:25:54 2011 +0400"
      },
      "message": "bgpd: implement \u0027match probability\u0027 in route-maps\n\nNew clause \u0027match probability \u003cpercentage value\u003e\u0027\nwas added in route-maps (bgpd/bgp_routemap.c modified).\n"
    },
    {
      "commit": "bde12e3fd5e498a266e813a5751c1b2d21e46ca5",
      "tree": "3a3a77cc2321925f3d00d192b994a4440da129a0",
      "parents": [
        "42a7debf3c76b8001ce820e104a29d2f693c7cb7"
      ],
      "author": {
        "name": "Ulrich Weber",
        "email": "ulrich.weber@sophos.com",
        "time": "Wed Nov 16 19:32:12 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:25:25 2011 +0400"
      },
      "message": "bgp: use VTY_GET_INTEGER_RANGE() in bgp_clear()\n\nSecond patch replaces \"VTY_GET_LONG (\"AS\", as_ul, arg);\"\nby \"VTY_GET_INTEGER_RANGE (\"AS\", as, arg, 1, BGP_AS4_MAX);\"\nas done in all other code, which parses AS numbers.\n"
    },
    {
      "commit": "04d5e24d7425a52f13abcb6d2a30aa6246d837e7",
      "tree": "a90bcdbe8f51f30c94dc5f10f4b5749e6dd6094e",
      "parents": [
        "46901400a3401a4a6caa40435241b4546bb2a5c5"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 07 00:04:46 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 07 01:23:58 2011 +0400"
      },
      "message": "bgpd: cleanup privs on termination\n\nWhen doing valgrind testing, the privledges from zprivs_init() need\nto be cleaned up on exit.\n"
    },
    {
      "commit": "f04a80a5d209dbb54f6fec5d0149b7c0e489d29e",
      "tree": "aaf8378930b524b1bfc9c5326d738a172c255b4b",
      "parents": [
        "fb01f87f4f50744206222343a780721af19fe56c"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Dec 06 14:51:10 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 06 15:03:00 2011 +0400"
      },
      "message": "bgpd: store nexthop info for redistributed IPV6 routes\n\nBGP was ignoring nexthop info for static and other redistributed\nroutes for IPv6.  Build extra attribute info to store the nexthop.\nSee also:\n  https://bugzilla.vyatta.com/show_bug.cgi?id\u003d6073\n"
    },
    {
      "commit": "ce0af6ff5a4f200035ed4134da72a67f49a21dd6",
      "tree": "1f085a210596f3f5875030c92ba3252933102149",
      "parents": [
        "1ffe5e794c3cd4a2ef84cac937d377de89b721f8"
      ],
      "author": {
        "name": "Oleg A. Arkhangelsky",
        "email": "sysoleg@yandex.ru",
        "time": "Sat Dec 03 15:18:19 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Dec 03 15:18:19 2011 +0400"
      },
      "message": "bgpd: fix memory leak for extra attributes\n\nthis fixes commit b881c7074bb698aeb1b099175b325734fc6e44d2\n"
    },
    {
      "commit": "2fbd6f5a62f654c59aec5e1707c859d6ed79c6b0",
      "tree": "cc70afc89da575cdb739d7e1723632e7b75b654c",
      "parents": [
        "1727d2e2b939c8670d0f0e0d1a0e5eb0a8be2135"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Feb 02 20:20:35 2010 +0100"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 19:42:05 2011 +0400"
      },
      "message": "bgpd: remove unused function bgp_bind_address\n\nbgp_bind_address is replaced with sockunion_bind.\n"
    },
    {
      "commit": "1727d2e2b939c8670d0f0e0d1a0e5eb0a8be2135",
      "tree": "3bdfda661f96113d61eae25059608d468a8ea4cc",
      "parents": [
        "17e52061bacec93e84324b23382e5ec61e1f16d0"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Feb 02 20:18:23 2010 +0100"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Nov 21 19:41:59 2011 +0400"
      },
      "message": "bgpd: fix update-source for IPv6 (BZ#548)\n\nif update-source was given as interface name, bgpd was unconditionally\ntrying to bind to an IPv4 address from that interface.\n\nchange function to find the best-matching (number of address bits)\nsame-family address on the interface.\n"
    },
    {
      "commit": "3cf1288bfd855e339fe2283c79a3ef3746e61737",
      "tree": "bbc6600328c20861512c4e26928ffce4cf9c5878",
      "parents": [
        "5c88f19d5b166c6afa8a9b8501badb785afa553b"
      ],
      "author": {
        "name": "Dylan Hall",
        "email": "dylan@deedums.com",
        "time": "Thu Oct 27 15:28:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Nov 15 21:35:11 2011 +0400"
      },
      "message": "bgpd: fix \"nexthop-local unchanged\" (BZ#350)\n"
    },
    {
      "commit": "5c88f19d5b166c6afa8a9b8501badb785afa553b",
      "tree": "98261a13d284bb6b3fe0028a3d17e50c763fc324",
      "parents": [
        "4de148e5d6f6f7885b2c0952a236a3bc3ec36250"
      ],
      "author": {
        "name": "Chris Luke",
        "email": "chrisy@flirble.org",
        "time": "Tue Oct 18 17:26:51 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Nov 15 20:57:02 2011 +0400"
      },
      "message": "bgpd: justify capabilities for TOS setting\n\nTo set the TOS bits on TCP connections, platforms that restrict\ncapabilities need the priv level to be raised before the sockopt\nis set, and this requires the ZCAP_NET_ADMIN priv.\n\n* bgp_main.c: update _caps_p to include ZCAP_NET_ADMIN\n* bgp_network.c\n  * bgp_connect(): request ZPRIVS_RAISE/ZPRIVS_LOWER\n  * bgp_listener(): request ZPRIVS_RAISE earlier\n"
    },
    {
      "commit": "1758dbaa3b69bd6e95fb501c40f044f751557e76",
      "tree": "7021223a0aea1c052e831f1bc044bc3c49ad09ab",
      "parents": [
        "267551879e57a5c590f9e12b3a7d6985b28b3dac"
      ],
      "author": {
        "name": "Sergey Y. Afonin",
        "email": "asy@altlinux.ru",
        "time": "Thu Oct 27 17:01:11 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Nov 15 20:45:17 2011 +0400"
      },
      "message": "bgpd: revised fix to --dryrun (BZ#622)\n"
    },
    {
      "commit": "267551879e57a5c590f9e12b3a7d6985b28b3dac",
      "tree": "aeb0f826f3ea541de99d0988794f1454ab3b9e35",
      "parents": [
        "b4cd2421518be7e18046e974e25b9bf4cf769bd2"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Oct 26 19:34:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Oct 26 19:38:49 2011 +0400"
      },
      "message": "bgpd: fix 2 more cases of length error reporting\n\n* bgp_attr.c (bgp_attr_originator_id, bgp_attr_cluster_list): provide\n  required arguments to bgp_attr_malformed()\n"
    },
    {
      "commit": "b4cd2421518be7e18046e974e25b9bf4cf769bd2",
      "tree": "43a94afcebc8b878040f771de5f0e542bb6bc440",
      "parents": [
        "bbb04bf3bb03be27fbf17b6b3ee903b168201cf0"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Oct 22 22:32:26 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Oct 22 22:32:26 2011 +0400"
      },
      "message": "bgpd: check AGGREGATOR attr flags (BZ#678)\n\n* bgp_attr.c\n  * bgp_attr_aggregator(): check Optional/Transitive flag bits\n"
    },
    {
      "commit": "bbb04bf3bb03be27fbf17b6b3ee903b168201cf0",
      "tree": "8db00c5a6db16254146e064bfb350f536cc90e02",
      "parents": [
        "abc384f85b622471ef5ba6c86acc540856da05cf"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Oct 18 14:20:04 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Oct 19 17:28:01 2011 +0400"
      },
      "message": "bgpd: fix more regressions in attr flag checks\n\nCommit 05a4936b713b9882171d0f7fb20b8439df23939e fixed some of the\nattributes involved, but not all. This commit should do it.\n\n* bgp_attr.c\n  * bgp_attr_originator_id()\n  * bgp_attr_cluster_list()\n  * bgp_mp_reach_parse()\n  * bgp_mp_unreach_parse()\n"
    },
    {
      "commit": "abc384f85b622471ef5ba6c86acc540856da05cf",
      "tree": "5bb225c251c3667b12e7b5cb08dd1455dde5b072",
      "parents": [
        "565b828dc00cafd477dd69ce15f0f551ece67710"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Oct 18 13:55:07 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Oct 18 13:55:07 2011 +0400"
      },
      "message": "bgpd: use bgp_attr_malformed()\n\nSome of the recent attribute flags/length checks copied from QRE use\nbgp_notify_send_with_data() directly, but master branch assumes\nusing bgp_attr_malformed().\n\n* bgp_attr.c\n  * bgp_attr_med()\n  * bgp_attr_local_pref()\n  * bgp_attr_atomic()\n  * bgp_attr_originator_id()\n  * bgp_attr_cluster_list()\n  * bgp_mp_reach_parse()\n  * bgp_mp_unreach_parse()\n"
    },
    {
      "commit": "565b828dc00cafd477dd69ce15f0f551ece67710",
      "tree": "e1d5c6c38f89b6d022339df14c9b5224de7c0ca9",
      "parents": [
        "f8627ff1ef7642c8ee4758b1f046ef0d166dfbec"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 10 21:08:33 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 19:07:02 2011 +0400"
      },
      "message": "bgpd: add flag checks for MP_(UN)REACH_NLRI\n\n* bgp_attr.[ch]\n  * bgp_mp_reach_parse(): add extra arguments and a uniform flag\n    check block\n  * bgp_mp_unreach_parse(): idem\n  * bgp_attr_parse(): provide extra arguments\n* bgp_mp_attr_test.c\n  * parse_test(): justify respective calls\n"
    },
    {
      "commit": "f8627ff1ef7642c8ee4758b1f046ef0d166dfbec",
      "tree": "60fa75de6532991858f718aebfcabc19a745f081",
      "parents": [
        "0b83044b91d7ea50824cfd803d77213b9ff38ed9"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 10 16:52:20 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 19:03:56 2011 +0400"
      },
      "message": "bgpd: fix spelling of CLUSTER_LIST\n"
    },
    {
      "commit": "0b83044b91d7ea50824cfd803d77213b9ff38ed9",
      "tree": "a18f7841fa039c1236ef5ea4770c0f0a5b81d3b1",
      "parents": [
        "d595b566bca1de8b026c469a31ae50f2aee11781"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Sep 30 15:12:17 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 19:03:31 2011 +0400"
      },
      "message": "bgpd: check CLUSTER_LIST attribute flags\n\n* bgp_attr.c\n  * bgp_attr_cluster_list(): accept extra argument, add checks for\n    \"optional\", \"transitive\" and \"partial\" bits, log each error\n    condition independently\n  * bgp_attr_parse(): provide extra arguments\n"
    },
    {
      "commit": "d595b566bca1de8b026c469a31ae50f2aee11781",
      "tree": "1572e36687c8666c8f0c8519addc94f9d2c886af",
      "parents": [
        "566b36ebf903fd873c974ba34c19097d8fb48ce4"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Sep 30 15:08:54 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 19:02:55 2011 +0400"
      },
      "message": "bgpd: check ORIGINATOR_ID attribute flags\n\n* bgp_attr.c\n  * bgp_attr_originator_id(): accept extra argument, add checks for\n    \"optional\", \"transitive\" and \"partial\" bits, log each error\n    condition independently\n  * bgp_attr_parse(): provide extra arguments\n"
    },
    {
      "commit": "6d0732c8abad7ace509d033a41814ea03a3a1b16",
      "tree": "d20c537d0e16cb5245047d8ecd9990201a4fb3b6",
      "parents": [
        "a5b228b3792937c93b589938a2545b9311b7938e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Sep 28 14:23:35 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Oct 17 18:59:19 2011 +0400"
      },
      "message": "IPv6 transport class suppport\n\nIPv6 supports the same concept of differentiated service for routing\nprotocols as IPv4, but like too many things, the standards committee\ndecided that having two names for the same thing wasn\u0027t good enough and\nintroduced a third more generic term transport class.\n\nThe socket option to set transport class works the same as IPv4, but the\narguments are different.\n\n* lib/sockopt.[ch]\n  * setsockopt_ipv6_tclass(): new function\n* bgpd/bgp_network.c\n  * bgp_connect(): set socket option\n  * bgp_listener(): set socket option\n* ospf6d/ospf6_network.c\n  * ospf6_set_transport_class(): new function\n  * ospf6_serv_sock(): set socket option\n* ripngd/ripngd.c\n  * ripng_make_socket(): set socket option\n"
    },
    {
      "commit": "a5b228b3792937c93b589938a2545b9311b7938e",
      "tree": "59c22c60531b0fe2a4ceeb0d8cc1070af1312a9d",
      "parents": [
        "21cc76941abc60b5b5ece0a71ace0b69d6f4572c"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Oct 12 13:54:21 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Oct 12 13:59:09 2011 +0400"
      },
      "message": "bgpd: fix regression in improved attr flag checks\n\nCommit 2febf323411c1aed9d7694898f852ce2ef36a7e5 assumed every flag\nbit except optional/transitive/partial unset, which at times could\nnot be true for \"extended length\" bit.\n\n* bgp_attr.c\n  * bgp_attr_origin(): exclude BGP_ATTR_FLAG_EXTLEN from comparison\n  * bgp_attr_nexthop(): idem\n  * bgp_attr_med(): idem\n  * bgp_attr_local_pref(): idem\n  * bgp_attr_atomic(): idem\n"
    },
    {
      "commit": "21cc76941abc60b5b5ece0a71ace0b69d6f4572c",
      "tree": "a81b361e0771c7a3bcddebad35158edad00f219f",
      "parents": [
        "a624cae2b210a0e81c80c473f86b73e2be169962"
      ],
      "author": {
        "name": "Peter Pentchev",
        "email": "roam@ringlet.net",
        "time": "Mon Sep 12 16:30:31 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Oct 08 20:17:21 2011 +0400"
      },
      "message": "bgpd: fix parsing of graceful restart cap. (#663)\n\n\"While setting up a testbed, I ran across a little problem in the\nparsing of the \"graceful restart\" BGP capability that resulted in\nQuagga not actually activating it for the peer in question - when\nthe peer sent a single AFI/SAFI block.\"\n\n* bgp_open.c\n  * bgp_capability_restart(): actually process the last AFI/SAFI block\n"
    },
    {
      "commit": "a624cae2b210a0e81c80c473f86b73e2be169962",
      "tree": "b229e5943b651405d5b2277ecb5fbcdc1a747354",
      "parents": [
        "b84b62dfb6ee9daf46c9e4c2c372b179f33be44c"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Oct 08 13:54:48 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Oct 08 14:18:00 2011 +0400"
      },
      "message": "bgpd: improve attr length error handling (BZ#679)\n\n* bgp_attr.c\n  * bgp_attr_parse(): provide extra argument to bgp_attr_aggregator()\n  * bgp_attr_local_pref(): use bgp_notify_send_with_data()\n  * bgp_attr_atomic(): idem\n  * bgp_attr_aggregator(): idem\n\nConflicts:\n\n\tbgpd/bgp_attr.c\n"
    },
    {
      "commit": "b84b62dfb6ee9daf46c9e4c2c372b179f33be44c",
      "tree": "052307acd804e98d224bc4d3246f16c9d02fbad9",
      "parents": [
        "2d42e68aa032ed2f11471aee444935918d35c8bb"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 15:47:25 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Sep 30 14:11:13 2011 +0400"
      },
      "message": "bgpd: improve attr flags checks\n\nDo not check each of the Optional/Transitive/Partial attribute\nflag bits, when their only valid combination is known in advance,\nbut still perform bit-deep error message logging. This change\nassumes unused (low-order) 4 bits of the flag octet cleared.\n\n* bgp_attr.c\n  * bgp_attr_origin(): rewrite check\n  * bgp_attr_nexthop(): idem\n  * bgp_attr_med(): idem\n  * bgp_attr_local_pref(): idem\n  * bgp_attr_atomic(): idem\n\nConflicts:\n\n\tbgpd/bgp_attr.c\n"
    },
    {
      "commit": "2d42e68aa032ed2f11471aee444935918d35c8bb",
      "tree": "a58e0b96bdb43fb6ed66a94afc0d44b737ca4c89",
      "parents": [
        "214bcaa13e092d9fff8f233e62ba28ca7eefbc43"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 15:35:39 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Sep 30 10:32:02 2011 +0400"
      },
      "message": "bgpd: ignore 4 bits of attribute flags byte\n"
    },
    {
      "commit": "214bcaa13e092d9fff8f233e62ba28ca7eefbc43",
      "tree": "eb429544fd7d6727f35cd3fc24b6426a6d577eb3",
      "parents": [
        "bc3443ebf032b5fcc9e0ccb94641e4e899cd17d8"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Sep 24 13:20:43 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Sep 30 10:30:36 2011 +0400"
      },
      "message": "bgpd: add missing \"partial\" flag checks (BZ#676)\n\nORIGIN handling function used to have \"partial\" bit check and recent\ncommits added it for NEXT_HOP, MULTI_EXIT_DISC and ATOMIC_AGGREGATE\ncases. This commit adds \"partial\" check for AS_PATH and LOCAL_PREF\ncases, which should leave attributes 1 through 6 inclusive completely\ncovered with attribute flags checks.\n\n* bgp_attr.c\n  * bgp_attr_origin(): use bit-by-bit checks for better diagnostics\n  * bgp_attr_aspath(): add flag check\n  * bgp_attr_local_pref(): idem\n\nConflicts:\n\n\tbgpd/bgp_attr.c\n"
    },
    {
      "commit": "bc3443ebf032b5fcc9e0ccb94641e4e899cd17d8",
      "tree": "06d6c8b912958c989ba59e45349e17a3f8d973ac",
      "parents": [
        "0a28130d35bbba47faf47bf9451ba0eb195fcbb7"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 22 12:48:14 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Sep 30 01:24:35 2011 +0400"
      },
      "message": "bgpd: improve NEXT_HOP attribute checks (BZ#680)\n\n* lib/prefix.h\n  * IPV4_CLASS_DE(): new helper macro\n* bgp_attr.c\n  * bgp_attr_nexthop(): add check for \"partial\" bit, refresh flag error\n    reporting, explain meaning of RFC4271 section 6.3 and implement it\n\nConflicts:\n\n\tbgpd/bgp_attr.c\n"
    },
    {
      "commit": "0a28130d35bbba47faf47bf9451ba0eb195fcbb7",
      "tree": "94bcda95ba12a50a81aa7ea893d809ba237b2262",
      "parents": [
        "42e6d745d105018a9469dabad65bd4cf942dcf3c"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jul 17 19:33:21 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 29 22:19:08 2011 +0400"
      },
      "message": "bgpd: rename SAFI 3 according to RFC4760\n\n- SAFI value 3 is reserved.  It was assigned by RFC 2858 for a use\n  that was never fully implemented, so it is deprecated by this\n  document.\n\n* zebra.h: rename macro\n* bgp_fsm.c: (bgp_graceful_restart_timer_expire,\n  bgp_graceful_stale_timer_expire, bgp_stop, bgp_establish): update\n* bgpd.c: (peer_nsf_stop): update\n* bgp_open.c: (bgp_capability_vty_out): SAFI 3 isn\u0027t a recognized case\n  any more\n"
    },
    {
      "commit": "42e6d745d105018a9469dabad65bd4cf942dcf3c",
      "tree": "9e653fe2e44d2e3f8510fcb8451931e3b6153ebc",
      "parents": [
        "beb1ca03bfe707d6d1fcad21fcbaa63af49c82f8"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jul 14 12:36:19 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 29 22:14:11 2011 +0400"
      },
      "message": "bgpd: more SAFI fixes\n\n(with resolved conflict in bgpd/bgp_packet.c)\n\nTwo macros resolving to the same integer constant broke a case block and\na more thorough merge of BGP_SAFI_VPNV4 and BGP_SAFI_VPNV6 was\nperformed.\n\n* bgpd.h: MPLS-labeled VPN SAFI is AFI-independent, switch to single\n* macro\n* bgp_capability_test.c: update test data\n* bgp_mp_attr_test.c: idem\n* bgp_route.c: (bgp_maximum_prefix_overflow, bgp_table_stats_vty) update\n  macro and check conditions (where appropriate)\n* bgp_packet.c: (bgp_route_refresh_send, bgp_capability_send,\n  bgp_update_receive, bgp_route_refresh_receive): idem\n* bgp_open.c: (bgp_capability_vty_out, bgp_afi_safi_valid_indices,\n  bgp_open_capability_orf, bgp_open_capability): idem\n* bgp_attr.c: (bgp_mp_reach_parse, bgp_packet_attribute,\n  bgp_packet_withdraw): idem\n"
    },
    {
      "commit": "beb1ca03bfe707d6d1fcad21fcbaa63af49c82f8",
      "tree": "78ffcd5ec7e9bb80e92c108f5ca0268ec6cff262",
      "parents": [
        "48f99b0c2bfed8d3880732d188e1d5964f575ee4"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jul 13 16:53:13 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 29 22:07:54 2011 +0400"
      },
      "message": "bgpd: fix SAFI for for MPLS labeled VPN-IPv6\n\n* bgpd.h: change value of BGP_SAFI_VPNV6 to 128 (RFC4659, BZ#659)\n* bgp_route.c: (bgp_table_stats_vty) fix length argument to strncmp()\n"
    },
    {
      "commit": "4b4e07d2d83bdbe46ccf4b4a2fd2aa3842370098",
      "tree": "dde2abd7124f6d89e7d4695482f1abb8f4a0a447",
      "parents": [
        "51abba509a0997f05427a8acbe74dd07d8d6026e"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Wed Sep 21 23:13:22 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:46:04 2011 +0400"
      },
      "message": "bgpd: don\u0027t be confused by \"unspecific\" subcode in the NOTIFY message.\n\n* bgp_debug.c (bgp_notify_open_msg, bgp_notify_update_msg,\n  bgp_notify_cease_msg, bgp_notify_capability_msg): add messages for\n  \"unspecific\" subcode.\n"
    },
    {
      "commit": "e6ec1c3648cf3304c1a36341487659aadb9dce95",
      "tree": "de881144ddce2cdf272a36b0c8e94030b4379b90",
      "parents": [
        "7ccf5e59c13773097dd551b8a7384b99b7f46927"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Sep 10 21:50:53 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:43:15 2011 +0400"
      },
      "message": "bgpd: spelling\n"
    },
    {
      "commit": "7ccf5e59c13773097dd551b8a7384b99b7f46927",
      "tree": "205ee10231ebf765cf3097c5578c78c0d302a268",
      "parents": [
        "171c9a996dd75a8b9aa596288c974f9ac0fbc5d6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Sep 10 16:53:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:43:03 2011 +0400"
      },
      "message": "bgpd: spelling\n"
    },
    {
      "commit": "9eba2ada189597fcb39c806bbbed414fecf20623",
      "tree": "59a59ae323a245579c24880d90332070538304aa",
      "parents": [
        "2cfadf09a810e3b660a47a1eb898d0d7c8813c08"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 20 14:43:50 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:21:27 2011 +0400"
      },
      "message": "bgpd: check ATOMIC_AGGREGATE attr flags (BZ#678)\n\n* bgp_attr.c\n  * bgp_attr_atomic(): accept extra argument, add checks for\n    \"optional\", \"transitive\" and \"partial\" bits, log each error\n    condition independently\n  * bgp_attr_parse(): provide extra argument\n"
    },
    {
      "commit": "2cfadf09a810e3b660a47a1eb898d0d7c8813c08",
      "tree": "135d9df7af95fed3ffaaa380a22c4a93897f5263",
      "parents": [
        "0ea968d21f194b3960a73aa47a5b06f160632907"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 20 10:54:25 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:19:44 2011 +0400"
      },
      "message": "bgpd: check MULTI_EXIT_DISC attr flags (BZ#677)\n\n* bgp_attr.c\n  * bgp_attr_med(): add checks for \"optional\", \"transitive\" and\n    \"partial\" bits, log each error condition independently\n"
    },
    {
      "commit": "0ea968d21f194b3960a73aa47a5b06f160632907",
      "tree": "61f7a046e2a1124f55d8ce9134984371cfd64ab1",
      "parents": [
        "1212dc1961e81d5ef6e576b854e979ea29284f51"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Sep 19 16:30:47 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:15:56 2011 +0400"
      },
      "message": "bgpd: check LOCAL_PREF attribute flags (BZ#674)\n\n* bgp_attr.c\n  * bgp_attr_local_pref(): accept extra argument, add checks for\n    \"optional\" and \"transitive\" bits, log each error condition\n    independently\n  * bgp_attr_parse(): provide extra argument\n"
    },
    {
      "commit": "1212dc1961e81d5ef6e576b854e979ea29284f51",
      "tree": "bc27c64ae0463c1787d641f2946b3e64f24126d3",
      "parents": [
        "d68ab1009f42c5ed62f7c6b0b5700f5f0469a35b"
      ],
      "author": {
        "name": "heasley",
        "email": "heas@shrubbery.net",
        "time": "Mon Sep 12 13:27:52 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:07:07 2011 +0400"
      },
      "message": "bgpd: add useful notification logs (BZ#616)\n\n* bgp_packet.c\n  * bgp_notify_send_with_data(): add calls to zlog_info()\n"
    },
    {
      "commit": "d68ab1009f42c5ed62f7c6b0b5700f5f0469a35b",
      "tree": "155fac87e799841406a0785115a0e0fa4c5a0709",
      "parents": [
        "5fdaa04e635fdef7deca9bdfe1be4b60ec90add6"
      ],
      "author": {
        "name": "heasley",
        "email": "heas@shrubbery.net",
        "time": "Tue Jul 12 20:09:18 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:05:30 2011 +0400"
      },
      "message": "bgpd: consistent log msg format (BZ#565)\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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "838bbde0426e562132d22fb11932ea413aebf928",
      "tree": "cce6161171685df013c932beb8366f55bebc417c",
      "parents": [
        "5195e17f8b49dc720252526a21afd7840240137b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 08 14:05:32 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 16:53:08 2010 +0000"
      },
      "message": "bgpd: Simplify process queue init\n\n* bgp_route.c: (bgp_process_queue_init) rsclient wasn\u0027t getting all the\n  same things initialised as the main queue. Simplify to make it more robust.\n"
    },
    {
      "commit": "b729294c8c5c6f2af8ddf6cfbea2374b6faabe9d",
      "tree": "a259da6db36b4174f35a638a9db10b2508d2b62c",
      "parents": [
        "5195e17f8b49dc720252526a21afd7840240137b"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 08 18:51:37 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 08 18:51:37 2010 +0300"
      },
      "message": "bgpd: fix community-list error message spelling\n\n* bgp_vty.c: (community_list_perror, show_ip_community_list_arg,\n  show_ip_extcommunity_list_arg) fix spelling\n"
    },
    {
      "commit": "213b6cd9fb24381563d6d44c7ddc4700abfae676",
      "tree": "9ea3fcf3e773144f136c47db3236ecdd5d9a5e12",
      "parents": [
        "08a7a91646a1ee317c402b421e3a7036a640bcf4"
      ],
      "author": {
        "name": "Vladimir L Ivanov",
        "email": "wawa@yandex-team.ru",
        "time": "Thu Oct 21 14:59:54 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Oct 21 14:59:54 2010 +0400"
      },
      "message": "bgpd: fix printed value of last-update timestamp\n\n* bgp_route.c: (route_vty_out_detail) calculate time value\n    in a way, which works regardless of monotonic clock\n    being used or not\n"
    },
    {
      "commit": "4c9641ba4df276080c670e03f65b1d442660a50f",
      "tree": "15085df8068d8a3864224937eaa407c0484ff57f",
      "parents": [
        "11d3fe9b9a327b3218a76b2b9001ace50c08de8c"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Thu Jul 22 13:20:55 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Wed Oct 06 12:33:05 2010 -0400"
      },
      "message": "bgpd, lib: adopt afi_t and safi_t in several places\n\n* bgpd/bgp_attr.c, bgpd/bgp_open.h, bgpd/bgp_route.c, lib/prefix.c,\n  lib/prefix.h: Various integer types were being used where, if we\n  had strict type checking, afi_t and safi_t would be required.\n\nSigned-off-by: G.Balaji \u003cbalajig81@gmail.com\u003e\n(cherry picked from commit c8af35ffa2dc79ff7d7ff00b1b61f1f50a100ab6)\n"
    },
    {
      "commit": "d3ddb22e902bc4dc175ed6974515f6e14d9be931",
      "tree": "e0f0fa91e7814c4814dbbd60352cc073496d71f7",
      "parents": [
        "cf8a831bcb53b60a7b5c4b26dda7646ebc7506d8"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 10:47:49 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 10:47:49 2010 -0400"
      },
      "message": "Set from even if binfo-\u003eextra is NULL.\n\nbgpd/bgp_packet.c:bgp_update_packet(): When extracting the peer, don\u0027t\n  fail to extract it because \"binfo-\u003eextra\" is NULL.  While one should\n  certainly avoid dereferencing binfo-\u003eextra, that\u0027s not a good reason\n  not to use binfo-\u003epeer.\n\nFixes https://bugzilla.quagga.net/show_bug.cgi?id\u003d497.\nPatch by Eric Sobocinksi.\n"
    },
    {
      "commit": "cddb8112b80fa9867156c637d63e6e79eeac67bb",
      "tree": "c8d8b4cb9d0ba1c2a7681c6da580874cf5a2b48e",
      "parents": [
        "d64379e8f3c0636df53ed08d5b2f1946cfedd0e3"
      ],
      "author": {
        "name": "Chris Hall",
        "email": "chris.hall@highwayman.com",
        "time": "Mon Aug 09 22:31:37 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 09 22:31:37 2010 +0400"
      },
      "message": "bgpd: fix handling of AS path data\n\n* bgpd/bgp_aspath.c\n  * assegments_parse(): add handling of AS4_PATH input, update bounds\n    checks, add check for AS segment type\n  * aspath_parse(): add handling of AS4_PATH input, expect\n    assegments_parse() to do length checking\n  * aspath_empty(): update for the new function prototype\n* bgpd/bgp_aspath.h: ditto\n* tests/aspath_test.c: ditto\n* bgpd/bgp_attr.c\n  * bgp_attr_aspath(): add handling of AS4_PATH input, update flags\n    checks, change returned type\n  * bgp_attr_as4_path(): discard, superseded by bgp_attr_aspath()\n  * bgp_attr_parse(): update respectively\n"
    },
    {
      "commit": "d64379e8f3c0636df53ed08d5b2f1946cfedd0e3",
      "tree": "c34d8f271fe3be61cdfd23327ef73f2ede966924",
      "parents": [
        "e26873fd8f0c4306eff65de94a45b4114fc81b98"
      ],
      "author": {
        "name": "Chris Hall",
        "email": "chris.hall@highwayman.com",
        "time": "Fri May 14 16:38:39 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri May 14 16:38:39 2010 +0400"
      },
      "message": "bgpd: tighten bounds checking in RR ORF msg reader\n\n* bgp_packet.c: (bgp_route_refresh_receive) add validation of\n  \"Length\" (RFC5292) field value, check input stream bounds\n  each time bytes are pulled from it\n"
    },
    {
      "commit": "65957886bfd0dd9d95360d8b015781fc82cc09be",
      "tree": "71352e214bd59277a50a43779bb2cbafbace6cc3",
      "parents": [
        "2cd754de60210748e61069fed2c9d4086d24c21e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 15 16:22:10 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 15 16:22:10 2010 +0300"
      },
      "message": "bgp: use monotonic clock for time of day\n\nBGP uses time() to get system time of day; but that value\nfluctuates with time adjustments from NTP. This can cause premature\nflapping of peer sessions and other failures.\n\nUse the system monotonic clock supported by Quagga thread library\nto avoid issue.\n\nSee: http://bugzilla.vyatta.com/show_bug.cgi?id\u003d4467\n\n* bgpd/bgp_fsm.c\n  * bgp_uptime_reset(): dismiss function\n* bgpd/bgpd.c\n  * bgp_clock(): new function\n* bgpd/bgp_damp.c\n  * bgp_reuse_timer(): employ bgp_clock() instead of time(NULL)\n  * bgp_damp_withdraw(): idem\n  * bgp_damp_update(): idem\n  * bgp_damp_scan(): idem\n  * bgp_damp_info_vty(): idem\n  * bgp_damp_reuse_time_vty(): idem\n* bgpd/bgp_fsm.c\n  * bgp_routeadv_timer(): idem\n  * bgp_stop(): idem\n  * bgp_establish(): idem\n* bgpd/bgp_packet.c\n  * bgp_update_receive(): idem\n* bgpd/bgp_route.c\n  * bgp_update_rsclient(): idem\n  * bgp_update_main(): idem\n  * bgp_static_update_rsclient(): idem\n  * bgp_static_update_main(): idem\n  * bgp_static_update_vpnv4(): idem\n  * bgp_aggregate_route(): idem\n  * bgp_aggregate_add(): idem\n  * bgp_redistribute_add(): idem\n* bgpd/bgp_snmp.c\n  * bgpPeerTable(): idem\n  * bgpTrapEstablished(): idem\n  * bgpTrapBackwardTransition(): idem\n* bgpd/bgpd.c\n  * peer_create(): idem\n  * peer_uptime(): idem\n  * bgp_master_init(): idem\n"
    },
    {
      "commit": "da88ea82acd70adf3bab641b2300ee24319da422",
      "tree": "81151de47e55067c4b7d9cd718c0e6c8ab07aa50",
      "parents": [
        "2c2397059d4d4177ed4636c08aa476a138425dc8"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 17 13:14:28 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 17 13:14:28 2009 +0300"
      },
      "message": "bgpd: code cleanup\n\n* bgpd/bgp_aspath.c\n  * ashash: only used in one file, make static\n  * aspath_count_numas(): dead code, sayonara\n* bgpd/bgpd.c\n  * peer_nsf_stop(): only used in one file, make static\n* bgpd/bgp_packet.h\n  * bgp_capability_receive(): add missing prototype for a\n    global function\n"
    },
    {
      "commit": "9e4ca89c3678431560a8259c75f8b5874d83d351",
      "tree": "178ca0de4c6fe5ecba90b51c5fb29c3e0b720cdb",
      "parents": [
        "cc2dd9280c4456586080d1cf4537d26c02fa9a36"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 11:57:05 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 10 11:57:05 2009 +0300"
      },
      "message": "bgpd: compile warnings cleanup\n\n* bgpd/bgp_fsm.c\n  * bgp_clearing_completed(): only used in one file, can be static\n* bgpd/bgp_packet.c\n  * afi2str(): sayonara\n  * safi2str(): sayonara\n* bgpd/bgp_route.c\n  * bgp_distance_reset(): sayonara\n* bgpd/bgp_zebra.c\n  * bgp_ifindex_by_nexthop(): sayonara\n"
    },
    {
      "commit": "1352ef32d70dcc102074814de63b5d08e591dd2d",
      "tree": "a0a4a40bf9a7726914f76cfa3a108529c7cc59df",
      "parents": [
        "3949a60c350fea947d2701e2fe709b174ae7af16"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 09 14:43:17 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 09 14:43:17 2009 +0300"
      },
      "message": "lib: move check_bit into prefix common code\n\nMake one version of check prefix bit, and put it inline\nwith proper prototype. This gets rid of some macro\u0027s and also some\nassert() that can never happen on a non-broken compiler.\n\n* bgpd/bgp_table.c\n  * CHECK_BIT(): sayonara\n  * check_bit(): sayonara\n  * SET_LINK(): sayonara\n  * set_link(): make use of prefix_bit() instead of check_bit()\n  * bgp_node_match(): idem\n  * bgp_node_lookup(): idem\n  * bgp_node_get(): idem\n* lib/prefix.h\n  * prefix_bit(): new inline version of check_bit()\n* lib/table.c\n  * CHECK_BIT(): sayonara\n  * check_bit(): sayonara\n  * SET_LINK(): sayonara\n  * set_link(): make use of prefix_bit() instead of check_bit()\n  * route_node_match(): idem\n  * route_node_lookup(): idem\n  * route_node_get(): idem\n* ospf6d/ospf6_lsdb.c\n  * CHECK_BIT(): sayonara\n  * ospf6_lsdb_lookup_next(): make use of prefix_bit() instead of\n    CHECK_BIT()\n  * ospf6_lsdb_type_router_head(): idem\n  * ospf6_lsdb_type_head(): idem\n* ospf6d/ospf6_route.c\n  * CHECK_BIT(): sayonara\n  * ospf6_route_match_head() make use of prefix_bit() instead of\n  * CHECK_BIT()\n"
    },
    {
      "commit": "2eb445e1c22e36d07e2dbfd302ff438c4190b9fe",
      "tree": "82372e9d6fc630758fcf265cbdfdf3b826699cbd",
      "parents": [
        "e6f148e6e06a37a65afb322eca6a3298b8ade8d2"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Dec 04 17:32:54 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Dec 04 17:32:54 2009 +0300"
      },
      "message": "bgpd: work around warning in assegments_parse()\n"
    },
    {
      "commit": "d1c21cabdbeeb4d12049f39579c602686eb94927",
      "tree": "aaaee477b15999c34175c80f6b3b1e99d2887150",
      "parents": [
        "c4cf095e95ae66c1a7b87bca95e61e50fec746ee"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Aug 25 10:18:15 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 14:53:42 2009 +0100"
      },
      "message": "bgpd: fix md5 set on listen sockets\n\n* bgp_network.c: (bgp_md5_set) Missing piece from earlier listener change\n  did not get ported from Vyatta code into upstream.  The list\n  listener_sockets changed from (int *) to (struct bgp_listener *).\n"
    },
    {
      "commit": "5bd5881838c22e075c3d0c245a8952a55e9dca38",
      "tree": "b0f011eef51409e492ef107aace3fefca4530f77",
      "parents": [
        "62bed38d2f2c7317b5c97285d9fb935c5fe681e1"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 06 21:05:47 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 13 10:19:24 2009 +0100"
      },
      "message": "bgp: missing pieces from listener patch\n\n* bgp_network.c: (bgp_accept) The code in current git will crash as part of\n  the revised listener code is missing.  The new listener thread code passes\n  a pointer to a bgp_listener structure, not the bgp pointer.  The old code\n  always got a NULL for bgp pointer, so that is now hard coded.\n"
    },
    {
      "commit": "62bed38d2f2c7317b5c97285d9fb935c5fe681e1",
      "tree": "8fd4189ed9927b258cfc2fdbb20fcd48cbd08e9b",
      "parents": [
        "3106a03215f5f09c2c0d427fa706fff52ef3cb37"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 06 21:07:23 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 13 09:59:58 2009 +0100"
      },
      "message": "bgp: compiler warning fix\n\n* bgp_filter.h: Gcc complains the function prototype is not correct because\n  the function argument is using old K\u0026R style.\n"
    },
    {
      "commit": "9d878775ff5c05afea522b60f014b88822d19e1b",
      "tree": "f1c7c45de602e2ac7ccd2c3c309e6568beff3af7",
      "parents": [
        "5372510d109d87b94d6094d095dd4e0e02eaf32a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Aug 05 16:25:16 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Aug 05 16:25:16 2009 +0100"
      },
      "message": "bgpd: Fix mistakes in applying \u0027allow inbound connections to non-default view\u0027\n\n* bgpd.c: (peer_lookup_with_open) Bodged application of previous patch\n  meant the second loop around bgp-\u003epeer wasn\u0027t included in the loop\n  around bm-\u003ebgp as it was supposed to be. Fix..\n"
    },
    {
      "commit": "4a5f432fa07f33da5ad05d18e4ba81d57b44af8e",
      "tree": "d8728f36ff64a1ba39d83de6aabfd3d4dc661447",
      "parents": [
        "66bed4f4f0235c1eb6edb0a2f6bd4aaf47e5a7f8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 30 15:55:24 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 30 15:55:24 2009 +0100"
      },
      "message": "[bgpd] delete erroneous extra brace..\n"
    },
    {
      "commit": "66bed4f4f0235c1eb6edb0a2f6bd4aaf47e5a7f8",
      "tree": "17488e5dc6eb4cc575f2aa006bfd87ec9c815222",
      "parents": [
        "3de4277ba9b25ff03710d7c004bf708accffd5c7"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Tue Jul 28 11:26:14 2009 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 30 15:55:14 2009 +0100"
      },
      "message": "bgpd: Workaround for invalid MBGP next hop\n\n* bgp_attr.c: (bgp_mp_reach_parse) There are some interoperability issues\n  for MBGP (particularly IPv4 multicast NLRI) between different\n  implementations.  In order to get some next hops to install correctly in\n  the BGP tables, it appears to be necessary to copy the multiprotocol next\n  hop into the base next hop field.  This is related to differences in RFC\n  2283 and RFC 2858.\n"
    },
    {
      "commit": "2158ad2359a370dd349f4543a2d5d535bb5a8770",
      "tree": "afaf6922eecc2f155016e229d516b4e2487c7dbe",
      "parents": [
        "fc4dc59d08589a887ac33a70d946eb7905541f5f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:10:55 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:10:55 2009 +0100"
      },
      "message": "bgpd/trivial: Fix indentation in previous\n"
    },
    {
      "commit": "fc4dc59d08589a887ac33a70d946eb7905541f5f",
      "tree": "b142a18a28ebf915757aafe6bf5a139ec0f112bb",
      "parents": [
        "3117b5c47df044f8b2197fff60641075394fdce5"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jul 28 17:54:35 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:06:39 2009 +0100"
      },
      "message": "bgpd: Allow inbound connections to non-default view\n\n* bgpd.c: (peer_lookup) Search through all BGP instances for matches, not just\n  the default instance, if no specific instance is given.\n  (peer_lookup_with_open) same.\n"
    },
    {
      "commit": "3117b5c47df044f8b2197fff60641075394fdce5",
      "tree": "0a25f9376ab96e21d9e161f9c9e156fbd5641d53",
      "parents": [
        "cb9e0ceec988a059dd2269ebc54722c01afb7cca"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jul 28 17:50:00 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 17:50:00 2009 +0100"
      },
      "message": "bgpd: fd leak in bgpd\n\n* bgp_fsm.c: I have found an fd leak in bgpd that is caused by the \u0027new\u0027\n  Clearing state.  I\u0027ve been seeing it from hold timer failures, but it can\n  also be triggered by other things.\n\n  When Hold_Timer_expired fires in Established state, a notify is sent and\n  BGP_Stop event queued.  The fsm then transitions into Clearing state.\n  That is the problem; When the BGP_Stop event is serviced, the state table\n  says to ignore it while in Clearing.  Thus bgp_stop is not called and the\n  fd leaks.  Previously the peer would be in Idle state, which correctly\n  handles the BGP_Stop event.\n\n  Fix by making bgp_stop safe to call from Clearing state, without losing\n  ClearingCompleted events, and then ensuring it is called prior to\n  transition from Clearing-\u003eIdle.\n"
    },
    {
      "commit": "736d440845c8c0cfdb56b86254887bab5fc7f3f5",
      "tree": "e1b7f27c18b03494509e9b9ef0a694b726630418",
      "parents": [
        "ca87e1d37b3c30648e9bacb476a3c89729512f6d"
      ],
      "author": {
        "name": "Vasilis Tsiligiannis",
        "email": "b_tsiligiannis@silverton.gr",
        "time": "Mon Jul 20 01:59:10 2009 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 15:02:07 2009 +0100"
      },
      "message": "bgpd: Delete AS_CONFED_SEQUENCE when prepending an AS_SEQUENCE type segment\n\nAS_CONFED_SEQUENCE segment should always be deleted when prepending\n(e.g. with a route-map) an AS_SEQUENCE segment to an AS path. Otherwise,\nAS_CONFED_SEQUENCE will not be deleted later when updating EBGP peers (since\nit is not the leftmost segment) and will leak outside the confederation.\n"
    },
    {
      "commit": "ca87e1d37b3c30648e9bacb476a3c89729512f6d",
      "tree": "d0911b72e7d4c3c94c88a65233ee8a7fa8a4c950",
      "parents": [
        "30d205909c5a81cc306b161c16abff0fd7f566a7"
      ],
      "author": {
        "name": "Vasilis Tsiligiannis",
        "email": "b_tsiligiannis@silverton.gr",
        "time": "Mon Jul 20 01:28:35 2009 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 14:49:33 2009 +0100"
      },
      "message": "bgpd: Implement BGP confederation error handling (RFC5065, Par. 5)\n\nThis patch implements BGP confederation error handling in Quagga as described\nin RFC5065, paragraph 5.\n\n* bgp_aspath.c: (aspath_confed_check, aspath_left_confed_check) new functions\n* bgp_attr.c: (bgp_attr_aspath_check) apply previous and NOTIFY if there\u0027s\n  a problem.\n"
    },
    {
      "commit": "d023aec49f70156d2ed894a8fba65bcfa221ff02",
      "tree": "00ab5d69481c212b6ed2f350c5a5c7f430ef9208",
      "parents": [
        "03621955d8ab0ea30024bd8fc83afda8e48db712"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Jul 21 16:27:21 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 10:04:38 2009 +0100"
      },
      "message": "bgpd: start listener on first instance\n\nStart BGP listener only after first instance is started.  This helps the\nsecurity if BGP is not used but daemon is started.  It also addresses some\nissues like MD5 not working on listener unless IPV6 configured (because\nlistener was not in list); as well as compiler warnings.\n\n* bgp_network.c: (bgp_listener) listen socket creation consolidated here\n  (bgp_socket) Use bgp_listener\n* bgpd.c: (bgp_get) call bgp_socket on creation of first struct bgp.\n  (bgp_init) remove bgp_socket call.\n* memtypes.c: Add MTYPE_BGP_LISTENER\n"
    },
    {
      "commit": "03621955d8ab0ea30024bd8fc83afda8e48db712",
      "tree": "0df6f032806430fdd7d70b5317779d146e9d6f58",
      "parents": [
        "78b31d5cf511c400d7f09158a3d8863f1bf63c2a"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Jul 21 16:27:20 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 10:04:38 2009 +0100"
      },
      "message": "bgpd: peer action table static/const\n\nbgpd.c: (various tables) only used in one place and are immutable.\n"
    }
  ],
  "next": "9a1a331d63ae9db1912a1edb48c5c176454562f8"
}
