)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "9a1a331d63ae9db1912a1edb48c5c176454562f8",
      "tree": "d6da5f9ce7e6760f59a7fda7ceeb89877a3148c5",
      "parents": [
        "5b40b1b57e1fad1caf579e032adf4e111128e486"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jul 27 12:27:55 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jul 27 12:27:55 2009 +0100"
      },
      "message": "[bgpd] Restore ability of \u0027neighbor ... update-source\u0027 to take interface name\n\n* bgp_vty.c: (BGP_UPDATE_SOURCE_STR) Restore ability to accept arbitrary\n  interface names for the \u0027neighbor ... update-source\u0027 command - shouldn\u0027t\n  have been deleted.\n  (BGP_UPDATE_SOURCE_STR) Add help for same.\n"
    },
    {
      "commit": "638b70ba9893705bb3268aa00c25b8cb0e060b32",
      "tree": "51eaabdcfba4bfd4b5aa54c7a1b20298c9e2fc2a",
      "parents": [
        "a294365797da8b72e51507cbf92dbc6940e5103b"
      ],
      "author": {
        "name": "Vasilis Tsiligiannis",
        "email": "b_tsiligiannis@silverton.gr",
        "time": "Mon Jul 20 01:25:16 2009 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 14:44:41 2009 +0100"
      },
      "message": "[bgp] Fix nexthop reachability check on confederations\n\n* bgp_route.c: (bgp_update_main) Nexthop reachability should be checked for\n  confederations too in case a prefix is received from more than one\n  confederation peers.\n"
    },
    {
      "commit": "a294365797da8b72e51507cbf92dbc6940e5103b",
      "tree": "618569bcf8a1a5d4f7a0a8192692c5d3e27bbb02",
      "parents": [
        "e8eb000e15e2bbe63467d7c056f2b21b72ba7bd6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 14:02:04 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 14:02:04 2009 +0100"
      },
      "message": "[bgpd] fix typo made by paul in previous commit\n"
    },
    {
      "commit": "e8eb000e15e2bbe63467d7c056f2b21b72ba7bd6",
      "tree": "3e21cb6d66b0e1b8caaacc687ad30b83607d33a3",
      "parents": [
        "e7cc3b383e5e9190aa7784554c605a3a661ebe2b"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Feb 17 12:14:23 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 13:15:32 2009 +0100"
      },
      "message": "[bgpd] Avoid zombie accepted peer entries\n\nCurrently, when accepting the connection, it can be left as zombie, when the\npeer just initiates a connection, but never sends data (and the TCP\nconnection end packets are lost).  This happens because for accepted\nconnections a temporary new peer entry is created until OPEN message is\nexchanged, and this temporary peer entry does not get the hold time\nparameter set at all.\n\n* bgp_network.c: (bgp_accept) Set hold time and keepalive values for ACCEPT\n  peers.\n"
    },
    {
      "commit": "e7cc3b383e5e9190aa7784554c605a3a661ebe2b",
      "tree": "3f7b254d2e47805d4a39c43bd0c6f459e512732a",
      "parents": [
        "67b9467f6cad5097a3e4c6e49348be4d6c17a5bb"
      ],
      "author": {
        "name": "Nick Hilliard",
        "email": "nick@inex.ie",
        "time": "Tue Mar 17 22:14:25 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 11:34:27 2009 +0100"
      },
      "message": "[bgpd] Small buffer overrun in bgp_clear_node_queue_init\n\n* bgp_route.c: (bgp_clear_node_queue_init) fix buffer\n  overrun.\n"
    },
    {
      "commit": "228da42898c4f7bd72d9c1ee4135108e8d40d860",
      "tree": "a780ed018bfeb97c174958f188c770c74a48bad9",
      "parents": [
        "54a15182e05ca757db3bb90a4135e9f8fd3c84f2"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sat Jul 18 05:44:03 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jul 19 18:28:08 2009 +0100"
      },
      "message": "[bgpd] Stability fixes including bugs 397, 492\n\nI\u0027ve spent the last several weeks working on stability fixes to bgpd.\nThese patches fix all of the numerous crashes, assertion failures, memory\nleaks and memory stomping I could find.  Valgrind was used extensively.\n\nAdded new function bgp_exit() to help catch problems.  If \"debug bgp\" is\nconfigured and bgpd exits with status of 0, statistics on remaining\nlib/memory.c allocations are printed to stderr.  It is my hope that other\ndevelopers will use this to stay on top of memory issues.\n\nExample questionable exit:\n\n  bgpd: memstats: Current memory utilization in module LIB:\n  bgpd: memstats:  Link List                     :          6\n  bgpd: memstats:  Link Node                     :          5\n  bgpd: memstats:  Hash                          :          8\n  bgpd: memstats:  Hash Bucket                   :          2\n  bgpd: memstats:  Hash Index                    :          8\n  bgpd: memstats:  Work queue                    :          3\n  bgpd: memstats:  Work queue item               :          2\n  bgpd: memstats:  Work queue name string        :          3\n  bgpd: memstats: Current memory utilization in module BGP:\n  bgpd: memstats:  BGP instance                  :          1\n  bgpd: memstats:  BGP peer                      :          1\n  bgpd: memstats:  BGP peer hostname             :          1\n  bgpd: memstats:  BGP attribute                 :          1\n  bgpd: memstats:  BGP extra attributes          :          1\n  bgpd: memstats:  BGP aspath                    :          1\n  bgpd: memstats:  BGP aspath str                :          1\n  bgpd: memstats:  BGP table                     :         24\n  bgpd: memstats:  BGP node                      :          1\n  bgpd: memstats:  BGP route                     :          1\n  bgpd: memstats:  BGP synchronise               :          8\n  bgpd: memstats:  BGP Process queue             :          1\n  bgpd: memstats:  BGP node clear queue          :          1\n  bgpd: memstats: NOTE: If configuration exists, utilization may be expected.\n\nExample clean exit:\n\n  bgpd: memstats: No remaining tracked memory utilization.\n\nThis patch fixes bug #397: \"Invalid free in bgp_announce_check()\".\n\nThis patch fixes bug #492: \"SIGBUS in bgpd/bgp_route.c:\nbgp_clear_route_node()\".\n\nMy apologies for not separating out these changes into individual patches.\nThe complexity of doing so boggled what is left of my brain.  I hope this\nis all still useful to the community.\n\nThis code has been production tested, in non-route-server-client mode, on\na linux 32-bit box and a 64-bit box.\n\nRelease/reset functions, used by bgp_exit(), added to:\n\n  bgpd/bgp_attr.c,h\n  bgpd/bgp_community.c,h\n  bgpd/bgp_dump.c,h\n  bgpd/bgp_ecommunity.c,h\n  bgpd/bgp_filter.c,h\n  bgpd/bgp_nexthop.c,h\n  bgpd/bgp_route.c,h\n  lib/routemap.c,h\n\nFile by file analysis:\n\n* bgpd/bgp_aspath.c: Prevent re-use of ashash after it is released.\n\n* bgpd/bgp_attr.c: #if removed uncalled cluster_dup().\n\n* bgpd/bgp_clist.c,h: Allow community_list_terminate() to be called from\n  bgp_exit().\n\n* bgpd/bgp_filter.c: Fix aslist-\u003ename use without allocation check, and\n  also fix memory leak.\n\n* bgpd/bgp_main.c: Created bgp_exit() exit routine.  This function frees\n  allocations made as part of bgpd initialization and, to some extent,\n  configuration.  If \"debug bgp\" is configured, memory stats are printed\n  as described above.\n\n* bgpd/bgp_nexthop.c: zclient_new() already allocates stream for\n  ibuf/obuf, so bgp_scan_init() shouldn\u0027t do it too.  Also, made it so\n  zlookup is global so bgp_exit() can use it.\n\n* bgpd/bgp_packet.c: bgp_capability_msg_parse() call to bgp_clear_route()\n  adjusted to use new BGP_CLEAR_ROUTE_NORMAL flag.\n\n* bgpd/bgp_route.h: Correct reference counter \"lock\" to be signed.\n  bgp_clear_route() now accepts a bgp_clear_route_type of either\n  BGP_CLEAR_ROUTE_NORMAL or BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n* bgpd/bgp_route.c:\n  - bgp_process_rsclient(): attr was being zero\u0027ed and then\n    bgp_attr_extra_free() was being called with it, even though it was\n    never filled with valid data.\n\n  - bgp_process_rsclient(): Make sure rsclient-\u003egroup is not NULL before\n    use.\n\n  - bgp_processq_del(): Add call to bgp_table_unlock().\n\n  - bgp_process(): Add call to bgp_table_lock().\n\n  - bgp_update_rsclient(): memset clearing of new_attr not needed since\n    declarationw with \"\u003d { 0 }\" does it.  memset was already commented\n    out.\n\n  - bgp_update_rsclient(): Fix screwed up misleading indentation.\n\n  - bgp_withdraw_rsclient(): Fix screwed up misleading indentation.\n\n  - bgp_clear_route_node(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n  - bgp_clear_node_queue_del(): Add call to bgp_table_unlock() and also\n    free struct bgp_clear_node_queue used for work item.\n\n  - bgp_clear_node_complete(): Do peer_unlock() after BGP_EVENT_ADD() in\n    case peer is released by peer_unlock() call.\n\n  - bgp_clear_route_table(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.  Use\n    struct bgp_clear_node_queue to supply data to worker.  Add call to\n    bgp_table_lock().\n\n  - bgp_clear_route(): Add support for BGP_CLEAR_ROUTE_NORMAL or\n    BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n  - bgp_clear_route_all(): Use BGP_CLEAR_ROUTE_NORMAL.\n\n  Bug 397 fixes:\n\n    - bgp_default_originate()\n    - bgp_announce_table()\n\n* bgpd/bgp_table.h:\n  - struct bgp_table: Added reference count.  Changed type of owner to be\n    \"struct peer *\" rather than \"void *\".\n\n  - struct bgp_node: Correct reference counter \"lock\" to be signed.\n\n* bgpd/bgp_table.c:\n  - Added bgp_table reference counting.\n\n  - bgp_table_free(): Fixed cleanup code.  Call peer_unlock() on owner if\n    set.\n\n  - bgp_unlock_node(): Added assertion.\n\n  - bgp_node_get(): Added call to bgp_lock_node() to code path that it was\n    missing from.\n\n* bgpd/bgp_vty.c:\n  - peer_rsclient_set_vty(): Call peer_lock() as part of peer assignment\n    to owner.  Handle failure gracefully.\n\n  - peer_rsclient_unset_vty(): Add call to bgp_clear_route() with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n* bgpd/bgp_zebra.c: Made it so zclient is global so bgp_exit() can use it.\n\n* bgpd/bgpd.c:\n  - peer_lock(): Allow to be called when status is \"Deleted\".\n\n  - peer_deactivate(): Supply BGP_CLEAR_ROUTE_NORMAL purpose to\n    bgp_clear_route() call.\n\n  - peer_delete(): Common variable listnode pn.  Fix bug in which rsclient\n    was only dealt with if not part of a peer group.  Call\n    bgp_clear_route() for rsclient, if appropriate, and do so with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n  - peer_group_get(): Use XSTRDUP() instead of strdup() for conf-\u003ehost.\n\n  - peer_group_bind(): Call bgp_clear_route() for rsclient, and do so with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n  - bgp_create(): Use XSTRDUP() instead of strdup() for peer_self-\u003ehost.\n\n  - bgp_delete(): Delete peers before groups, rather than after.  And then\n    rather than deleting rsclients, verify that there are none at this\n    point.\n\n  - bgp_unlock(): Add assertion.\n\n  - bgp_free(): Call bgp_table_finish() rather than doing XFREE() itself.\n\n* lib/command.c,h: Compiler warning fixes.  Add cmd_terminate().  Fixed\n  massive leak in install_element() in which cmd_make_descvec() was being\n  called more than once for the same cmd-\u003estrvec/string/doc.\n\n* lib/log.c: Make closezlog() check fp before calling fclose().\n\n* lib/memory.c: Catch when alloc count goes negative by using signed\n  counts.  Correct #endif comment.  Add log_memstats_stderr().\n\n* lib/memory.h: Add log_memstats_stderr().\n\n* lib/thread.c: thread-\u003efuncname was being accessed in thread_call() after\n  it had been freed.  Rearranged things so that thread_call() frees\n  funcname.  Also made it so thread_master_free() cleans up cpu_record.\n\n* lib/vty.c,h: Use global command_cr.  Add vty_terminate().\n\n* lib/zclient.c,h: Re-enable zclient_free().\n"
    },
    {
      "commit": "54a15182e05ca757db3bb90a4135e9f8fd3c84f2",
      "tree": "1d29ccce46cb362ae3b2b28b2a46a3dc017d5bf1",
      "parents": [
        "62c9f504bdd4b09df6cf677e96367f3b31ef9dea"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sat Jul 18 05:42:34 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jul 19 17:36:59 2009 +0100"
      },
      "message": "[bgpd] Fix compiler warnings related to MD5\n\nThis patch fixes:\n\nbgp_network.c: In function \u0027bgp_md5_set\u0027:\nbgp_network.c:107: warning: cast from pointer to integer of different size\nbgp_network.c: In function \u0027bgp_socket\u0027:\nbgp_network.c:447: warning: cast to pointer from integer of different size\n"
    },
    {
      "commit": "fd35b948dbb35674cd9ded431f94b59aeced40cc",
      "tree": "c236a99b492b19943916e0c117b0a2461333b422",
      "parents": [
        "3fa3f957e70f594cc2c1cac03644ddf48554c178"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 16 19:27:32 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jul 17 11:19:46 2009 +0100"
      },
      "message": "[bgpd] Bug #533: Fix crash with copy/pasted commands, inc \u0027no bgp ...\u0027\n\n* bgpd.c: Removal of (struct bgp *) from the master list was being left to\n  bgp_free time.  This meant there was a window of time between bgp_delete\n  and refcounts hitting 0 (e.g.  routes to be processed) where bgp_lookup\u0027s\n  could return a deleted (struct bgp *).\n\n  (bgp_delete) This is the logical place where a (struct bgp *) should lose\n  its visibility, so move the deletion from the bgp-master list to here,\n  from bgp_free.\n\n  Many thanks to Fritz Reichmann for his thorough debugging of the problem\n  and testing of fixes and Chris Caputo for his further analysis.\n"
    },
    {
      "commit": "650f76c2e1b0b12e1c46fdd3be22c5f505245d83",
      "tree": "43322ab134a9e79ee65ca0300f2106f690b5c925",
      "parents": [
        "439c52f19007badffc6707673121f5a76784e728"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 25 18:06:31 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 26 16:12:19 2009 +0100"
      },
      "message": "[bgpd] Log a debug/update warning if filters are configured but don\u0027t exist\n\n* bgp_route.c: (bgp_{input,output}_filter) Log a debug warning if a route is\n  received or sent and a filter name is configured for a prefix, as or\n  distribute list but none is found - guaranteed configuration mistake.\n"
    },
    {
      "commit": "2a71e9ce89c6f76c099dea67dddbe8da454d9de7",
      "tree": "8c53b6694e72751330fab48c02a793d67f2df24c",
      "parents": [
        "014b670e02cc1f38e8e4e786269fc1787412f9b7"
      ],
      "author": {
        "name": "Tomasz Pala",
        "email": "gotar@pld-linux.org",
        "time": "Wed Jun 24 21:36:50 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 24 21:36:50 2009 +0100"
      },
      "message": "[bgpd] Add \u0027show ip bgp view WORD neighbors IP (advertised|received)-routes\u0027\n\n* bgp_route.c: Was missing these commands.\n"
    },
    {
      "commit": "014b670e02cc1f38e8e4e786269fc1787412f9b7",
      "tree": "f0fa74e181d556d2d83d8db480fab097da72bafa",
      "parents": [
        "d13c3b4fcf802f904ef47ad82fdc9763fc704fdf"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jun 23 21:10:45 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jun 23 21:10:45 2009 +0400"
      },
      "message": "[bgpd] review 32-bit AS-path hotfix for 0.99.12\n\nThe patch by Chris Caputo, which was used to prepare 0.99.12\nrelease, consists of three parts:\n\n1. memory allocation fix itself\n2. fix for warnings about constant variables\n3. fix for printf format specs (%d was used instead of %u)\n\nIt was confirmed later, that:\na. a much simpler bugfix was available for memory allocation\nb. committed version of the bugfix wasn\u0027t optimal CPU-wise\n\nAt this point I consider reasonable to revert the allocation\nportion of that patch and to replace it with the shorter\nversion, which is:\n\n-#define ASN_STR_LEN (5 + 1)\n+#define ASN_STR_LEN (10 + 1)\n\nOther two parts of Mr. Caputo\u0027s patch remain intact.\n"
    },
    {
      "commit": "50aef6f3b0e36b56cfa9f3d374be0c1d25c30c45",
      "tree": "5dce97de6229713c6c209cbb72abc1093fa1be58",
      "parents": [
        "6e79f8bba438823d84b7464a9acc1e6fc9126a27"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 23 06:06:49 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:25:20 2009 +0100"
      },
      "message": "Fix \"show ip bgp dampened-paths\" garbage output.\n\n* bgpd/bgp_damp.c: Make bgp_damp_reuse_time_vty() accept a buffer and\n  length, rather than returning a local var buffer whose contents can get\n  trounced.  Remove duplicate BGP_UPTIME_LEN define.\n* bgpd/bgp_damp.h: bgp_damp_reuse_time_vty() prototype change.\n* bgpd/bgp_route.c: Provide bgp_damp_reuse_time_vty() with a buffer and\n  length.  Remove duplicate BGP_UPTIME_LEN define.\n\nThis problem was noticed in 2005...\n\n  http://hibernia.jakma.org/~paul/patches/quagga-test.diff\n\n...but the fix didn\u0027t make it into the code.\n\nSigned-off-by: Chris Caputo \u003cccaputo@alt.net\u003e\n"
    },
    {
      "commit": "2b35ae41c2c5d39801c943fa740c72fc15613141",
      "tree": "b72600ce7970f5a62a344fd7fed3f5e53779b7a2",
      "parents": [
        "b60668d092f1778395b6c10b406059b8cbf235b8"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 23 05:34:29 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:21:40 2009 +0100"
      },
      "message": "Fixes to RFC2385/MD5 BGP\n\n* bgpd/bgp_network.c: Fix MD5 listen in IPv4 version of bgp_socket() by\n  adding listen socket to listen_sockets list so that MD5 passwords can\n  get set.\n* lib/sockopt.c: (sockopt_tcp_signature) Fix bogus \"% Error while applying\n  TCP-Sig to session(s)\" / \"can\u0027t set TCP_MD5SIG option\" startup error\n  messages by not returning error when there isn\u0027t one.\n"
    },
    {
      "commit": "f7e0db80693aea7f5fd3d8d4f00e97347c8d0ba5",
      "tree": "b920d5309513724158ea477ae2c8b33190287e53",
      "parents": [
        "c514adc61d56c3fb6fe5119a7b4b55c79a9c065d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jun 22 11:30:47 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jun 22 11:30:47 2009 +0100"
      },
      "message": "[bgpd] Fix \u0027update-source\u0027 command: It doesn\u0027t accept interface names\n\n* bgp_vty.c: BGP_UPDATE_SOURCE_STR define should only specify IP addresses,\n  the underlying mechanisms won\u0027t do anything useful with interface names.\n  Fix bug #527.\n"
    },
    {
      "commit": "25f45887abf320401745dd433c4e82bfd6db5d4d",
      "tree": "a52835a9976899d1bef9ec7bff9eaa4972a6fa45",
      "parents": [
        "c77cffdd69bf08ed54e390a3485cbd5024836a9a"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Mon Jan 12 16:06:12 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:01:16 2009 +0100"
      },
      "message": "[configure] add configure support for PCRE Posix library\n\nDebian tried unsuccessfully to build with libpcreposix.  This adds proper\nsupport to autoconf/configure.ac for it.\n\nBased on the patch by C.J.  Adams-Collier in bug #483.\n\nbgpd/bgp_{regex,routemap}.h: Pull in PCRE POSIX header if available.\n"
    },
    {
      "commit": "8f5abac1c3f5ad18561cad560bd42b50d2419d94",
      "tree": "5d126bdeed0e115b53c4cd23a992a5355797d663",
      "parents": [
        "730394d9a33dceb0699c5268afd1049aa225c5c7"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:16:34 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:31 2009 +0100"
      },
      "message": "[BGP/cleanup] make message list in bgp_open const\n"
    },
    {
      "commit": "730394d9a33dceb0699c5268afd1049aa225c5c7",
      "tree": "e4dae4fb06d63bf3008154303d32e70eb8c0a88c",
      "parents": [
        "e9dc9f247a668ece1b983cc964fec852c737bedd"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:17:09 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:31 2009 +0100"
      },
      "message": "[BGP/cleanup] make community hash table static\n"
    },
    {
      "commit": "e9dc9f247a668ece1b983cc964fec852c737bedd",
      "tree": "e8b865d140f9942655cd6d1190a87f3bade807ca",
      "parents": [
        "ffa4e2c4712ddcb5085971aaf001f030723ee307"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:19:31 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:30 2009 +0100"
      },
      "message": "[BGP/cleanup] make some damp function static\n"
    },
    {
      "commit": "ffa4e2c4712ddcb5085971aaf001f030723ee307",
      "tree": "c678f391c427079ec667413f63bc26d5b422c4d7",
      "parents": [
        "372b3c70a090359fe401dbb5e7c34ff8ae09f757"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:28:11 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:30 2009 +0100"
      },
      "message": "[BGP/cleanup] make ecommunity variables/functions local\n"
    },
    {
      "commit": "372b3c70a090359fe401dbb5e7c34ff8ae09f757",
      "tree": "ca77aa42206f79326327fe061af90370e9811180",
      "parents": [
        "ce0db9cb11c0bc2e7f89a7d042e50afa495556b4"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:29:41 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:30 2009 +0100"
      },
      "message": "[BGP/cleanup] main program cleanup\n\nCheck result of daemon() call to fix warning\nMake local variables static\n"
    },
    {
      "commit": "b2d933f8280a4d9eee8a9330282e705514a96a03",
      "tree": "c3ffbd21046c1ca3ba19f1535c39c6707847745d",
      "parents": [
        "01b7ce2db345429d7abc0446840f1d5c303c80af"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:48:03 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:29 2009 +0100"
      },
      "message": "[bgpd/cleanup] make message lists read only\n"
    },
    {
      "commit": "01b7ce2db345429d7abc0446840f1d5c303c80af",
      "tree": "2f20f0bc1f2fa5c7fdf7bc8e4b7993a6b80000c4",
      "parents": [
        "8e4c09307d9eafbbbf7fbffb3d3483287cea169b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 12:34:43 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:29 2009 +0100"
      },
      "message": "[bgpd] add comment that bgp_capability_receive is exported for unit-tests\n"
    },
    {
      "commit": "fc52f95373b1dc0bec5f5a474bafa362b02a63ae",
      "tree": "da4d569501ac14f2712b89052b01e1a138094570",
      "parents": [
        "65d3fbb4835e268b1683b88b12e101c6592b1948"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 09:48:55 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:29 2009 +0100"
      },
      "message": "[cleanup] Fix compile warnings\n\nFix printf format warning and make capability table \u0027const static\u0027\n"
    },
    {
      "commit": "9bddac4bd50034c713940ad77cebfbb7f3cd123a",
      "tree": "2d41a091918fd6d4ca433493a7c9ec9d50eaf343",
      "parents": [
        "fda1d3e033f98c7e34ccdaead27e8df39af12a85"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 09:59:51 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:28 2009 +0100"
      },
      "message": "[bgpd/cleanup] BGP make attribute variables local\n\nMessage lists can be read-only, and hash tables are local to this\ncode.\n"
    },
    {
      "commit": "fda1d3e033f98c7e34ccdaead27e8df39af12a85",
      "tree": "636aef72183a2f9dc34305d02545a74fb48907ca",
      "parents": [
        "0088b5dc55a91d27e572484e61df71b8ca2eddf4"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:02:27 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:28 2009 +0100"
      },
      "message": "[bgpd/cleanup] Make BGP FSM table read-only static\n\nThe finite state machine table is immutable.\n"
    },
    {
      "commit": "0088b5dc55a91d27e572484e61df71b8ca2eddf4",
      "tree": "f93714f98d12890f961794cd026b6bf2de75105e",
      "parents": [
        "dde7258666fd73878b4cc10b4b5b7c07e9be049e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu May 21 08:51:03 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:28 2009 +0100"
      },
      "message": "[bgpd] reference count the BGP instance\n\nWhen a BGP instance is deleted with lots of routes and neighbors\nit is possible for the peer rsclient queue to run after\nbgp_delete has been called. This would lead to bgpd crashing,\nsee https://bugzilla.vyatta.com/show_bug.cgi?id\u003d3436\n\nThe fix is to add reference counting to the BGP instance and defer\nactual freeing until all references are gone.\n\nThis patch also fixes a memory leak where the self-reference\npeer instance was being created but never freed.\n\nThe check in bgp_clear_route is no longer valid because it is possible\nfor it to be called when peer is in Deleted state during cleanup.\n"
    },
    {
      "commit": "dde7258666fd73878b4cc10b4b5b7c07e9be049e",
      "tree": "9275ed492957279eaf8bfa0c02fc141247309c09",
      "parents": [
        "9607d98cb04e5dff34cb2f6fb6434455c6841ab8"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 08 15:19:07 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:28 2009 +0100"
      },
      "message": "[bgpd] Make declarations match\n\nThese variables are const.\n"
    },
    {
      "commit": "7fc626de5f618133ad2a478d13defa3a110b89ea",
      "tree": "432ff0e4672eabc2ec6b0dcffc22dcc0aee532c8",
      "parents": [
        "66e5cd87194ae6fdd51061a91b4698bc0a652f6b"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Dec 01 11:10:34 2008 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:10:29 2009 +0100"
      },
      "message": "[cleanup] Make command nodes static\n\nThe cmd_nodes used to configure vty, can mostly be static so\n(basic data hiding 101).\n"
    },
    {
      "commit": "66e5cd87194ae6fdd51061a91b4698bc0a652f6b",
      "tree": "659d31f9a7dfb8d9ad9a51f37ff0853054a45399",
      "parents": [
        "cedd7f2fa6823bca9ddcfb062f97ed83b11a80dd"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Feb 09 10:14:16 2009 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:09:03 2009 +0100"
      },
      "message": "[cleanup] functions taking no args should be declared with void args\n\nUse Ansi-C prototypes rather than old K\u0026R method of declaring\nfunction without arguments\n"
    },
    {
      "commit": "393deb9bd663361e6b110d579a8b1d4c22667068",
      "tree": "e93ebf2f57bf92ff7a9cd045764b3cdbb99a07e5",
      "parents": [
        "3453a7122c1d585ad789ed0f63deb90cc5e89fae"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Aug 18 14:13:29 2008 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:07:49 2009 +0100"
      },
      "message": "[cleanup] Convert XMALLOC/memset to XCALLOC\n\nSimple conversion of XMALLOC/memset to XCALLOC\n"
    },
    {
      "commit": "10819ecee3ced786162b68310cf172aacda18857",
      "tree": "0680aa68e15af0c5bb1080e5d30fc446fac3d119",
      "parents": [
        "6e0989e113d9e2268e58cfe29922e971793c1d06"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jun 09 15:15:33 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jun 09 15:15:33 2009 +0400"
      },
      "message": "[bgpd] Fixed as-path prepend/exclude ASN handling\n\n - aspath_gettoken(): use as_t to fix 4-byte ASN scanning (bug #484)\n - set_aspath_prepend_cmd(): use CMD_AS_RANGE in message to match\n   actual range\n - no_set_aspath_prepend_val_cmd(): idem\n - set_aspath_exclude_cmd(): idem\n - no_set_aspath_exclude_val_cmd(): idem\n"
    },
    {
      "commit": "6e0989e113d9e2268e58cfe29922e971793c1d06",
      "tree": "624de12c4ba2a53c92a38ac6ee0170d108137c37",
      "parents": [
        "0be8dfb2a95f41f100982085595b7c7505127018",
        "e6b6a56419ed5a2e8cf2cb11eab340d7b0d28055"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 19:43:51 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 19:43:51 2009 +0100"
      },
      "message": "Merge remote branch \u0027origin/master\u0027\n"
    },
    {
      "commit": "0be8dfb2a95f41f100982085595b7c7505127018",
      "tree": "add7218b0c518ac0cd276c74fe700b5ed1f26762",
      "parents": [
        "42176e6b01c9ca2b2725952684b2d7792468e861"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 02 18:40:07 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 18:45:10 2009 +0100"
      },
      "message": "[snmp] Compiler warning fixes for when \"--enable-snmp\" is configured.\n\nCompiled on 32-bit and 64-bit linux gcc 4.1.2 platforms.\nNo run-time testing on 32-bit and limited run-time testing on 64-bit.\n"
    },
    {
      "commit": "acde4b861333d799b50d6e8a53214abc0d17ede3",
      "tree": "e6fa104c7bfb45043aec82c9cab3941cb09459bd",
      "parents": [
        "5012bc3d217f4fff5759745ee689869fb5224b41"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jun 02 14:28:16 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 14:28:16 2009 +0100"
      },
      "message": "[bgp] Fix crash on SIGHUP, deref of freed workqueues\n\n* lib/workqueue.c: free-ing workqueues had never been tested obviously,\n  queue\u0027s thread was not being stopped\n* bgpd/bgpd.c: null out freed workqueues, to prevent acting on freed\n  workqueues\n"
    },
    {
      "commit": "e6b6a56419ed5a2e8cf2cb11eab340d7b0d28055",
      "tree": "4d514a0b67f7a94a1213c74cb9a865593a072791",
      "parents": [
        "2bbd71aace61a70a631c1d0c0bce75fbc76ee1d1"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Mon Jun 01 20:20:36 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Mon Jun 01 20:20:36 2009 +0400"
      },
      "message": "[trivia] Fixed typos in communities text (#334)\n"
    },
    {
      "commit": "8178b2e156d2263015d7d981590a0899f2cb4c05",
      "tree": "3dcf31e5c9a3f094c0f2b24a9a3f552ca51d1d2c",
      "parents": [
        "5012bc3d217f4fff5759745ee689869fb5224b41"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "schorr@ti82.(none)",
        "time": "Fri May 29 09:15:20 2009 -0400"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "schorr@ti82.(none)",
        "time": "Fri May 29 09:15:20 2009 -0400"
      },
      "message": "[bgpd] 64-bit bugfix in community_del_val by Jeremy Jackson \u003cjerj@coplanar.net\u003e\n\n* bgpd/bgp_community.c: (community_del_val) Fix bug in memcpy that was\n  using the wrong size on architectures where a pointer is not 32 bits.\n"
    },
    {
      "commit": "e9a3670706edf37c5a863c93e5ef0c269e484eb9",
      "tree": "312ef6b631d3408837f21d9b37d7c47c4693ac2d",
      "parents": [
        "21b86436a8c826da84b47cd773fdffbf3d05141e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sun Aug 24 20:36:51 2008 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri May 08 22:59:42 2009 +0100"
      },
      "message": "Fix bgp ipv4/ipv6 accept handling\n\nWhen bgp calls getaddrinfo, it gets both ipv6 and ipv4 addresses.\nUnless IPV6_ONLY is set on Linux, only the ipv6 bind will succeed,\nand the IPV4 connections will come in as mapped connections on the\nIPV6 socket.\n"
    },
    {
      "commit": "aea339f72807c34a7916d8614e030069815e144c",
      "tree": "7b0ab93dcfec82736f05ac39106096360e4ceeb5",
      "parents": [
        "c540835eaf0cb59921969537d8e94cc83bb717f5"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Thu Apr 30 17:16:22 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Thu Apr 30 17:16:22 2009 +0400"
      },
      "message": "[bgpd] AS4 bugfix by Chris Caputo \u003cccaputo@alt.net\u003e\n\n* bgpd/bgp_aspath.c: (aspath_make_str_count) \"assert (len \u003c str_size)\" was\n  getting hit under certain 4-byte ASN conditions. New realloc strategy.\n* bgpd/bgp_aspath.c: (aspath_key_make) const warning fix.\n\n\"%d\" -\u003e \"%u\" 4-byte ASN corrections.  Prevent negative number when ASN is\nabove 2^31.\n"
    },
    {
      "commit": "e0081f70ede76bc7a3db53eaab3e45ba657cc4d3",
      "tree": "27e143772053a699d10671832e3c7d989ee85392",
      "parents": [
        "5d4b8cf2faba9f5386810a7c70837e5b7fae3572"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Sun Nov 16 20:12:04 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Nov 16 20:12:04 2008 +0000"
      },
      "message": "[bgpd] Add \u0027show bgp views\u0027 command\n\n* bgp_vty.c: (show_bgp_views_cmd) new command to list all defined\n  views.\n  (with small edits by Paul Jakma)\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "8c1bbc7205c5e2a0266e0bf9af42862cf730fbcf",
      "tree": "0c433d2128c492302df16b9a20501be4cfd66c66",
      "parents": [
        "5635b778afcb3b6b3560871a292dc789f8dca5e9",
        "6e1992638864c3847d35bf9442989bce4c81de13"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Oct 02 16:27:16 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Oct 02 16:27:16 2008 +0100"
      },
      "message": "Merge branch \u0027bgpd/fsm\u0027\n"
    },
    {
      "commit": "a8bf6f526ee578a894c72eabae733f0b60abca63",
      "tree": "855f05041c4ef5a4f201ef2d3fe869b68b95542d",
      "parents": [
        "6e687d74f74f36bc9d503e29377e7d42f3427221"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Wed Sep 24 17:23:11 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Sep 24 17:23:11 2008 +0100"
      },
      "message": "[bgpd] Fix definition of an rsclient command\n\n* bgp_route.c: (show_ip_bgp_view_rsclient_route_cmd) Add the missing \"ip\"\n  to the command string.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "6e1992638864c3847d35bf9442989bce4c81de13",
      "tree": "78ef25d50da4dbaf4aa219240852366d9ce9c176",
      "parents": [
        "2b2fc5606f035eabd322b3a6aad4349efb9ab542"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Sep 09 17:14:33 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 09 17:14:33 2008 +0100"
      },
      "message": "[bgpd] Allow accepted peers to progress even if realpeer is in Connect\n\n* bgpd/bgp_packet.c: (bgp_open_receive) Try fix the little race in the FSM,\n  where a accept-peer that progress faster than realpeer gets closed down if\n  realpeer is still just in Connect, by allowing the realpeer to be\n  bgp_stop\u0027ed and doing the regular swapping-of-FSM state.\n"
    },
    {
      "commit": "2b2fc5606f035eabd322b3a6aad4349efb9ab542",
      "tree": "c689532d2328d0401c66e22023dc73d47141a028",
      "parents": [
        "ef16c8a2abd39b14fed45665eda5c293b93ee54b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Sep 06 13:09:35 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Sep 06 13:09:35 2008 +0100"
      },
      "message": "[bgpd] Document the FSM dummy-peer race that sometimes afflicts session setup\n\n* bgp_packet.c: (bgp_open_receive) the accept-peer hack can sometimes\n  cause a race between two peers that try to establish sessions to each other,\n  causing session setup to fail when it should have succeeded. In the worst\n  case, the race can \u0027loop\u0027, causing prolonged failure to establish sessions.\n"
    },
    {
      "commit": "ef16c8a2abd39b14fed45665eda5c293b93ee54b",
      "tree": "3e8a386296fcc36ec3ffef6ebbf38da36c7cfdcf",
      "parents": [
        "b3bc68e5a4eecd85138463ae5742c2ccaa1db4bb",
        "62687ff1cd3d4460cdbd4b0fbf1e3298fe277ad2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 04 13:52:38 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 04 13:52:38 2008 +0100"
      },
      "message": "Merge branch \u0027restricted-mode\u0027\n"
    },
    {
      "commit": "5d7bdd0ed9595f515bdfaa8af76fcfd41be7a6a6",
      "tree": "c54c1c217a1742549ea1f1067419574aa1366d35",
      "parents": [
        "d6bb5aa52793979616f0bfc5f38a0eb2e5f1c7e4",
        "35f891404a6d2f0d034ca0fb724904db72baf552",
        "fb62a3cef5960885119f9e87c833520ddf2a9b49"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Sep 01 20:19:14 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Sep 01 20:19:14 2008 +0100"
      },
      "message": "Merge commit \u0027remotes/jocke/ospf_neighbour\u0027; commit \u0027remotes/jocke/snmp_crosscompile\u0027\n"
    },
    {
      "commit": "6556d8a04079eb54d1805df3bef3e66ff1267d02",
      "tree": "35b35c8f7fbad9e6622ab8adfd9f5d71e2cfc541",
      "parents": [
        "b38309a4ee831a440ef78f8a27db584f2f8e8276"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Aug 26 14:33:28 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 26 14:33:28 2008 +0100"
      },
      "message": "Revert \"[bgpd] Add \u0027bgp open-accept\u0027 option, to send OPEN immediately on accepted conns\"\n\nRevert commit d664ae1182c29b74b409bc8594b7bd0575e91ce9. An experimental\npatch which violates RFC4271 quite badly, but managed to accidently sneak\nits way in.\n"
    },
    {
      "commit": "fb62a3cef5960885119f9e87c833520ddf2a9b49",
      "tree": "cf6c5cde38c91ad555021f44793b92fd34de8198",
      "parents": [
        "b38309a4ee831a440ef78f8a27db584f2f8e8276"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Tue May 13 20:03:32 2008 +0200"
      },
      "committer": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Aug 25 09:48:30 2008 +0200"
      },
      "message": "Make --enable-snmp cross compile and make libcrypto optional with --without-crypto\n\nAutoconfig work by me, the rest was done by\n\"Kirill K. Smirnov\" \u003clich@math.spbu.ru\u003e\n"
    },
    {
      "commit": "62687ff1cd3d4460cdbd4b0fbf1e3298fe277ad2",
      "tree": "6bea5c1cf07d9d702c95fabe356fcec418b91398",
      "parents": [
        "b38309a4ee831a440ef78f8a27db584f2f8e8276"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Aug 23 14:27:06 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Aug 23 14:27:06 2008 +0100"
      },
      "message": "[vty] Add support for a \u0027restricted mode\u0027 with anonymous vty connections\n\n\t* lib/command.h: Add a RESTRICTED_NODE, intended for use with\n\t  anonymous, \u0027no login\u0027 vtys, to provide a subset of \u0027view\u0027 mode\n\t  commands.\n\t* lib/command.c: Add RESTRICTED_NODE bits, nothing special, just\n\t  following VIEW_NODE.\n\t* lib/vty.c: (vty_auth) enable authentication should fall back to\n\t  restricted/view node as appropriate.\n\t  (vty_create) init vty\u0027s to restricted/view node as appropriate,\n\t  for the \u0027no login\u0027 case.\n\t  (vty_{no_,}restricted_mode_cmd) config commands to enable\n\t  \u0027anonymous restricted\u0027 in vty configuration.\n\t  (vty_config_write) \u0027anonymous restricted\u0027 config.\n\t  (vty_init) Install some commands to restricted mode, and the\n\t  \u0027anonymous restricted\u0027 config commands into VTY_NODE.\n\t* bgpd/*.c: Install some of the safe(r) BGP commands into\n\t  \u0027restricted mode\u0027, i.e. lookup commands of non-sensitive data.\n\t  Useful with looking-glass route-servers.\n"
    },
    {
      "commit": "5515de330cf6c5449c0a56862072750b07d23fd7",
      "tree": "4651f48d94ba97117d84fdaa2210563676adc8df",
      "parents": [
        "d68cbf9261869e532dfdd14dbb4122b3f3feb0d4"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Mar 21 12:41:22 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 20:02:08 2008 +0100"
      },
      "message": "[administrivia] Update gitignore files\n\n- Add more stuff, archive libraries, etc..\n"
    },
    {
      "commit": "d68cbf9261869e532dfdd14dbb4122b3f3feb0d4",
      "tree": "5cc873e6a38a3db9ad5fb4dfe579624ff7693c13",
      "parents": [
        "3998bfd76620a676fbd77f19c5c6ea80a4cc88d2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Oct 21 18:35:27 2006 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 20:00:46 2008 +0100"
      },
      "message": "[administrivia] Git should ignore backup files and .loT files\n"
    },
    {
      "commit": "3998bfd76620a676fbd77f19c5c6ea80a4cc88d2",
      "tree": "66bf93340e55bb06b25544ef04afec3749269391",
      "parents": [
        "e5248434c0d287668be956a2bd52399d67b16c39"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Aug 19 14:13:43 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:57:22 2008 +0100"
      },
      "message": "[trivia] Remove ChangeLog files, as this data is now maintained in SCM\n"
    },
    {
      "commit": "f3019aff2421d9c3d16498f22cd245e3f8948d4c",
      "tree": "e5630448e6bf0697cbdb35e42054ef84763bda21",
      "parents": [
        "ef9b113e2d4c0d49bd7d61458fa9acc113658d2c"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sun Aug 17 17:51:47 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:56:26 2008 +0100"
      },
      "message": "[bgpd] remove useless check and return in bgp_config_write_damp\n\n2008-08-17 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* bgp_damp.?: (bgp_config_write_damp) remove useless check\n\t  of statically allocated config storage, and useless return\n\t  value\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "30a2231a4881f53deca61ef7a62b225a43dab4c5",
      "tree": "f26dff922a4f85d302fa67bbd9a120108db41c44",
      "parents": [
        "f5612dd382d9c0f4089b08ec164c25a8082d9f89"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Aug 15 14:05:22 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:59 2008 +0100"
      },
      "message": "[warnings] Fix various SOS warnings\n\n2008-08-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* */*: Fix various problems flagged by Sun Studio compiler.\n\t  - \u0027\u003cqualifier\u003e \u003cstorage\u003e\u0027 obsolescent in declarations\n\t  - empty statements (\u0027;\u0027 after ALIAS definitions)\n\t  - implicit declarations (e.g printstack in lib/log.c)\n\t  - \"\\%\" in printf string instead of \"%%\"\n\t  - loops that return on the first iteration (legitimately, but\n \t    compiler can\u0027t really know), e.g. bgp_routemap.c\n \t  - internal declarations which mask prototypes.\n"
    },
    {
      "commit": "1423c809cc4ddc2e013ba6264c49a11e5719c6f2",
      "tree": "db0389e7de020bbcb9fd78d45417b0842a6adb0b",
      "parents": [
        "89d9fa301e146193093ff876f96b3612dc390bbb"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Aug 14 17:59:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] mes_lookup string lookup table argument should be marked const\n\n2008-08-14 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* lib/log.{c,h}: struct message argument should point to const\n\t* */*.c: adjust to suit,\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "ffe11cfb0a808ae514193438616dfabc512b4cf6",
      "tree": "94452dba2c1a49d6e6a0782c6513acb36823cefc",
      "parents": [
        "9fd4958a4eef88c536e4a5aeefce302e10ee8ee6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Aug 14 16:25:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] hash compare function arguments ought to be const qualified\n\n2008-08-14 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* lib/hash.h: (struct hash) Hash comparator callback really\n\t  ought to treat storage behind arguments as constant - a compare\n\t  function with side-effects would be evil.\n\t* */*.c: Adjust comparator functions similarly, thus fixing at least\n\t  a few compiler warnings about const qualifier being dropped.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "46bc0e432e756fcb8fc4f703b47cd25b9fc7139c",
      "tree": "60100ca1e11c3c3600441d366b236f4a2de519ca",
      "parents": [
        "d664ae1182c29b74b409bc8594b7bd0575e91ce9"
      ],
      "author": {
        "name": "Paul P Komkoff Jr",
        "email": "i@stingr.net",
        "time": "Wed Aug 13 16:17:04 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:12 2008 +0100"
      },
      "message": "[build] Test for GNU-style PIE support in toolchain and enable\n\n2008-08-13 Paul P Komkoff Jr \u003ci@stingr.net\u003e\n\n\t* configure.ac: add a configure flag and autoconf macro, which will\n\t  determine if your toolchain supports PIE.\n\t* */Makefile.am: add corresponding CFLAGS and LDFLAGS into\n\t  appropriate places.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "d664ae1182c29b74b409bc8594b7bd0575e91ce9",
      "tree": "dd7c7edf880483e1deade4e0c26e3844cd78a79e",
      "parents": [
        "e30db001530a39b827cc4f073033e35d9ca22662"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Aug 31 14:27:37 2007 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:12 2008 +0100"
      },
      "message": "[bgpd] Add \u0027bgp open-accept\u0027 option, to send OPEN immediately on accepted conns\n\n2007-08-31 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Add \u0027bgp open-accept\u0027 option, to allow bgpd to send OPEN\n\t  on accepted connections, i.e. to not wait till after\n\t  collision-detect to send OPEN, which appears to be allowed in\n\t  RFC4271. This may help speed up establishing sessions, or help\n\t  avoid FSM problems with sessions to certain peers. Not enabled by\n\t  default though.\n"
    },
    {
      "commit": "3c5a0a4f8fe3811affff6d5e123379eedb083571",
      "tree": "79e285e0bd04c6ef0dfcde9cf0ce8fda8abecbe1",
      "parents": [
        "750e814693050bc97391eec618aad9db798ee5e8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Feb 19 17:30:10 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:49:33 2008 +0100"
      },
      "message": "[administrivia] Add .gitignore files, based on .cvsignores.\n"
    },
    {
      "commit": "750e814693050bc97391eec618aad9db798ee5e8",
      "tree": "03d3e27a68b0593002d8f73609235919c030e426",
      "parents": [
        "851a1a5c146b346d8b8f58fe3924baa5c208f865"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 22 21:11:48 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 22 21:11:48 2008 +0000"
      },
      "message": "[bgpd] Fix triggerable crash when compiled with --disable-bgp-announce\n\n2008-07-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* HACKING: Document preference for compiler conditional code, over\n\t  cpp conditional.\n\t* configure.ac: DISABLE_BGP_ANNOUNCE always should be defined.\n\t* bgp_{packet,route,advertise}.c: change to compiler testing of\n\t  DISABLE_BGP_ANNOUNCE, rather than cpp.\n\n2008-07-22 MIYAJIMA Mitsuharu \u003cmiyajima.mitsuharu@anchor.jp\u003e\n\n\t* bgp_packet.c: (bgp_update_packet_eor) Fix crash triggerable\n\t  if a bgpd was compiled with --disable-bgp-announce and if GR is\n\t  advertised by peer.\n"
    },
    {
      "commit": "851a1a5c146b346d8b8f58fe3924baa5c208f865",
      "tree": "38817ea92885b4274ca63ad2fc502da7a92c058d",
      "parents": [
        "0df7c91f048f2116610d6bdfce3ab6cad1981802"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 22 19:56:56 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 22 19:56:56 2008 +0000"
      },
      "message": "[bgpd] fix a couple of trivial compiler warnings\n\n2008-07-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_community.c: (community_str2com) assigns defaults to local\n\t  vars\n\t* bgp_attr.c: (bgp_attr_parse) match format specifier to arg\n\t* bgp_table.{c,h}: (bgp_table_top) can take a * to a const, quelling\n\t  warning in bgp_route.c\n"
    },
    {
      "commit": "0df7c91f048f2116610d6bdfce3ab6cad1981802",
      "tree": "18390aa845054b757fae86dde49b907ee7f14908",
      "parents": [
        "f04b0e6bb8c1339243717b156880d7e24c84c951"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Jul 21 21:02:49 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Jul 21 21:02:49 2008 +0000"
      },
      "message": "[bgpd] TCP-MD5: password vty configuration and initial Linux support\n\n2008-07-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_packet.c: (bgp_open_receive) fix warning in a zlog call\n\t* bgp_vty.c: (bgp_vty_return) add return code\n\t* bgpd.c: (bgp_master_init) setup the socket list.\n\t* bgp_network.c: Remove the dual IPv4/6 socket thing for now, which\n\t  was implemented by Michael, until such time as its clear its\n\t  required for Linux (see sockopt comments). IPv6 support, including\n\t  IPv4 sessions on AF_INET6 sockets, therefore is broken, and the\n\t  \u0027-l 0.0.0.0\u0027 arguments would need to be given to bgpd to make\n\t  things work here.\n\n2008-07-21 Michael H. Warfield \u003cmhw@wittsend.com\u003e\n           YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\n\t   Tomohiko Kusuda \u003ckusuda@inetcore.com\u003e\n           Leigh Brown \u003cleigh@solinno.co.uk\u003e\n\n\t* bgp_network.c: (bgp_md5_set_one) shim between libzebra tcp-md5\n\t  sockopt and bgpd.\n\t  (bgp_md5_set_socket) Helper for bgp_connect\n\t  (bgp_md5_set) setup TCP-MD5SIG for the given peer.\n\t  (bgp_connect) call out to bgp_md5_set_socket for the outgoing\n\t  connect socket.\n\t  (bgp_socket) save references to the listen sockets, needed if\n\t  TCP-MD5SIG is applied later or changed.\n\t* bgp_vty.c: (*neighbor_password_cmd) New \u0027neighbor ... password\u0027\n\t  commands.\n\t* bgpd.c: (peer_{new,delete) manage TCP-MD5 password\n\t  (peer_group2peer_config_copy) inherit TCP-MD5 password\n\t  (peer_password_{un,}set) orchestrate the whole add/remove of TCP-MD5\n\t  passwords: applying checks, stopping peers, and trying to return\n\t  errors to UI, etc.\n\t  (bgp_config_write_peer) save password.\n\t  Fix missing newline in writeout of neighbor ... port.\n\n2008-07-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* sockunion.c: ifdef out various places that converted\n\t  v4mapped sockets to pure v4. Doesn\u0027t seem necessary at all,\n\t  presumably a workaround for now historical inet_ntop bugs (?)\n\n2008-07-21 Michael H. Warfield \u003cmhw@wittsend.com\u003e\n           YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\n\n\t* sockopt.{c,h}: (sockopt_tcp_signature) Add TCP-MD5SIG support.\n"
    },
    {
      "commit": "320da874d75acb7d0cb69c531ee6255e63fe0336",
      "tree": "063cceec70b3d71ef65a957956088f06d6b5bbe5",
      "parents": [
        "b608d5b5ac469d47072aedd573e5d3475f4d9cf4"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Jul 02 13:40:33 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Jul 02 13:40:33 2008 +0000"
      },
      "message": "[vty] CMD_AS_RANGE accidently quoted and so not expanded in vty\n\n2008-07-02 MIYAJIMA Mitsuharu \u003cmiyajima.mitsuharu@anchor.jp\u003e\n\n\t* *.c: CMD_AS_RANGE was being used inside command strings, and thus\n\t  not being expanded, fix by dequoting.\n"
    },
    {
      "commit": "b608d5b5ac469d47072aedd573e5d3475f4d9cf4",
      "tree": "a6e130a1dee11accfbffffd154c592d49e4312dc",
      "parents": [
        "0b3f3d47b21ddf175bfdd549ba33fbcd34801244"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Jul 02 02:12:07 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Jul 02 02:12:07 2008 +0000"
      },
      "message": "[bgpd] Fix double-free crash in bgp_table_finish, seen with rs-client\n\n2008-07-02 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* bgp_table.{c,h}: (bgp_table_finish) Take a double pointer and\n\t  scrub pointer in caller, so fixing double-free crashes seen\n\t  with route-server-client configuration.\n\t* *.c: Adjust all callers of bgp_table_finish\n\n2008-07-02 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_table.{c,h}: (bgp_node_delete, bgp_table_free) shouldn\u0027t be\n\t  exported.\n"
    },
    {
      "commit": "032928091c558d3b0940be079049009f47652711",
      "tree": "81bd1c2ddfbf41f380bfd38370e42d3c646f5e08",
      "parents": [
        "343f720b345dd377bdf4f53e3b02e0c2898f3f0b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:37:10 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:37:10 2008 +0000"
      },
      "message": "[bgpd] minor changes to bgp_mp_reach_parse\n\n2008-06-07 Paul Jakma \u003cpaul@jakma.org\u003e\n\n\t* bgp_attr.{c,h}: (bgp_mp_{un,}reach_parse) export, for unit tests.\n\t* bgp_attr.c: (bgp_mp_reach_parse) Add logging. Tighten length test\n\t  to bounds check against the attribute length rather than the\n\t  stream length..\n"
    },
    {
      "commit": "a15cfd16fcdec39588ce2f780671ba7c6de0b919",
      "tree": "ccd6a9a654bfe0a7ae376d5e268d2749be06e6fa",
      "parents": [
        "0e7c124f870d4c95ff3edbde1a766717c696da7c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Jun 01 14:29:03 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Jun 01 14:29:03 2008 +0000"
      },
      "message": "[bgpd] bug #419: partial aspath-limit incorrectly causes session reset\n\n2008-06-01 jfletche@gmail.com\n\n\t* bgp_attr.c: (bgp_attr_aspathlimit) fix silly bug in flags check\n\t  that was causing BGP to drop sessions if it received a\n\t  aspath-limit with partial set. Fixes bug #419.\n"
    },
    {
      "commit": "0d6b2ee249e9efba30da3236c413bf03c7b27ed9",
      "tree": "4d9320f2c34f0c127b58b92f59e2c2afd2d5818f",
      "parents": [
        "768a27ea7ba25257c79689af83ab37945dc1cc3c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:29:16 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:29:16 2008 +0000"
      },
      "message": "[daemons] Sanity check port number arguments before use\n\n2008-05-29 Martin Nagy \u003cmnagy@redhat.com\u003e\n\n\t* */*main.c: Sanity check port numbers before using.\n"
    },
    {
      "commit": "841f7a57b13b8cba4efd51db4e7ac13fd403b17b",
      "tree": "27179c9db7a6d8e7e3dc2d13eb82efda4d9c4eb1",
      "parents": [
        "693b67b2b20510e0faee87a0950595832ce71054"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Thu Apr 10 11:47:45 2008 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Thu Apr 10 11:47:45 2008 +0000"
      },
      "message": "+ [bgpd] Added new route-map set statement: \"as-path ignore\"\n"
    },
    {
      "commit": "693b67b2b20510e0faee87a0950595832ce71054",
      "tree": "bb7e728238fdf0a6e0d827afdad37ffb3d0279e1",
      "parents": [
        "ce6ab03a273beb903731621153722511910ebbe5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 13 03:31:24 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 13 03:31:24 2008 +0000"
      },
      "message": "[bgpd] remove unnecessary 0 entries from struct message\u0027s\n\n2008-03-13 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (various) Remove 0 entries from struct message\u0027s, unneeded due to\n\t  recent improvements in mes_lookup/LOOKUP.\n"
    },
    {
      "commit": "90b68769a1a1d7623cae02be71b7a8e4094455ad",
      "tree": "f114b7a33eec1cde1fefcb3cadf89d68fa73b005",
      "parents": [
        "75f043990f9e3fe76a59605df8b0c1283a5b2ec6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jan 29 17:26:34 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jan 29 17:26:34 2008 +0000"
      },
      "message": "[bgpd] fix crash on startup if compiled IPv4-only\n\n2008-01-29 Jorge Boncompte \u003cjorge@dti2.net\u003e\n\n\t* bgp_network.c: (bgp_socket) IPv4-only version crashes if -l is not\n\t  used as address will be null.\n"
    },
    {
      "commit": "370b64a2ad38e43b4bed028960481bbf4192becd",
      "tree": "ebecb7f934a7058d582e52b5c64a21eb676ec994",
      "parents": [
        "a7f93f3e060fdb2dc7bf5ff4ed4563d4b689bc6c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Dec 22 16:49:52 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Dec 22 16:49:52 2007 +0000"
      },
      "message": "[bgpd] Fix number of DoS security issues, restricted to configured peers.\n\n2007-12-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* Fix series of vulnerabilities reported by \"Mu Security\n\t  Research Team\", where bgpd can be made to crash by sending\n\t  malformed packets - requires that bgpd be configured with a\n\t  session to the peer.\n\t* bgp_attr.c: (bgp_attr_as4_path) aspath_parse may fail, only\n\t  set the attribute flag indicating AS4_PATH if we actually managed\n\t  to parse one.\n\t  (bgp_attr_munge_as4_attrs) Assert was too general, it is possible\n\t  to receive AS4_AGGREGATOR before AGGREGATOR.\n\t  (bgp_attr_parse) Check that we have actually received the extra\n\t  byte of header for Extended-Length attributes.\n\t* bgp_attr.h: Fix BGP_ATTR_MIN_LEN to account for the length byte.\n\t* bgp_open.c: (cap_minsizes) Fix size of CAPABILITY_CODE_RESTART,\n\t  incorrect -2 left in place from a development version of as4-path\n\t  patch.\n\t* bgp_packet.c: (bgp_route_refresh_receive) ORF length parameter\n\t  needs to be properly sanity checked.\n\t* tests/bgp_capability_test.c: Test for empty capabilities.\n"
    },
    {
      "commit": "a7f93f3e060fdb2dc7bf5ff4ed4563d4b689bc6c",
      "tree": "f21aab4a90ddc873bf39a29b5b756129b7813740",
      "parents": [
        "b63e60899f2eba733fadbca020cdbe98d9d58b5f"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Dec 18 15:13:06 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Dec 18 15:13:06 2007 +0000"
      },
      "message": "+ fixed no_set_aspath_prepend() to correctly match existing \"set\" statement\n"
    },
    {
      "commit": "b63e60899f2eba733fadbca020cdbe98d9d58b5f",
      "tree": "07adde0f09c22c16e4978ad3461c78405d274f90",
      "parents": [
        "7e992e95e3fb9453efb6018dca9016139a8396f1"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Nov 21 21:25:34 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed Nov 21 21:25:34 2007 +0000"
      },
      "message": "[bgpd] Fix typo in previous commit to bgp_main.c\n"
    },
    {
      "commit": "7e992e95e3fb9453efb6018dca9016139a8396f1",
      "tree": "78ad72764e2334a4a900dd74cc64564ad0a6f5e5",
      "parents": [
        "6ce80bdb2523ad82cef813f6d8a7e0d4daa8cfae"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Nov 13 09:32:23 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Nov 13 09:32:23 2007 +0000"
      },
      "message": "[bgpd] small fix for crash if \u0027listenon\u0027 argument is not given\n\n2007-11-13 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_main.c: Small fix, format string parameters should never\n\t  be NULL - it\u0027s not strictly valid and some libc\u0027s don\u0027t let\n\t  you away with.\n"
    },
    {
      "commit": "3a02d1f7fb778a1ea4f45d037f13dfcd126e2337",
      "tree": "2ffa6c8c2c2feb9d423a277c0761151e56884d38",
      "parents": [
        "5619f56ba38b255f699f76b327cf82388c4a90cf"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Nov 01 14:29:11 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Nov 01 14:29:11 2007 +0000"
      },
      "message": "2007-10-30 Nick Hilliard \u003cnick@inex.ie\u003e\n\n\t* bgp_main.c: Add \u0027listenon\u0027 argument, to pass address to bind\n\t  to.\n\t* bgp_network.c: (bgp_socket) Extend to take bind address.\n\t* bgpd.c: (bgp_init) Pass stored address.\n\t* bgpd.h: (struct bgp_master) storage for bind address\n\n2007-11-01 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* tools/multiple-bgpd.sh: New, quick script to launch a bunch of\n\t  bgpds.\n"
    },
    {
      "commit": "0b2aa3a0a8b095bdef1eddda117d173af75dede2",
      "tree": "29201cb2beec187409e842b4078ed8a8047d3f11",
      "parents": [
        "7593fddfa1558d086e3142ad96cf2790007f5d84"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 14 22:32:21 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 14 22:32:21 2007 +0000"
      },
      "message": "[bgpd] Merge AS4 support\n\n2007-10-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* NEWS: Note that MRT dumps are now version 2\n\t* (general) Merge in Juergen Kammer\u0027s AS4 patch.\n\n2007-09-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.c: (assegment_normalise) remove duplicates from\n\t  from sets.\n\t  (aspath_reconcile_as4) disregard a broken part of the RFC around\n\t  error handling in path reconciliation.\n\t* aspath_test.c: Test dupe-weeding from sets.\n\t  Test that reconciliation merges AS_PATH and AS4_PATH where\n\t  former is shorter than latter.\n\n2007-09-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* aspath_test.c: Test AS4_PATH reconcilation where length\n\t  of AS_PATH and AS4_PATH is same.\n\n2007-09-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_open.c: (peek_for_as4_capability) Fix to work.\n\t* bgp_packet.c: (bgp_open_receive) Fix sanity check of as4.\n\t* tests/bgp_capability_test.c: (general) Extend tests to validate\n\t  peek_for_as4_capability.\n\t  Add test of full OPEN Option block, with multiple capabilities,\n\t  both as a series of Option, and a single option.\n\t  Add some crap to beginning of stream, to prevent code depending\n\t  on getp \u003d\u003d 0.\n\n2007-09-18 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_open.c: (bgp_capability_as4) debug printf inline with others.\n\t  (peek_for_as4_capability) There\u0027s no need to signal failure, as\n\t  failure is better dealt with through full capability parser -\n\t  just return the AS4, simpler.\n\t* bgp_packet.c: (bgp_open_receive) Update to match\n\t  peek_for_as4_capability change.\n\t  Allow use of BGP_AS_TRANS by 2b speakers.\n\t  Use NOTIFY_OPEN_ERR rather than CEASE for OPEN parsing errors.\n\t  (bgp_capability_msg_parse) missing argument to debug print\n\t  (bgp_capability_receive) missing return values.\n\t* tests/bgp_capability_test.c: (parse_test) update for changes to\n\t  peek_for_as4_capability\n\n2007-07-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* Remove 2-byte size macros, just make existing macros take\n\t  argument to indicate which size to use.\n\t  Adjust all users - typically they want \u00271\u0027.\n\t* bgp_aspath.c: (aspath_has_as4) New, return 1 if there are any\n\t  as4\u0027s in a path.\n\t  (aspath_put) Return the number of bytes actually written, to\n\t  fix the bug Juergen noted: Splitting of segments will change\n\t  the number of bytes written from that already written to the\n\t  AS_PATH header.\n\t  (aspath_snmp_pathseg) Pass 2-byte flag to aspath_put. SNMP\n\t  is still defined as 2b.\n\t  (aspath_aggregate) fix latent bug.\n\t  (aspath_reconcile_as4) AS_PATH+NEW_AS_PATH reconciliation\n\t  function.\n\t  (aspath_key_make) Hash the AS_PATH string, rather than\n\t  just taking the addition of assegment ASes as the hash value,\n\t  hopefully sligthly more collision resistant.\n\t  (bgp_attr_munge_as4_attrs) Collide the NEW_ attributes\n\t  together with the OLD 2-byte forms, code Juergen\n\t  had in bgp_attr_parse but re-organised a bit.\n\t  (bgp_attr_parse) Bunch of code from Juergen moves\n\t  to previous function.\n\t  (bgp_packet_attribute) Compact significantly by\n\t  just /always/ using extended-length attr header.\n\t  Fix bug Juergen noted, by using aspath_put\u0027s\n\t  (new) returned size value for the attr header rather\n\t  than the (guesstimate) of aspath_size() - the two could\n\t  differ when aspath_put had to split large segments, unlikely\n\t  this bug was ever hit in the \u0027wild\u0027.\n\t  (bgp_dump_routes_attr) Always use extended-len and\n\t  use aspath_put return for header length. Output 4b ASN\n\t  for AS_PATH and AGGREGATOR.\n\t* bgp_ecommunity.c: (ecommunity_{hash_make,cmp}) fix\n\t  hash callback declarations to match prototypes.\n\t  (ecommunity_gettoken) Updated for ECOMMUNITY_ENCODE_AS4,\n\t  complete rewrite of Juergen\u0027s changes (no asdot support)\n\t* bgp_open.c: (bgp_capability_as4) New, does what it says\n\t  on the tin.\n\t  (peek_for_as4_capability) Rewritten to use streams and\n\t  bgp_capability_as4.\n\t* bgp_packet.c: (bgp_open_send) minor edit\n\t  checked (in the abstract at least) with Juergen.\n\t  Changes are to be more accepting, e.g, allow AS_TRANS on\n\t  a 2-byte session.\n\t* (general) Update all commands to use CMD_AS_RANGE.\n\t* bgp_vty.c: (bgp_clear) Fix return vals to use CMD_..\n\t  Remove stuff replicated by VTY_GET_LONG\n\t  (bgp_clear_vty) Return bgp_clear directly to vty.\n\t* tests/aspath_test.c: Exercise 32bit parsing. Test reconcile\n\t  function.\n\t* tests/ecommunity_test.c: New, test AS4 ecommunity changes,\n\t  positive test only at this time, error cases not tested yet.\n\n2007-07-25 Juergen Kammer \u003cj.kammer@eurodata.de\u003e\n\n\t* (general) AS4 support.\n\t* bgpd.h: as_t changes to 4-bytes.\n\t* bgp_aspath.h: Add BGP_AS4_MAX and BGP_AS_TRANS defines.\n\t* bgp_aspath.c: AS_VALUE_SIZE becomes 4-byte, AS16_VALUE_SIZE\n\t  added for 2-byte.\n\t  Add AS16 versions of length calc macros.\n\t  (aspath_count_numas) New, count number of ASes.\n\t  (aspath_has_as4) New, return 1 if there are any as4\u0027s in a\n\t  path.\n\t  (assegments_parse) Interpret assegment as 4 or 2 byte,\n\t  according to how the caller instructs us, with a new\n\t  argument.\n\t  (aspath_parse) Add use32bit argument to pass to\n\t  assegments_parse. Adjust all its callers to pass 1, unless\n\t  otherwise noted.\n\t  (assegment_data_put) Adjust to be able to write 2 or 4 byte\n\t  AS, according to new use32bit argument.\n\t  (aspath_put) Adjust to write 2 or 4.\n\t  (aspath_gettoken) Use a long for passed in asno.\n\t* bgp_attr.c: (attr_str) Add BGP_ATTR_AS4_PATH and\n\t  BGP_ATTR_AS4_AGGREGATOR.\n\t  (bgp_attr_aspath) Call aspath_parse with right 2/4 arg, as\n\t  determined by received-capability flag.\n\t  (bgp_attr_aspath_check) New, code previously in attr_aspath\n\t  but moved to new func so it can be run after NEW_AS_PATH\n\t  reconciliation.\n\t  (bgp_attr_as4_path) New, handle NEW_AS_PATH.\n\t  (bgp_attr_aggregator) Adjust to cope with 2/4 byte ASes.\n\t  (bgp_attr_as4_aggregator) New, read NEW_AGGREGATOR.\n\t  (bgp_attr_parse) Add handoffs to previous parsers for the two\n\t  new AS4 NEW_ attributes.\n\t  Various checks added for NEW/OLD reconciliation.\n\t  (bgp_packet_attribute) Support 2/4 for AS_PATH and\n\t  AGGREGATOR, detect when NEW_ attrs need to be sent.\n\t* bgp_debug.{c,h}: Add \u0027debug bgp as4\u0027.\n\t* bgp_dump.c: MRTv2 support, unconditionally enabled, which\n\t  supports AS4. Based on patches from Erik (RIPE?).\n\t* bgp_ecommunity.c: (ecommunity_ecom2str) ECOMMUNITY_ENCODE_AS4\n\t  support.\n\t* bgp_open.c: (peek_for_as4_capability) New, peek for AS4\n\t  capability prior to full capability parsing, so we know which\n\t  ASN to use for struct peer lookup.\n\t  (bgp_open_capability) Always send AS4 capability.\n\t* bgp_packet.c: (bgp_open_send) AS4 handling for AS field\n\t  (bgp_open_receive) Peek for AS4 capability first, and figure\n\t  out which AS to believe.\n\t* bgp_vty.c: (bgp_show_peer) Print AS4 cap\n\t* tests/aspath_test.c: Support asn32 changes, call aspath_parse\n\t  with 16 bit.\n\t* vtysh/extract.pl: AS4 compatibility for router bgp ASNUMBER\n\t* vtysh/extract.pl.in: AS4 compatibility for router bgp ASNUMBER\n\t* vtysh/vtysh.c: AS4 compatibility for router bgp ASNUMBER\n"
    },
    {
      "commit": "e08286bcf8a73d1922b0464bef52c1b27eda7c43",
      "tree": "8b590fbc547455b133deab93b1e43cd532ee2a71",
      "parents": [
        "fb31c0fea38c863ddcda56f46c36f065340b9e32"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Sep 18 12:11:26 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Sep 18 12:11:26 2007 +0000"
      },
      "message": "[bgpd] Fix typo, which prevented advertisement of MP (non-IPv4) prefixes\n\n2007-09-17 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_open.c: (bgp_capability_mp) We were setting\n\t  afc_nego[safi][safi] rather than afc_nego[afi][safi], thus\n\t  failling to announce any non-IPv4 prefixes. Remove the extra,\n\t  typo-ed character.\n\t* bgp_capability_test.c: Test that peer\u0027s adv_recv and adv_nego get\n\t  set correctly for MP capability and given AFI/SAFI.\n\t  Colour OK/failed result so it\u0027s easier to find them.\n"
    },
    {
      "commit": "b2ceea18074ab8cca894051a3fbc30c312e3acc6",
      "tree": "3dfc9d1572582ed26cedad37768be9a57a67f5a8",
      "parents": [
        "882968e0a2fe65db5aff29149c87f6d292a1cd2d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Sep 07 14:24:55 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Sep 07 14:24:55 2007 +0000"
      },
      "message": "[bgpd] low-impact DoS: crash on malformed community with debug set\n\n2007-09-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) bgpd can be made crash by remote peers if debug\n\t  bgp updates is set, due to NULL pointer dereference.\n\t  Reported by \"Mu Security Research Team\",\n\t  \u003csecurity@musecurity.com\u003e.\n\t* bgp_attr.c: (bgp_attr_community) If community length is 0,\n\t  don\u0027t set the community-present attribute bit, just return\n\t  early.\n\t* bgp_debug.c: (community_str,community_com2str) Check com\n\t  pointer before dereferencing.\n"
    },
    {
      "commit": "9eda90ce8094683a5315007fbd0f9249a284f36f",
      "tree": "1d861050148c03dc4c37a1266c4567b24e9e6da1",
      "parents": [
        "6d134fb4defecb16591adbf4acb020acd165a75a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Aug 30 13:36:17 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Aug 30 13:36:17 2007 +0000"
      },
      "message": "[bgpd] bug #398 Bogus free on out route-map, and assert() with rsclients\n\n2007-08-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_announce_check) Fix bug #398, slight\n\t  modification of Vladimir Ivanov\u0027s suggested fix - to keep\n\t  memory alloc conditional.\n\t  (bgp_process_announce_selected) Don\u0027t take struct attr as\n\t  argument, none of the callers need it and it needlessly\n\t  distances allocation from use.\n\t  Free the extended attr, the attr itself is on the stack.\n\t  Fix bad indentation.\n\t* bgp_attr.c: (bgp_packet_attribute) Remove incorrect assert,\n\t  and adjust conditional to test attr-\u003eextra, diagnosis by\n\t  Vladimir Ivanov in bug #398.\n\n2007-08-27 Vladimir Ivanov \u003cwawa@yandex-team.ru\u003e\n\n\t* bgp_route.c: (bgp_announce_check_rsclient) copy of\n\t  ri-\u003eattr is no longer deep enough, due to addition of\n\t  attr-\u003eextra. It should use bgp_attr_dup, as\n\t  bgp_announce_check() does.\n"
    },
    {
      "commit": "6d134fb4defecb16591adbf4acb020acd165a75a",
      "tree": "e88549ea00e5a8b22ffacb36b7b1d2c9d941b664",
      "parents": [
        "b7fe4141123c6fc26fffec68d0db62ecf474c074"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Aug 23 23:22:02 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Aug 23 23:22:02 2007 +0000"
      },
      "message": "[bgpd] Pass NOSUB to regexec\n\n2007-08-23 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_regex.c: (bgp_regcomp) Pass NOSUB flag to regcomp to\n\t  prevent parsing of substitutions, which can have profound\n\t  performance effects on bgpd and are of no use to the CLI\n\t  anyway. How much it helps depends on the regex\n\t  implementation.\n"
    },
    {
      "commit": "41367172d812354c05b11818346f0d49c2245aef",
      "tree": "eb8f83ec0e93cb5a1d8470afd5c79ce55bc853da",
      "parents": [
        "6d58272b4cf96f0daa846210dd2104877900f921"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:24:51 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:24:51 2007 +0000"
      },
      "message": "[bgpd] Add support for AS_PATHLIMIT / draft-ietf-idr-as-pathlimit\n\n2007-07-31 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Support for draft-ietf-idr-as-pathlimit-03.\n\t* bgp_attr.h: (struct attr) Add pathlimit struct\n          bgp_attr.c: (attr_str) Add BGP_ATTR_AS_PATHLIMIT string.\n          (attrhash_key_make) tally pathlimit too\n          (attrhash_cmp) cmp pathlimit attr\n          (bgp_attr_aspathlimit) New, parse AS_PATHLIMIT attr.\n          (bgp_attr_parse) ditto\n          (bgp_packet_attribute) Write out AS_PATHLIMIT when set\n          (bgp_dump_routes_attr) ditto\n         * bgp_route.h: (struct bgp_static) Add TTL field\n         * bgp_route.c: (bgp_announce_check) Drop paths that are over\n           their hop-count TTL before sending via EBGP.\n           Mangle ASN in pathlimit for confeds/private as best we can.\n           (bgp_static_update_{rsclient,main}) Add any configure pathlimit\n           information.\n           (bgp_pathlimit_update_parents) New, update atomic-aggr setting for\n           parents of an aspathlimit\u0027ed static.\n           (bgp_static_set) Add TTL argument, for all the \u0027bgp network\u0027\n           commands.\n           Call previous for TTL changed statics.\n           (bgp_static_unset) Call pathlimit_update_parents.\n           (various bgp network commands) Add \u0027pathlimit \u003c0-255\u003e\u0027 qualifier\n           to all the various forms, bar route-map - which can set ttl\n           itself.\n         * bgp_routemap.c: (general) Add support for \u0027set pathlimit ttl\u0027 and\n           \u0027match pathlimit as\u0027.\n         * doc/bgpd.texi: Document \u0027network ... pathlimit \u003cttl\u003e\u0027\n"
    },
    {
      "commit": "6d58272b4cf96f0daa846210dd2104877900f921",
      "tree": "a97f2c9c797bd96b298aa64f03ed69115d63e78b",
      "parents": [
        "dfdb8f18c008e7ad306588c86b12fbef337427ca"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:21:45 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:21:45 2007 +0000"
      },
      "message": "[bgpd] cleanup, compact and consolidate capability parsing code\n\n2007-07-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Clean up and compact capability parsing slightly.\n\t  Consolidate validation of length and logging of generic TLV, and\n\t  memcpy of capability data, thus removing such from cap specifc\n\t  code (not always present or correct).\n\t* bgp_open.h: Add structures for the generic capability TLV header\n\t  and for the data formats of the various specific capabilities we\n\t  support.  Hence remove the badly named, or else misdefined, struct\n\t  capability.\n\t* bgp_open.c: (bgp_capability_vty_out) Use struct capability_mp_data.\n\t  Do the length checks *before* memcpy()\u0027ing based on that length\n\t  (stored capability - should have been validated anyway on input,\n\t  but..).\n\t  (bgp_afi_safi_valid_indices) new function to validate (afi,safi)\n\t  which is about to be used as index into arrays, consolidates\n\t  several instances of same, at least one of which appeared to be\n\t  incomplete..\n\t  (bgp_capability_mp) Much condensed.\n\t  (bgp_capability_orf_entry) New, process one ORF entry\n\t  (bgp_capability_orf) Condensed. Fixed to process all ORF entries.\n\t  (bgp_capability_restart) Condensed, and fixed to use a\n\t  cap-specific type, rather than abusing capability_mp.\n\t  (struct message capcode_str) added to aid generic logging.\n\t  (size_t cap_minsizes[]) added to aid generic validation of\n\t  capability length field.\n\t  (bgp_capability_parse) Generic logging and validation of TLV\n\t  consolidated here. Code compacted as much as possible.\n\t* bgp_packet.c: (bgp_open_receive) Capability parsers now use\n\t  streams, so no more need here to manually fudge the input stream\n\t  getp.\n\t  (bgp_capability_msg_parse) use struct capability_mp_data. Validate\n\t  lengths /before/ memcpy. Use bgp_afi_safi_valid_indices.\n\t  (bgp_capability_receive) Exported for use by test harness.\n\t* bgp_vty.c: (bgp_show_summary) fix conversion warning\n\t  (bgp_show_peer) ditto\n\t* bgp_debug.h: Fix storage \u0027extern\u0027 after type \u0027const\u0027.\n        * lib/log.c: (mes_lookup) warning about code not being in\n          same-number array slot should be debug, not warning. E.g. BGP\n          has several discontigious number spaces, allocating from\n          different parts of a space is not uncommon (e.g. IANA\n          assigned versus vendor-assigned code points in some number\n          space).\n"
    },
    {
      "commit": "45ad592ec84bd10e370c11387ecb36ccb42ea3c8",
      "tree": "4714a07c180f78c1d714b63d515c045562612c41",
      "parents": [
        "e6a01955a7d26dda6f0ecfb6a787d4c46442303b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 31 17:35:36 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 31 17:35:36 2007 +0000"
      },
      "message": "[bgpd] Dont schedule dumps multiple times for same command\n\n2007-07-31 Lorenzo Colitti \u003clorenzo@colitti.com\u003e\n\n\t* bgp_dump.c: (general) Add comments to code.\n\t  (bgp_dump_interval_add) remove some redundant lines.\n\t  (bgp_dump_set) Use enum for type argument.\n\t  Avoid scheduling dump twice if exact same command\n\t  is given twice..\n"
    },
    {
      "commit": "536792cd883439237c4098f925ea6921122d12ef",
      "tree": "5ba9e4a51c477046ce90aa24af08331053030225",
      "parents": [
        "11770e10861ccb684b608396c798aea9da05a1a2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 22 19:11:14 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 22 19:11:14 2007 +0000"
      },
      "message": "[bgpd] bug #368: Fix possible loop between peers going Idle\u003c-\u003eOpenSent\n\n2007-06-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_fsm.c: (struct FSM) Bug #368. TCP Errors during OpenSent\n\t  should cycle to Active, not to Idle or else peer bringup can\n\t  race and cycle Idle\u003c-\u003eActive. Reported and fix tested by\n\t  Mukesh Agrawal.\n"
    },
    {
      "commit": "b24970241aa19c780a00f0e9c865b98c239a27f2",
      "tree": "f04b9c6a50a944edd461d66da8f65d226437d964",
      "parents": [
        "e733f949448e1cf9fa27e8b618c56a0e4badc1af"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 14 11:17:58 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 14 11:17:58 2007 +0000"
      },
      "message": "[bgpd] bug #370, default-originate was broken by a silly thinko\n\n2007-05-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_default_originate) Sanity check added\n\t  previously was broken and always failed, thus this function\n\t  never could run, bug #370.\n"
    }
  ],
  "next": "6f0e3f6e17687eb25b7b77c4fdc8324837d4700f"
}
