)]}'
{
  "log": [
    {
      "commit": "733cd9e5792648de50da3c00805aacb51cb27048",
      "tree": "606ec20aa51f16b7a49fd9f5ede27893bee9ace9",
      "parents": [
        "de5ccb96023181765c9904ab40e645c397f536d6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Dec 17 19:39:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:42 2012 +0400"
      },
      "message": "bgpd: justify checks for IPv4 class D/E\n\n* lib/prefix.h\n  * IPV4_CLASS_DE(): make consistent with counterpart macros\n* bgp_packet.c\n  * bgp_open_receive(): test using macro instead of \"\u003e\u003d\"\n* bgp_route.c\n  * bgp_update_rsclient(): idem\n  * bgp_update_main(): idem\n"
    },
    {
      "commit": "bb915f5fa60de1a5b7e6089fcfc680281a590463",
      "tree": "e5ee800f9a18c1b8ebbe390e1762ad93fc778d9e",
      "parents": [
        "32ca97392057d279eeddd1aef36c1836880e8b89"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 21:11:39 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 21:11:39 2011 +0400"
      },
      "message": "bgpd: fix regression in ORF procesing (BZ#688)\n\nThis issue has been pointed out by Lou Berger and Tim Browski.\n\n* bgp_packet.c\n  * bgp_route_refresh_receive(): restore if() condition, which was\n    broken by commit fdbc8e77c88f751924299d0bc752371d5cc31116\n"
    },
    {
      "commit": "42e6d745d105018a9469dabad65bd4cf942dcf3c",
      "tree": "9e653fe2e44d2e3f8510fcb8451931e3b6153ebc",
      "parents": [
        "beb1ca03bfe707d6d1fcad21fcbaa63af49c82f8"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Jul 14 12:36:19 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 29 22:14:11 2011 +0400"
      },
      "message": "bgpd: more SAFI fixes\n\n(with resolved conflict in bgpd/bgp_packet.c)\n\nTwo macros resolving to the same integer constant broke a case block and\na more thorough merge of BGP_SAFI_VPNV4 and BGP_SAFI_VPNV6 was\nperformed.\n\n* bgpd.h: MPLS-labeled VPN SAFI is AFI-independent, switch to single\n* macro\n* bgp_capability_test.c: update test data\n* bgp_mp_attr_test.c: idem\n* bgp_route.c: (bgp_maximum_prefix_overflow, bgp_table_stats_vty) update\n  macro and check conditions (where appropriate)\n* bgp_packet.c: (bgp_route_refresh_send, bgp_capability_send,\n  bgp_update_receive, bgp_route_refresh_receive): idem\n* bgp_open.c: (bgp_capability_vty_out, bgp_afi_safi_valid_indices,\n  bgp_open_capability_orf, bgp_open_capability): idem\n* bgp_attr.c: (bgp_mp_reach_parse, bgp_packet_attribute,\n  bgp_packet_withdraw): idem\n"
    },
    {
      "commit": "7ccf5e59c13773097dd551b8a7384b99b7f46927",
      "tree": "205ee10231ebf765cf3097c5578c78c0d302a268",
      "parents": [
        "171c9a996dd75a8b9aa596288c974f9ac0fbc5d6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sat Sep 10 16:53:30 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:43:03 2011 +0400"
      },
      "message": "bgpd: spelling\n"
    },
    {
      "commit": "1212dc1961e81d5ef6e576b854e979ea29284f51",
      "tree": "bc27c64ae0463c1787d641f2946b3e64f24126d3",
      "parents": [
        "d68ab1009f42c5ed62f7c6b0b5700f5f0469a35b"
      ],
      "author": {
        "name": "heasley",
        "email": "heas@shrubbery.net",
        "time": "Mon Sep 12 13:27:52 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 21:07:07 2011 +0400"
      },
      "message": "bgpd: add useful notification logs (BZ#616)\n\n* bgp_packet.c\n  * bgp_notify_send_with_data(): add calls to zlog_info()\n"
    },
    {
      "commit": "036a6e6cf63a1046ab260d090719b305069288eb",
      "tree": "638b920464ce82b188e32013f768d6f5d7b1a6dd",
      "parents": [
        "8dd1a8daae0b15065d54c46f82d44d21aa7a2320",
        "b881c7074bb698aeb1b099175b325734fc6e44d2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jul 29 18:16:25 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jul 29 18:16:25 2011 +0100"
      },
      "message": "Merge branch \u0027attr-errors\u0027\n\nContains BGP fixes:\n\n- set extcommunity crash: tihs patch tries to make the refcounting more robust\n  but does not fully solve the problem, sadly.\n- BGP attribute error handling: Little testing.\n"
    },
    {
      "commit": "fdbc8e77c88f751924299d0bc752371d5cc31116",
      "tree": "8f8a5b59c222552b14f3fb79efeb52ff83d1c8b1",
      "parents": [
        "072990e22e66ed9a15261b70658dc4a8801975b5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Apr 11 16:31:43 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Apr 13 15:13:33 2011 +0100"
      },
      "message": "bgpd: trivial format / warning fixes\n\n* bgp_aspath.c: (assegments_parse) just bail early if length doesn\u0027t match\n  and fix the formatting.\n* bgp_network.c: add include needed for set_nonblocking\n* bgp_packet.c: formatting\n"
    },
    {
      "commit": "eac5702d06ee574e9e155c4e60c251e525dc4149",
      "tree": "0b2fc1b7ff7432d21df8e0346736f6bf2f25287a",
      "parents": [
        "58192df7746231fbc82e248b5ddfc7cab95ab1e7"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:25 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: enable TCP corking\n\n* bgp_packet.c: (bgp_write) On BGP write, use TCP_CORK to provide hints to\n  kernel about TCP buffering.  This will cause BGP packets to occur in\n  bigger chunks (full size MTU), improving performance and getting rid of\n  one of the problems reported in the UNH BGP conformance test.\n"
    },
    {
      "commit": "35398589cf1293956dfefb5096aa5284c72a696f",
      "tree": "a0d844e42273fd0ee217652a6fd33552661f8b6f",
      "parents": [
        "2c9fd7e07283b8904ef20030c9dadb032e999b12"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 05 10:26:23 2010 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 17:30:52 2011 +0000"
      },
      "message": "bgpd: leave peer socket in non-blocking mode (mostly)\n\n* bgpd: Rather than toggling socket in/out of non-block mode, just leave it\n  in nonblocking mode.\n\n  One exception is in bgp_notify which only happens just before close.\n"
    },
    {
      "commit": "b881c7074bb698aeb1b099175b325734fc6e44d2",
      "tree": "70b4816a083166bbf00c1f85f19a67df0c0a5948",
      "parents": [
        "c112af27ed8f158ecece0d73ce2016c166076c00"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 23 16:35:42 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "bgpd: Implement revised error handling for partial optional/trans. attributes\n\n* BGP error handling generally boils down to \"reset session\". This was fine\n  when all BGP speakers pretty much understood all BGP messages. However\n  the increasing deployment of new attribute types has shown this approach\n  to cause problems, in particular where a new attribute type is \"tunneled\"\n  over some speakers which do not understand it, and then arrives at a speaker\n  which does but considers it malformed (e.g. corruption along the way, or\n  because of early implementation bugs/interop issues).\n\n  To mitigate this drafts before the IDR (likely to be adopted) propose to\n  treat errors in partial (i.e.  not understood by neighbour), optional\n  transitive attributes, when received from eBGP peers, as withdrawing only\n  the NLRIs in the affected UPDATE, rather than causing the entire session\n  to be reset.  See:\n\n   http://tools.ietf.org/html/draft-scudder-idr-optional-transitive\n\n* bgp_aspath.c: (assegments_parse) Replace the \"NULL means valid, 0-length\n  OR an error\" return value with an error code - instead taking\n  pointer to result structure as arg.\n  (aspath_parse) adjust to suit previous change, but here NULL really\n  does mean error in the external interface.\n* bgp_attr.h (bgp_attr_parse) use an explictly typed and enumerated\n  value to indicate return result.\n  (bgp_attr_unintern_sub) cleans up just the members of an attr, but not the\n  attr itself, for benefit of those who use a stack-local attr.\n* bgp_attr.c: (bgp_attr_unintern_sub) split out from bgp_attr_unintern\n  (bgp_attr_unintern) as previous.\n  (bgp_attr_malformed) helper function to centralise decisions on how to\n  handle errors in attributes.\n  (bgp_attr_{aspathlimit,origin,etc..}) Use bgp_attr_malformed.\n  (bgp_attr_aspathlimit) Subcode for error specifc to this attr should be\n  BGP_NOTIFY_UPDATE_OPT_ATTR_ERR.\n  (bgp_attr_as4_path) be more rigorous about checks, ala bgp_attr_as_path.\n  (bgp_attr_parse) Adjust to deal with the additional error level that\n  bgp_attr_ parsers can raise, and also similarly return appropriate\n  error back up to (bgp_update_receive). Try to avoid leaking as4_path.\n* bgp_packet.c: (bgp_update_receive) Adjust to deal with BGP_ATTR_PARSE_WITHDRAW\n  error level from bgp_attr_parse, which should lead to a withdraw, by\n  making the attribute parameter in call to (bgp_nlri_parse) conditional\n  on the error, so the update case morphs also into a withdraw.\n  Use bgp_attr_unintern_sub from above, instead of doing this itself.\n  Fix error case returns which were not calling bgp_attr_unintern_sub\n  and probably leaking memory.\n* tests/aspath_test.c: Fix to work for null return with bad segments\n"
    },
    {
      "commit": "f6f434b2822c453f898552537180a812538bd19e",
      "tree": "81f5de3c1eeb6679635e7363396c08b807b04ad9",
      "parents": [
        "50ef565e4e689ba653b9709be4d28a01f6cca885"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 23 21:28:03 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "bgpd: Try fix extcommunity resource allocation probs, particularly with \u0027set extcom..\u0027\n\n* Extended communities has some kind of resource allocation problem which\n  causes a double-free if the \u0027set extcommunity ...\u0027 command is used.\n  Try fix by properly interning extcommunities.\n\n  Also, more generally, make unintern functions take a double pointer\n  so they can NULL out callers references - a usefully defensive programming\n  pattern for functions which make refs invalid.\n\n  Sadly, this patch doesn\u0027t fix the problem entirely - crashes still\n  occur on session clear.\n\n* bgp_ecommunity.h: (ecommunity_{free,unintern}) take double pointer\n  args.\n* bgp_community.h: (community_unintern) ditto\n* bgp_attr.h: (bgp_attr_intern) ditto\n* bgp_aspath.h: (bgp_aspath.h) ditto\n* (general) update all callers of above\n* bgp_routemap.c: (route_set_ecommunity_{rt,soo}) intern the new extcom added\n  to the attr, and unintern any old one.\n  (route_set_ecommunity_{rt,soo}_compile) intern the extcom to be used\n  for the route-map set.\n  (route_set_ecommunity_*_free) unintern to match, instead of free\n  (route_set_ecommunity_soo) Do as _rt does and don\u0027t just leak\n  any pre-existing community, add to it (is additive right though?)\n"
    },
    {
      "commit": "c7aa8abd8788c3607ad0131f02e892cf92221e40",
      "tree": "01495f12e5a9fa0cff3b1ddecb24bccb4975de35",
      "parents": [
        "403138e189c24f6867824c4eeb668d11564e1ca0"
      ],
      "author": {
        "name": "Dmitrij Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Fri Jan 14 18:27:05 2011 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 14 18:27:05 2011 +0300"
      },
      "message": "bgpd: fix handling of \"Unsupported Capability\"\n\n* bgp_packet.c: (bgp_notify_receive) justify the difference between\nBGP_NOTIFY_OPEN_UNSUP_PARAM and BGP_NOTIFY_OPEN_UNSUP_CAPBL cases, as\nit is explained in RFC5492, page 3, paragraph 1.\n\n\"Unsupported Capability\" error does not mean, that the peer doesn\u0027t\nsupport capabilities advertisement -- quite the opposite (if the peer\nwould not support capabilities advertisement, the code would be\n\"Unsupported Optional Parameter\"). Thus there is no reason to mark\nthe peer as one non-supporting capabilities advertisement.\n\nExample: suppose the peer is in fact IPv6-only, but we didn\u0027t configure\nanything address-family specific for it. Then, the peer would refuse\nthe session with \"Unsupported Capability\" code. If we internally set\nthe peer as non-supporting capabilities advertisement after that, we\nwill not be able to establish the session with it ever, even with a\nfixed configuration -- IPv6-only BGP session cannot be established\nwithout capabilities.\n\nIn practice an edge case would be seen as the same IPv6 peer working\nwith its \"neighbor\" block read from bgpd.conf, but not working, when\nslowly input in \"conf t\" mode.\n"
    },
    {
      "commit": "d3ddb22e902bc4dc175ed6974515f6e14d9be931",
      "tree": "e0f0fa91e7814c4814dbbd60352cc073496d71f7",
      "parents": [
        "cf8a831bcb53b60a7b5c4b26dda7646ebc7506d8"
      ],
      "author": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 10:47:49 2010 -0400"
      },
      "committer": {
        "name": "Greg Troxel",
        "email": "gdt@ir.bbn.com",
        "time": "Fri Sep 17 10:47:49 2010 -0400"
      },
      "message": "Set from even if binfo-\u003eextra is NULL.\n\nbgpd/bgp_packet.c:bgp_update_packet(): When extracting the peer, don\u0027t\n  fail to extract it because \"binfo-\u003eextra\" is NULL.  While one should\n  certainly avoid dereferencing binfo-\u003eextra, that\u0027s not a good reason\n  not to use binfo-\u003epeer.\n\nFixes https://bugzilla.quagga.net/show_bug.cgi?id\u003d497.\nPatch by Eric Sobocinksi.\n"
    },
    {
      "commit": "d64379e8f3c0636df53ed08d5b2f1946cfedd0e3",
      "tree": "c34d8f271fe3be61cdfd23327ef73f2ede966924",
      "parents": [
        "e26873fd8f0c4306eff65de94a45b4114fc81b98"
      ],
      "author": {
        "name": "Chris Hall",
        "email": "chris.hall@highwayman.com",
        "time": "Fri May 14 16:38:39 2010 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri May 14 16:38:39 2010 +0400"
      },
      "message": "bgpd: tighten bounds checking in RR ORF msg reader\n\n* bgp_packet.c: (bgp_route_refresh_receive) add validation of\n  \"Length\" (RFC5292) field value, check input stream bounds\n  each time bytes are pulled from it\n"
    },
    {
      "commit": "65957886bfd0dd9d95360d8b015781fc82cc09be",
      "tree": "71352e214bd59277a50a43779bb2cbafbace6cc3",
      "parents": [
        "2cd754de60210748e61069fed2c9d4086d24c21e"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 15 16:22:10 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Jan 15 16:22:10 2010 +0300"
      },
      "message": "bgp: use monotonic clock for time of day\n\nBGP uses time() to get system time of day; but that value\nfluctuates with time adjustments from NTP. This can cause premature\nflapping of peer sessions and other failures.\n\nUse the system monotonic clock supported by Quagga thread library\nto avoid issue.\n\nSee: http://bugzilla.vyatta.com/show_bug.cgi?id\u003d4467\n\n* bgpd/bgp_fsm.c\n  * bgp_uptime_reset(): dismiss function\n* bgpd/bgpd.c\n  * bgp_clock(): new function\n* bgpd/bgp_damp.c\n  * bgp_reuse_timer(): employ bgp_clock() instead of time(NULL)\n  * bgp_damp_withdraw(): idem\n  * bgp_damp_update(): idem\n  * bgp_damp_scan(): idem\n  * bgp_damp_info_vty(): idem\n  * bgp_damp_reuse_time_vty(): idem\n* bgpd/bgp_fsm.c\n  * bgp_routeadv_timer(): idem\n  * bgp_stop(): idem\n  * bgp_establish(): idem\n* bgpd/bgp_packet.c\n  * bgp_update_receive(): idem\n* bgpd/bgp_route.c\n  * bgp_update_rsclient(): idem\n  * bgp_update_main(): idem\n  * bgp_static_update_rsclient(): idem\n  * bgp_static_update_main(): idem\n  * bgp_static_update_vpnv4(): idem\n  * bgp_aggregate_route(): idem\n  * bgp_aggregate_add(): idem\n  * bgp_redistribute_add(): idem\n* bgpd/bgp_snmp.c\n  * bgpPeerTable(): idem\n  * bgpTrapEstablished(): idem\n  * bgpTrapBackwardTransition(): idem\n* bgpd/bgpd.c\n  * peer_create(): idem\n  * peer_uptime(): idem\n  * bgp_master_init(): idem\n"
    },
    {
      "commit": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "fb982c25aa771b7c7425a3c3cce0a2cda0a715de",
      "tree": "74aa4dc86b04365d90a1030682796421b0eff011",
      "parents": [
        "5921ef9aae3b5d6ff8663298f649fb9d76594acd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 04 20:15:47 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 04 20:15:47 2007 +0000"
      },
      "message": "[bgpd] Trim memory usage of BGP routes\n\n2007-05-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.h: (struct info) Move less frequently used\n\t  fields to a lazily allocated struct info_extra.\n\t  Export bgp_info_extra_get\n\t* bgp_route.c: (bgp_info_extra_new) allocate extra\n\t  (bgp_info_extra_free) Free damp info and the info_extra.\n\t  (bgp_info_extra_get) Retrieve the info_extra of a struct\n\t  info, allocating as required.\n\t  (generally) adjust to use info-\u003eextra\n\t* bgp_damp.c: (generally) use bgp_info_extra_get to access\n\t  dampinfo\n\t* bgp_attr.h: Move rarely allocated attributes from struct attr\n\t  to a struct attr_extra, for a substantial saving in size of\n\t  struct attr.\n\t* bgp_attr.c: (bgp_attr_extra_{new,free}), new, self-explanatory.\n\t  (bgp_attr_extra_get) Get the attr_extra for a given struct\n\t  attr, allocating it if needs be.\n\t  (bgp_attr_dup) Shallow copy the struct attr and its attr_extra.\n\t  (generally) adjust to know about attr-\u003eextra.\n\t* bgp_debug.c: (bgp_dump_attr) ditto\n\t* bgp_vty.c: (show_bgp_memory) print attr and info extra sizes.\n\t* bgp_nexthop.c: (generally) adjust to know about attr-\u003eextra\n\t  and info-\u003eextra.\n\t* bgp_{packet,routemap,snmp,zebra}.c: ditto\n\t* lib/memtypes.c: Add MTYPE_ATTR_EXTRA and MTYPE_BGP_ROUTE_EXTRA\n"
    },
    {
      "commit": "ed3ebfa36b45fe487015e1918e848f0ff4500bff",
      "tree": "06e26892b62cc4f109e0d63718f3d7fa1c3bf54a",
      "parents": [
        "53d9f67a18dc59fd688fce999cb35653010a54fb"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:50:16 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:50:16 2006 +0000"
      },
      "message": "[bgpd] Coverity CID #64: Needless NULL check, CID #64: Deref of potentially NULL pointer.\n\n2006-10-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_packet.c: (bgp_update_packet) adv-\u003ern can not be NULL,\n\t  check is bogus - changed to assert(), CID#64.\n\t  binfo is checked for NULL, but then dereferenced\n\t  unconditionally, fix, CID #63.\n\t  (bgp_withdraw_packet) Assert adv-\u003ern is valid, as with\n\t  bgp_update_packet().\n"
    },
    {
      "commit": "dcdf399fbc7420d3edc230c9646f720825fcecda",
      "tree": "d4712072c844fff67e49e44fc9503d0b11f8062f",
      "parents": [
        "876b8be0ab24721e8f94d47dde022563f76db992"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:39:59 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:39:59 2006 +0000"
      },
      "message": "[bgpd] Bug #302 fixes. ClearingCompleted event gets flushed, leaving peers stuck in Clearing.\n\n2006-10-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_fsm.h: Remove BGP_EVENT_FLUSH_ADD, dangerous and not\n\t  needed.\n\t* bgp_fsm.c: (bgp_stop) Move BGP_EVENT_FLUSH to the top of the\n\t  of the function, otherwise it could flush a ClearingCompleted\n          event, bug #302.\n\t* bgp_packet.c: Replace all BGP_EVENT_FLUSH_ADD with\n\t  BGP_EVENT_ADD, fixing bug #302.\n"
    },
    {
      "commit": "ca058a30b1ea57f83871ab4cf1c9a91ea4064d52",
      "tree": "ab38ab59bad607c9b41a093cb8b35bec766f30b3",
      "parents": [
        "2815e61ffbbf9c362896f3912d925cf78e125ee1"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 02:58:49 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 02:58:49 2006 +0000"
      },
      "message": "[bgpd] Fix 0.99 shutdown regression, introduce Clearing and Deleted states\n\n2006-09-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Fix some niggly issues around \u0027shutdown\u0027 and clearing\n\t  by adding a Clearing FSM wait-state and a hidden \u0027Deleted\u0027\n\t  FSM state, to allow deleted peers to \u0027cool off\u0027 and hit 0\n\t  references. This introduces a slow memory leak of struct peer,\n\t  however that\u0027s more a testament to the fragility of the\n\t  reference counting than a bug in this patch, cleanup of\n\t  reference counting to fix this is to follow.\n\t* bgpd.h: Add Clearing, Deleted states and Clearing_Completed\n\t  and event.\n\t* bgp_debug.c: (bgp_status_msg[]) Add strings for Clearing and\n\t  Deleted.\n\t* bgp_fsm.h: Don\u0027t allow timer/event threads to set anything\n\t  for Deleted peers.\n\t* bgp_fsm.c: (bgp_timer_set) Add Clearing and Deleted. Deleted\n\t  needs to stop everything.\n\t  (bgp_stop) Remove explicit fsm_change_status call, the\n\t  general framework handles the transition.\n\t  (bgp_start) Log a warning if a start is attempted on a peer\n\t  that should stay down, trying to start a peer.\n\t  (struct .. FSM) Add Clearing_Completed\n\t  events, has little influence except when in state\n\t  Clearing to signal wait-state can end.\n\t  Add Clearing and Deleted states, former is a wait-state,\n\t  latter is a placeholder state to allow peers to disappear\n\t  quietly once refcounts settle.\n\t  (bgp_event) Try reduce verbosity of FSM state-change debug,\n\t  changes to same state are not interesting (Established-\u003eEstablished)\n\t  Allow NULL action functions in FSM.\n\t* bgp_packet.c: (bgp_write) Use FSM events, rather than trying\n\t  to twiddle directly with FSM state behind the back of FSM.\n\t  (bgp_write_notify) ditto.\n\t  (bgp_read) Remove the vague ACCEPT_PEER peer_unlock, or else\n\t  this patch crashes, now it leaks instead.\n\t* bgp_route.c: (bgp_clear_node_complete) Clearing_Completed\n\t  event, to end clearing.\n\t  (bgp_clear_route) See extensive comments.\n\t* bgpd.c: (peer_free) should only be called while in Deleted,\n\t  peer refcounting controls when peer_free is called.\n\t  bgp_sync_delete should be here, not in peer_delete.\n\t  (peer_delete) Initiate delete.\n\t  Transition to Deleted state manually.\n\t  When removing peer from indices that provide visibility of it,\n\t  take great care to be idempotent wrt the reference counting\n\t  of struct peer through those indices.\n\t  Use bgp_timer_set, rather than replicating.\n\t  Call to bgp_sync_delete isn\u0027t appropriate here, sync can be\n\t  referenced while shutting down and finishing deletion.\n\t  (peer_group_bind) Take care to be idempotent wrt list references\n\t  indexing peers.\n"
    },
    {
      "commit": "a3b6ea56a0add7d0972a66d96e1fbcf5461eecdb",
      "tree": "a7bb8a005ab41ce30c43dd0fc2fab487c0e5f613",
      "parents": [
        "5f03f141eced8bad4971fcc6ec7d7a538c227d8c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 04 07:52:12 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 04 07:52:12 2006 +0000"
      },
      "message": "[bgpd] bug #210: Enable crucial VPNv4 code which was disabled\n\n2006-05-04 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) VPNv4 fixes. Certain VPNv4 code was not enabled.\n\t  See bug #210.\n\t* bgp_attr.{c,h}: (bgp_packet_{withdraw,attribute}) Tag should be\n\t  u_char really.\n\t* bgp_packet.c: (bgp_{update,withdraw}_packet) Enable some\n\t  VPNv4 code which inexplicably was ifdef\u0027d out. comments from\n\t  a tester on IRC suggest this fixes bug #210.\n"
    },
    {
      "commit": "e8e1946edf6ba87ef53832cdceccc39d7f0c3f26",
      "tree": "fcdaf92bf4129a8a58825bd21ae841a6b3b2bda8",
      "parents": [
        "779adb0147cfff1a831b08853976342ad2110fcd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:16:55 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:16:55 2006 +0000"
      },
      "message": "[compiler] miscellaneous trivial compiler warning fixes\n\n2006-01-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n        * (general) various miscellaneous compiler warning fixes.\n          Remove redundant break statements from switch clauses\n          which return.\n          return from main, not exit, cause it annoys SOS.\n          Remove stray semi-colons which cause empty-statement\n          warnings.\n\t* zebra/main.c: (sighup) remove private declaration of external\n\t  function.\n"
    },
    {
      "commit": "2d74db55c463231e3542207bc3d940e2563e6b5b",
      "tree": "60f4c58957899ceb7987729882d948d59fe26ecf",
      "parents": [
        "5e4914c31ead7b99eeed73067451367336b21422"
      ],
      "author": {
        "name": "jardin",
        "email": "jardin",
        "time": "Sat Oct 01 00:07:50 2005 +0000"
      },
      "committer": {
        "name": "jardin",
        "email": "jardin",
        "time": "Sat Oct 01 00:07:50 2005 +0000"
      },
      "message": "2005-09-30 Vincent Jardin \u003cvincent.jardin@6wind.com\u003e\n\n\t* bgp_packet.c: fix compilation when DEBUG is used.\n"
    },
    {
      "commit": "94f2b3923e9663d0355a829f22e4e31cf68ee7b8",
      "tree": "59c0291a76b1c97fbb089abb479307f19cdfd4c1",
      "parents": [
        "7cad40007b9714dba65065916ea68577f9d3d6dd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 12:44:16 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 12:44:16 2005 +0000"
      },
      "message": "2005-06-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) The great bgpd extern and static\u0027ification.\n\t* bgp_routemap.c: remove unused ROUTE_MATCH_ASPATH_OLD code\n\t  (route_set_metric_compile) fix u_int32_t to ULONG_MAX comparison\n\t  warnings.\n\t* bgp_route.h: (bgp_process, bgp_withdraw, bgp_update) export these\n\t  used by various files which had their own private declarations,\n\t  in the case of mplsvpn - incorrect.\n"
    },
    {
      "commit": "200df115ea0ba6f54151d60fe5e9a7f6948de7c3",
      "tree": "2aedc0af80d2e805cdf2cefd50432423d2871216",
      "parents": [
        "b31b813671d96ea9e96801508442a90f0ef503fa"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 01 11:17:05 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 01 11:17:05 2005 +0000"
      },
      "message": "2005-06-01 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd/(general) refcount struct peer and bgp_info, hence allowing us\n\t  add work_queues for bgp_process.\n\t* bgpd/bgp_route.h: (struct bgp_info) Add \u0027lock\u0027 field for refcount.\n\t  Add bgp_info_{lock,unlock} helper functions.\n\t  Add bgp_info_{add,delete} helpers, to remove need for\n\t  users managing locking/freeing of bgp_info and bgp_node\u0027s.\n\t* bgpd/bgp_table.h: (struct bgp_node) Add a flags field, and\n\t  BGP_NODE_PROCESS_SCHEDULED to merge redundant processing of\n\t  nodes.\n\t* bgpd/bgp_fsm.h: Make the ON/OFF/ADD/REMOVE macros lock and unlock\n\t  peer reference as appropriate.\n\t* bgpd/bgp_damp.c: Remove its internal prototypes for\n\t  bgp_info_delete/free. Just use bgp_info_delete.\n\t* bgpd/bgpd.h: (struct bgp_master) Add work_queue pointers.\n\t  (struct peer) Add reference count \u0027lock\u0027\n\t  (peer_lock,peer_unlock) New helpers to take/release reference\n\t  on struct peer.\n\t* bgpd/bgp_advertise.c: (general) Add peer and bgp_info refcounting\n\t  and balance how references are taken and released.\n\t  (bgp_advertise_free) release bgp_info reference, if appropriate\n\t  (bgp_adj_out_free) unlock peer\n\t  (bgp_advertise_clean) leave the adv references alone, or else\n\t  call bgp_advertise_free cant unlock them.\n\t  (bgp_adj_out_set) lock the peer on new adj\u0027s, leave the reference\n\t  alone otherwise. lock the new bgp_info reference.\n\t  (bgp_adj_in_set) lock the peer reference\n\t  (bgp_adj_in_remove) and unlock it here\n\t  (bgp_sync_delete) make hash_free on peer conditional, just in\n\t  case.\n\t* bgpd/bgp_fsm.c: (general) document that the timers depend on\n\t  bgp_event to release a peer reference.\n\t  (bgp_fsm_change_status) moved up the file, unchanged.\n\t  (bgp_stop) Decrement peer lock as many times as cancel_event\n\t  canceled - shouldnt be needed but just in case.\n\t  stream_fifo_clean of obuf made conditional, just in case.\n\t  (bgp_event) always unlock the peer, regardless of return value\n\t  of bgp_fsm_change_status.\n\t* bgpd/bgp_packet.c: (general) change several bgp_stop\u0027s to BGP_EVENT\u0027s.\n\t  (bgp_read) Add a mysterious extra peer_unlock for ACCEPT_PEERs\n\t  along with a comment on it.\n\t* bgpd/bgp_route.c: (general) Add refcounting of bgp_info, cleanup\n\t  some of the resource management around bgp_info. Refcount peer.\n\t  Add workqueues for bgp_process and clear_table.\n\t  (bgp_info_new) make static\n\t  (bgp_info_free) Ditto, and unlock the peer reference.\n\t  (bgp_info_lock,bgp_info_unlock) new exported functions\n\t  (bgp_info_add) Add a bgp_info to a bgp_node in correct fashion,\n\t  taking care of reference counts.\n\t  (bgp_info_delete) do the opposite of bgp_info_add.\n\t  (bgp_process_rsclient) Converted into a work_queue work function.\n\t  (bgp_process_main) ditto.\n\t  (bgp_processq_del) process work queue item deconstructor\n\t  (bgp_process_queue_init) process work queue init\n\t  (bgp_process) call init function if required, set up queue item\n\t  and add to queue, rather than calling process functions directly.\n\t  (bgp_rib_remove) let bgp_info_delete manage bgp_info refcounts\n\t  (bgp_rib_withdraw) ditto\n\t  (bgp_update_rsclient) let bgp_info_add manage refcounts\n\t  (bgp_update_main) ditto\n\t  (bgp_clear_route_node) clear_node_queue work function, does\n\t  per-node aspects of what bgp_clear_route_table did previously\n\t  (bgp_clear_node_queue_del) clear_node_queue item delete function\n\t  (bgp_clear_node_complete) clear_node_queue completion function,\n\t  it unplugs the process queues, which have to be blocked while\n\t  clear_node_queue is being processed to prevent a race.\n\t  (bgp_clear_node_queue_init) init function for clear_node_queue\n\t  work queues\n\t  (bgp_clear_route_table) Sets up items onto a workqueue now, rather\n\t  than clearing each node directly. Plugs both process queues to\n\t  avoid potential race.\n\t  (bgp_static_withdraw_rsclient) let bgp_info_{add,delete} manage\n\t  bgp_info refcounts.\n\t  (bgp_static_update_rsclient) ditto\n\t  (bgp_static_update_main) ditto\n\t  (bgp_static_update_vpnv4) ditto, remove unneeded cast.\n\t  (bgp_static_withdraw) see bgp_static_withdraw_rsclient\n\t  (bgp_static_withdraw_vpnv4) ditto\n\t  (bgp_aggregate_{route,add,delete}) ditto\n\t  (bgp_redistribute_{add,delete,withdraw}) ditto\n\t* bgpd/bgp_vty.c: (peer_rsclient_set_vty) lock rsclient list peer\n\t  reference\n\t  (peer_rsclient_unset_vty) ditto, but unlock same reference\n\t* bgpd/bgpd.c: (peer_free) handle frees of info to be kept for lifetime\n\t  of struct peer.\n\t  (peer_lock,peer_unlock) peer refcount helpers\n\t  (peer_new) add initial refcounts\n\t  (peer_create,peer_create_accept) lock peer as appropriate\n\t  (peer_delete) unlock as appropriate, move out some free\u0027s to\n\t  peer_free.\n\t  (peer_group_bind,peer_group_unbind) peer refcounting as\n\t  appropriate.\n\t  (bgp_create) check CALLOC return value.\n\t  (bgp_terminate) free workqueues too.\n\t* lib/memtypes.c: Add MTYPE_BGP_PROCESS_QUEUE and\n\t  MTYPE_BGP_CLEAR_NODE_QUEUE\n"
    },
    {
      "commit": "e83e2080cecffa86267c07b46bbb5a9677b37996",
      "tree": "4523977a4fea76bdf2609ecb656a175aeaa4032f",
      "parents": [
        "22db9dec63766cdf6dcd3ecb4b48177fb0e48143"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu May 19 02:12:25 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu May 19 02:12:25 2005 +0000"
      },
      "message": "2005-05-19 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* bgp_network.c: (bgp_accept) use XSTRDUP\n\t* bgpd.c: (peer_delete) XFREE the correct memtype, not free.\n\t  (peer_create) use XSTRDUP\n\t* bgp_packet.c: (bgp_stream_dup) deleted, stream_dup should be used\n\t  (various) update -\u003e s/bgp_stream_dup/stream_dup\n"
    },
    {
      "commit": "1eb8ef2584833f18fb674e127d59cb5a7f771482",
      "tree": "f5b09d4781de9a9b08839fefb6530e64d2d2ec31",
      "parents": [
        "5920990fecba7e2430af3cfaa8bcbaed40d0ba1a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 07 07:30:20 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 07 07:30:20 2005 +0000"
      },
      "message": "2005-04-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global): Fix up list loops to match changes in lib/linklist,\n\t  and some basic auditing of usage.\n\t* configure.ac: define QUAGGA_NO_DEPRECATED_INTERFACES\n\t* HACKING: Add notes about deprecating interfaces and commands.\n\t* lib/linklist.h: Add usage comments.\n\t  Rename getdata macro to listgetdata.\n\t  Rename nextnode to listnextnode and fix its odd behaviour to be\n\t  less dangerous.\n\t  Make listgetdata macro assert node is not null, NULL list entries\n          should be bug condition.\n          ALL_LIST_ELEMENTS, new macro, forward-referencing macro for use\n          with for loop, Suggested by Jim Carlson of Sun.\n          Add ALL_LIST_ELEMENTS_RO for cases which obviously do not need the\n          \"safety\" of previous macro.\n\t  LISTNODE_ADD and DELETE macros renamed to ATTACH, DETACH, to\n\t  distinguish from the similarly named functions, and reflect their\n\t  effect better.\n\t  Add a QUAGGA_NO_DEPRECATED_INTERFACES define guarded section\n\t  with the old defines which were modified above,\n\t  for backwards compatibility - guarded to prevent Quagga using it..\n\t* lib/linklist.c: fix up for linklist.h changes.\n\t* ospf6d/ospf6_abr.c: (ospf6_abr_examin_brouter) change to a single\n\t  scan of the area list, rather than scanning all areas first for\n\t  INTER_ROUTER and then again for INTER_NETWORK. According to\n\t  16.2, the scan should be area specific anyway, and further\n\t  ospf6d does not seem to implement 16.3 anyway.\n"
    },
    {
      "commit": "9985f83ce7102f64b15f744b60320f8d14a8a5ff",
      "tree": "344629bdc2b4a7d53b8d7ca1705c9be2ca282d18",
      "parents": [
        "083ee9d9cdbf72a452b9af96e62d0625ea712cd9"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Feb 09 15:51:56 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Feb 09 15:51:56 2005 +0000"
      },
      "message": "2005-02-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) Update code to match stream.h changes.\n\t  stream_get_putp effectively replaced with stream_get_endp.\n\t  stream_forward renamed to stream_forward_getp.\n\t  stream_forward_endp introduced to replace some previous\n\t  setting/manual twiddling of putp by daemons.\n\t* lib/stream.h: Remove putp. Update reference to putp with endp.\n\t  Add stream_forward_endp, which daemons were doing manually.\n\t  Rename stream_forward to stream_forward_getp.\n\t  lib/stream.c: Remove/update references to putp.\n\t  introduce stream_forward_endp.\n"
    },
    {
      "commit": "93406d87e68a0e9cf5ce0240461395cd59c143b6",
      "tree": "b1cb2bae2eca7c5206565f73169cf43bf8cf892d",
      "parents": [
        "c9502438e822199370fe87100c725e1092e943c1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:40:33 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:40:33 2005 +0000"
      },
      "message": "\t* bgp_fsm.c, bgp_open.c, bgp_packet.c, bgp_route.[ch], bgp_vty.c,\n\t  bgpd.[ch]: Add BGP_INFO_STALE flag and end-of-rib support. \"bgp\n\t  graceful-restart\" commands added. Show numbers of individual\n\t  messages in \"show ip bgp neighbor\" command. Final pieces of graceful\n\t  restart.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "c9502438e822199370fe87100c725e1092e943c1",
      "tree": "bfeb6babd5d0ba6037ab2aa3a544b2d855e4e8d9",
      "parents": [
        "3d515fd9af9f126667a9c2da9c2f40c4c37c28df"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 22:01:48 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 22:01:48 2005 +0000"
      },
      "message": "\t* bgp_open.c, bgp_packet.c, bgp_vty.c, bgpd.[ch]: Remove \"no neighbor\n\t  capability route-refresh\" commands. Route refresh capability is sent\n\t  anyway now. Preserve dummy deprecated commands.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "f418446bb767d79438e2df689c5bf9563c54b317",
      "tree": "a1c7322c8b54e46a09bf2f402537277fff59c1c3",
      "parents": [
        "6a52d0d155fc8b892e30cdb5e3fbe4c2779bd4cd"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:13:16 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:13:16 2005 +0000"
      },
      "message": "        * bgp_nexthop.c: Improve debug.\n        * bgpd.[ch], bgp_nexthop.c, bgp_snmp.c: Remove useless bgp_get_master()\n          function.\n        * bgp_packet.c: MP AFI_IP update and withdraw parsing.\n        * bgp_fsm.c: Reset peer synctime in bgp_stop(). bgp_fsm_change_status()\n          is better place to log about peer status change than bgp_event().\n          Log in bgp_connect_success().\n        * bgp_vty.c: Fix typo in comment.\n        * bgp_attr.c: Better log about unknown attribute.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "a24a7e1b9e145d4c855d0aa4d919a79f598c645b",
      "tree": "02236b0424330cce2c902a9a971829a3610bac25",
      "parents": [
        "6c20046fd7494f9f529dac1b6f79da51b6efa44d"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 05 08:14:13 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 05 08:14:13 2005 +0000"
      },
      "message": "2005-01-05 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* bgp_packet.c: (bgp_write) set socket to nonblock while writing\n          this should be generalised. See bugzilla #102. Fix supplied by\n\t  wawa@yandex-team.ru (Vladimir Ivanov).\n"
    },
    {
      "commit": "6b51474d91024a4a0e82fccdd55580ce9b3f5561",
      "tree": "93e340952621ac948f0788c5b9ff7bed588a613a",
      "parents": [
        "8325cd7f42d0b494d4866f69013c713bbaef7619"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 21:03:23 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 21:03:23 2004 +0000"
      },
      "message": "2004-12-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* *.c: Change level of debug messages to LOG_DEBUG.\n"
    },
    {
      "commit": "6099b3b56956322567323c11fd698b2328c6826b",
      "tree": "fa537bd0eaa9f7d824f39445eabc928db59050ca",
      "parents": [
        "ae5e24d8678f1e3a60dde58d3382c5ba73d6bb27"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Nov 20 02:06:59 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Nov 20 02:06:59 2004 +0000"
      },
      "message": "2004-11-19 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* global: Replace strerror with safe_strerror.  And vtysh/vtysh.c\n\t  needs to include \"log.h\" to pick up the declaration.\n"
    },
    {
      "commit": "fd79ac918b8feaacebe9719adaac97dffb69137a",
      "tree": "d0665eb68e60da9d6e364414cdb61830f19f33d3",
      "parents": [
        "39db97e4e02eae08a1e18528367b6e9b07eb6a93"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 13 05:06:08 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 13 05:06:08 2004 +0000"
      },
      "message": "2004-10-13 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* (global) more const\u0027ification and fixups of types to clean up code.\n\t* bgp_mplsvpn.{c,h}: (str2tag) fix abuse. Still not perfect,\n          should use something like the VTY_GET_INTEGER macro, but without\n          the vty_out bits..\n        * bgp_routemap.c: (set_aggregator_as) use VTY_GET_INTEGER_RANGE\n          (no_set_aggregator_as) ditto.\n        * bgpd.c: (peer_uptime) fix unlikely bug, where no buffer is\n          returned, add comments about troublesome return value.\n"
    },
    {
      "commit": "c9e52be3f4d98943b67fbbe5d9a7ccd823b88326",
      "tree": "d4045a946af3be8bbdc303162778e8c44057e2f9",
      "parents": [
        "e473b032b860444b9656cee1654b0120f77b52b1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Sep 26 16:09:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Sep 26 16:09:34 2004 +0000"
      },
      "message": "Compiler warnings fixes.\n"
    },
    {
      "commit": "e01f9cbb87123217ac6d88c12ddb784fca9cc5b7",
      "tree": "edf78b44ec8c5979afe0abdeefa8b33572e67ef7",
      "parents": [
        "b9790b34c825e390c818044f6666f73beee1d373"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 09 17:48:53 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 09 17:48:53 2004 +0000"
      },
      "message": "2004-07-09 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        Merge of GNU Zebra cvs2svn changesets r799, r800 and r807.\n\n        * bgp_dump.c: (bgp_dump_attr) cleanup. return status code. check\n          attributes present before printing.\n        * bgp_dump.c: update bgp_dump_attr prototype.\n        * bgp_packet.c: (bgp_update_receive) init attrstr. check status\n          of bgp_dump_attr. Log end-of-rib UPDATEs.\n"
    },
    {
      "commit": "f5ba387492ec163f1200d949a984f12ef88538ba",
      "tree": "c17eef0501ef903883aae2ec62fba0be1a244fa0",
      "parents": [
        "4d4653afe362d6ea549c6e21b27afe01fb8b8aac"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 09 12:11:31 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 09 12:11:31 2004 +0000"
      },
      "message": "2004-07-09 Sowmini Varadhan \u003csowmini.varadhan@sun.com\u003e\n\n        * bgp_packet.c: (bgp_collision_detect) Send NOTIFY on new socket\n          if that is connection we\u0027re closing.\n          (bgp_read) invalid marker check applies to KEEPALIVE too.\n        * bgp_route.c: Ignore multicast NRLI, dont send NOTIFY.\n"
    },
    {
      "commit": "5228ad27e2f3abe0ebb69f66607aedc048b94a13",
      "tree": "a65817a03150dbfeb56a1eaceab526f31be1cc1d",
      "parents": [
        "c2bfbcc38428b53e856617e1da8bbe9f8d2ee2fa"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 04 17:58:18 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 04 17:58:18 2004 +0000"
      },
      "message": "2004-06-04 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * type mismatch fixes\n"
    },
    {
      "commit": "4372df71e191fcf6a6f9616fad80d11cd131c82d",
      "tree": "dd01502f61566bb57fd75e1c4a388181140f2f1d",
      "parents": [
        "e0701b7955b883c5437269a382e1afc76ee71e5c"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 20 10:20:02 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 20 10:20:02 2004 +0000"
      },
      "message": "Merge bgpd changeset 1184 from Zebra repository by Rivo Nurges.\n"
    },
    {
      "commit": "e0701b7955b883c5437269a382e1afc76ee71e5c",
      "tree": "d00034c1b7f369fc8214d401b7a44ef586d73e15",
      "parents": [
        "62843e433d8f85bce381edc6202c4af6c5cec31b"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 20 09:19:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 20 09:19:34 2004 +0000"
      },
      "message": "Merge bgpd changeset 1176 from Zebra repository by Rivo Nurges.\n"
    },
    {
      "commit": "eb821189d2778a93069fc1fc2f104db529ec5a1e",
      "tree": "a623d680931ee722fb946f56476f23efd1f13685",
      "parents": [
        "eb3f463aab7f09e6c1041bf779fd5752b038f847"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 01 08:44:08 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 01 08:44:08 2004 +0000"
      },
      "message": "2004-05-01 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * Revert the attempted clean-up of the dummy peer hack, reverts\n          patchsets 435 (see 2004-02-17 below) and 456.\n"
    },
    {
      "commit": "6ad23f05e36e743b89fc5a9a41e3db7eccb917fb",
      "tree": "522a8914b6aefe124c2e972481e89f408110ef3c",
      "parents": [
        "5de5bbf107f9eacb8d8265f8c0b925b2aed21878"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Feb 17 19:45:10 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Feb 17 19:45:10 2004 +0000"
      },
      "message": "2004-02-17 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * bgpd.h: (bgp_peer) add fd_local and fd_accept\n          file descriptor\u0027s, fd becomes a pointer to one of these.\n        * bgpd.c: (global) adjust for fact that fd is now a pointer.\n          (peer_create_accept) removed.\n        * bgp_route.c: (global) adjust for change of peer fd to pointer\n        * bgp_packet.c: (bgp_collision_detect) adjust and remove the\n          \"replace with other peer\" hack.\n        * bgp_network.c: (bgp_accept) Remove the dummy peer hack.\n          Update peer-\u003efd_accept instead.\n          (global) Adjust fd references - now a pointer.\n        * bgp_fsm.c: (global) adjust peer fd to pointer.\n          (bgp_connection_stop) new function, to stop connection.\n          (global) adjust everything which closed peer fd to use\n          bgp_connection_stop().\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
