)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "6f0e3f6e17687eb25b7b77c4fdc8324837d4700f",
      "tree": "8a94d9212060f0f2ee7cbd0079c2687eed7348dc",
      "parents": [
        "08d3d5b398ae81de7659509f159e814d1bbd4375"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 02:38:51 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 02:38:51 2007 +0000"
      },
      "message": "[autoconf] bugs 162,303,178: Fix \u0027present but can not be compiled\u0027 warnings\n\n2007-05-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: sys/conf.h depends on sys/param.h, at least on\n\t  FBSD 6.2.\n\t  (bug #363) Should check for in_pktinfo for IRDP\n\n2006-05-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: General cleanup of header and type checks, introducing\n\t  an internal define, QUAGGA_INCLUDES, to build up a list of\n\t  stuff to include so as to avoid \u0027present but cant be compiled\u0027\n\t  warnings.\n\t  Misc additional checks of things missing according to autoscan.\n\t  Add LIBM, for bgpd\u0027s use of libm, so as to avoid burdening\n\t  LIBS, and all the binaries, with libm linkage.\n\t  Remove the bad practice of using m4 changequote(), just\n\t  quote the []\u0027s in the case statements properly.\n\t  This should fix bugs 162, 303 and 178.\n\t* */*.{c,h}: Update all HAVE_* to the standard autoconf namespaced\n\t  HAVE_* defines. I.e. HAVE_SA_LEN -\u003e HAVE_STRUCT_SOCKADDR_SA_LEN,\n\t* bgpd/Makefile.am: Add LIBM to bgpd\u0027s LDADD, for pow().\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": "03e214c87bf4537576d2c7e9b2d812d1b0da2f56",
      "tree": "46f53f23bc77af0c8e6835853fbc355c3c342ddf",
      "parents": [
        "923de654c8d251d6714a6f9da2e93c236e935042"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Apr 29 18:31:07 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Apr 29 18:31:07 2007 +0000"
      },
      "message": "[bgpd] Use defines for default weight\n\n2007-04-22 Sebastien Tandel \u003csebastien@tandel.be\u003e\n\n\t* bgp_attr.h : Definition of BGP_ATTR_DEFAULT_WEIGHT.\n\t* bgp_attr.c : (bgp_attr_default_intern) now uses\n\t  bgp_attr_default_set instead of duplicating the same code.\n\t  (general) Use of BGP_ATTR_DEFAULT_WEIGHT. Replace two 16 by\n\t  IPV6_MAX_BYTELEN.\n"
    },
    {
      "commit": "923de654c8d251d6714a6f9da2e93c236e935042",
      "tree": "473cc25308810340efb82724101bd428af352958",
      "parents": [
        "e8eb8340c14f53194786b766992f61cc0abf7a8e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Apr 29 18:25:17 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Apr 29 18:25:17 2007 +0000"
      },
      "message": "[bgpd] Fix warnings: hash callbacks should match hash API declarations\n\n2007-04-22 Sebastien Tandel \u003csebastien@tandel.be\u003e\n\n\t* bgp_advertise.c : (baa_hash_alloc, baa_hash_key, baa_hash_cmp)\n\t  conforms to quagga hash API. Defines _hash_[alloc|key|cmp] with\n\t  void * arguments as defined by the API.\n\t* bgp_aspath.c,h : (aspath_key_make) conforms to quagga hash API.\n\t  Defines _hash_[alloc|key|cmp] with void * arguments as defined by\n\t  the API.\n\t* bgp_attr.c,h : (cluster_hash_alloc, cluster_hash_key_make,\n\t  cluster_hash_cmp, transit_hash_alloc, transit_hash_key_make,\n\t  transit_hash_cmp, attrhash_key_make, attrhash_cmp,\n\t  bgp_attr_hash_alloc) conforms to quagga hash API. Defines\n\t  _hash_[alloc|key|cmp] with void * arguments as defined by the API.\n"
    },
    {
      "commit": "93c1749c828cf750fbcc850730b9f2a872e38325",
      "tree": "05800e33ebd68d5e6a2629d20ba54ad4db0aaa7c",
      "parents": [
        "6dfa827b7be871fc7301d4db04a99b509c9fd7aa"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun Apr 15 19:17:24 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun Apr 15 19:17:24 2007 +0000"
      },
      "message": "[bgpd] Minor performance improvement patch\n\n2007-04-15 Sebastien Tandel \u003csebastien@tandel.be\u003e\n\n\t* bgp_aspath.c: (aspath_as_add, aspath_segment_add) Minor performance\n\t  optimization: while loop should test one pointer instead of two.\n"
    },
    {
      "commit": "6e4ab12f1504caa95edc7702a82f118d0de15a0a",
      "tree": "50b6784229f92d404e5d6509848c135395743f2f",
      "parents": [
        "16d2e2410d6e8cf53fac05b956f3e7ee53bc7234"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:36:48 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:36:48 2007 +0000"
      },
      "message": "[bgpd] Bug #354: Take care to keep reads of MP_(UN)REACH_NLRI in bounds\n\n2007-04-08 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_attr.c: (general) Bug #354: parsing of MP_REACH_NLRI and\n\t  MP_UNREACH_NLRI does not take sufficient care to ensure reads\n\t  from stream buffer stay in-bounds. Hence bgpd may attempt to read\n\t  beyond end of stream, if given a crafted packet. As it uses the\n\t  stream access methods to do so, this will typically result in\n\t  assert() being hit in stream.c. Where code is compiled without\n\t  assert() enabled, result is unknown.\n\t  (struct message attr_str) should be static.\n\t  (bgp_mp_reach_parse) Carefully check length remaining in stream\n\t  against amount desired to read from stream, prior to each read,\n\t  particularly where lengths are conditional on data obtained from\n\t  stream - using STREAM_READABLE.\n\t  Remove code to parse SNPA-number, it\u0027s a defunct field and changed\n\t  to a fixed size in latest BGP MP update RFC - log warning if\n\t  SNPA-number is not 0.\n\t  (bgp_mp_unreach_parse) Check withdraw_length carefully against\n\t  STREAM_READABLE.\n\t  (bgp_attr_parse) If attribute-parser function returns error, log\n\t  warning.\n\t  Log attribute type on mismatch.\n"
    },
    {
      "commit": "16d2e2410d6e8cf53fac05b956f3e7ee53bc7234",
      "tree": "4679c5ed9d1ec64d41da13a44c1fcad76e4da9be",
      "parents": [
        "d9a18f1113b915dd0d2a4883a9149f06dd61352e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:32:10 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:32:10 2007 +0000"
      },
      "message": "[bgpd] V. quick route flap gets mistaken for duplicate, route is then ignored\n\n2007-04-08 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (general) Same bug as fixed on 2006-11-28 by ajs for\n\t  bgp static routes, but for main BGP RIB: Quick \u0027flap\u0027 of routes\n\t  can cause bgpd to mistake a new route for a duplicate route,\n\t  due to presence of removed, but not yet processed BGP RIB entry.\n\t  (bgp_update_rsclient) Ignore REMOVED bgp_info for duplicate,\n\t  restore route instead.\n\t  (bgp_update_main) Ditto.\n"
    },
    {
      "commit": "37a217a59bfd32381034a0ce0adbac1c34cbec37",
      "tree": "2f3d7a298c0b625163cd63bfa9bf32e1aa72012f",
      "parents": [
        "85ef784e8a41a6dd11da42e10368f80c8bdb99d8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:20:29 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:20:29 2007 +0000"
      },
      "message": "[bgpd] bug #352: IPv6/Multicast address-family config not written out\n\n2007-04-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd.c: (general) Fix bug #352\n\t  (bgp_config_write_family_header) write ipv6/multicast\n\t  address family header.\n\t  (bgp_config_write) write out ipv6 multicast AF config.\n"
    },
    {
      "commit": "f2c31acb6f97688af0f368211536829324145919",
      "tree": "6f9887992eeb0890fdf673f9c0794e7d1384edbb",
      "parents": [
        "553bdfe376c49886cbdc2d306fea7b003bead31f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 22 17:48:42 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 22 17:48:42 2007 +0000"
      },
      "message": "[bgpd] Peer delete can race with reconfig leading to crash\n\n2007-02-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_fsm.c: (bgp_fsm_change_status) Handle state change into\n\t  clearing or greater here. Simpler.\n\t  (bgp_event) Clearing state change work moved to previous\n\t* bgp_route.c: (bgp_clear_route_node) Clearing adj-in here\n\t  is too late, as it leaves a race between a peer being deleted\n\t  and an identical peer being configured before clearing\n\t  completes, leading to a crash.\n\t  Simplest fix is to clean peers Adj-in up-front, rather than\n\t  queueing such work.\n\t  (bgp_clear_route_table) Clear peer\u0027s Adj-In and Adj-Out\n\t  up-front here, rather than queueing such work.\n\t  Extensive comment added on the various bits of indexed data\n\t  that exist and how they need to be dealt with.\n\t  (bgp_clear_route) Update comment.\n"
    },
    {
      "commit": "e4529636b77124285cca96a62799d0ff6a7addeb",
      "tree": "a8a50de7413833d5277ed7309248e03719e9efd3",
      "parents": [
        "43cd33a44e010f818633b7f144b5a0be352b41e7"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Dec 12 19:18:21 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Dec 12 19:18:21 2006 +0000"
      },
      "message": "[PtP over ethernet] New peer flag allows much more addressing flexibility\n\n2006-12-12 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (struct connected) Add new ZEBRA_IFA_PEER flag indicating\n\t  whether a peer address has been configured.  Comment now shows\n\t  the new interpretation of the destination addr: if ZEBRA_IFA_PEER\n\t  is set, then it must contain the destination address, otherwise\n\t  it may contain the broadcast address or be NULL.\n\t  (CONNECTED_DEST_HOST,CONNECTED_POINTOPOINT_HOST) Remove obsolete\n\t  macros that were specific to IPv4 and not fully general.\n\t  (CONNECTED_PEER) New macro to check ZEBRA_IFA_PEER flag.\n\t  (CONNECTED_PREFIX) New macro giving the prefix to insert into\n\t  the RIB: if CONNECTED_PEER, then use the destination (peer) address,\n\t  else use the address field.\n\t  (CONNECTED_ID) New macro to come up with an identifying address\n\t  for the struct connected.\n\t* if.c: (if_lookup_address, connected_lookup_address) Streamline\n\t  logic with new CONNECTED_PREFIX macro.\n\t* prefix.h: (PREFIX_COPY_IPV4, PREFIX_COPY_IPV6) New macros\n\t  for better performance than the general prefix_copy function.\n\t* zclient.c: (zebra_interface_address_read) For non-null destination\n\t  addresses, set prefixlen to equal the address prefixlen.  This\n\t  is needed to get the new CONNECTED_PREFIX macro to work properly.\n\t* connected.c: (connected_up_ipv4, connected_down_ipv4,\n\t  connected_up_ipv6, connected_down_ipv6) Simplify logic using the\n\t  new CONNECTED_PREFIX macro.\n\t  (connected_add_ipv4) Set prefixlen in destination addresses (required\n\t  by the CONNECTED_PREFIX macro).  Use CONNECTED_PEER macro instead\n\t  of testing for IFF_POINTOPOINT.  Delete invalid warning message.\n\t  Warn about cases where the ZEBRA_IFA_PEER is set but no\n\t  destination address has been supplied (and turn off the flag).\n\t  (connected_add_ipv6) Add new flags argument so callers may set\n\t  the ZEBRA_IFA_PEER flag.  If peer/broadcast address satisfies\n\t  IN6_IS_ADDR_UNSPECIFIED, then reject it with a warning.\n\t  Set prefixlen in destination address so CONNECTED_PREFIX will work.\n\t* connected.h: (connected_add_ipv6) Add new flags argument so\n\t  callers may set the ZEBRA_IFA_PEER flag.\n\t* interface.c: (connected_dump_vty) Use CONNECTED_PEER macro\n\t  to decide whether the destination address is a peer or broadcast\n\t  address (instead of checking IFF_BROADCAST and IFF_POINTOPOINT).\n\t* if_ioctl.c: (if_getaddrs) Instead of setting a peer address\n\t  only when the IFF_POINTOPOINT is set, we now accept a peer\n\t  address whenever it is available and not the same as the local\n\t  address.  Otherwise (no peer address assigned), we check\n\t  for a broadcast address (regardless of the IFF_BROADCAST flag).\n\t  And must now pass a flags value of ZEBRA_IFA_PEER to\n\t  connected_add_ipv4 when a peer address is assigned.\n\t  The same new logic is used with the IPv6 code as well (and we\n\t  pass the new flags argument to connected_add_ipv6).\n\t  (if_get_addr) Do not bother to check IFF_POINTOPOINT: just\n\t  issue the SIOCGIFDSTADDR ioctl and see if we get back\n\t  a peer address not matching the local address (and set\n\t  the ZEBRA_IFA_PEER in that case).  If there\u0027s no peer address,\n\t  try to grab SIOCGIFBRDADDR regardless of whether IFF_BROADCAST is set.\n\t* if_ioctl_solaris.c: (if_get_addr) Just try the SIOCGLIFDSTADDR ioctl\n\t  without bothering to check the IFF_POINTOPOINT flag.  And if\n\t  no peer address was found, just try the SIOCGLIFBRDADDR ioctl\n\t  without checking the IFF_BROADCAST flag.  Call connected_add_ipv4\n\t  and connected_add_ipv6 with appropriate flags.\n\t* if_proc.c: (ifaddr_proc_ipv6) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* kernel_socket.c: (ifam_read) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* rt_netlink.c: (netlink_interface_addr) Copy logic from iproute2\n\t  to determine local and possible peer address (so there\u0027s no longer\n\t  a test for IFF_POINTOPOINT).  Set ZEBRA_IFA_PEER flag appropriately.\n\t  Pass new flags argument to connected_add_ipv6.\n\t  (netlink_address) Test !CONNECTED_PEER instead of if_is_broadcast\n\t  to determine whether the connected destination address is a\n\t  broadcast address.\n\t* bgp_nexthop.c: (bgp_connected_add, bgp_connected_delete)\n\t  Simplify logic by using new CONNECTED_PREFIX macro.\n\t* ospf_interface.c: (ospf_if_is_configured, ospf_if_lookup_by_prefix,\n\t  ospf_if_lookup_recv_if) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_lsa.c: (lsa_link_ptop_set) Using the new CONNECTED_PREFIX\n\t  macro, both options collapse into the same code.\n\t* ospf_snmp.c: (ospf_snmp_if_update) Simplify logic using new\n\t  CONNECTED_ID macro.\n\t  (ospf_snmp_is_if_have_addr) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) Use new CONNECTED_PEER macro\n\t  instead of testing the IFF_POINTOPOINT flag.\n\t* ospfd.c: (ospf_network_match_iface) Use new CONNECTED_PEER macro\n\t  instead of testing with if_is_pointopoint.  And add commented-out\n\t  code to implement alternative (in my opinion) more elegant behavior\n\t  that has no special-case treatment for PtP addresses.\n\t  (ospf_network_run) Use new CONNECTED_ID macro to simplify logic.\n\t* rip_interface.c: (rip_interface_multicast_set) Use new CONNECTED_ID\n\t  macro to simplify logic.\n\t  (rip_request_interface_send) Fix minor bug: ipv4_broadcast_addr does\n\t  not give a useful result if prefixlen is 32 (we require a peer\n\t  address in such cases).\n\t* ripd.c: (rip_update_interface) Fix same bug as above.\n"
    },
    {
      "commit": "95fdcd8a793d6c271996da221c4030d8ee277891",
      "tree": "ca4c4a63b9b283e6c2f51eafda80f7014b1719db",
      "parents": [
        "ed589c157781f92bcff0e0b1664c75b2dc6d6965"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Dec 08 00:31:22 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Dec 08 00:31:22 2006 +0000"
      },
      "message": "[bgpd] Bug #302, bgpd can get stuck in state Clearing\n\n2006-12-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_fsm.c: Bug #302 fix, diagnosis, suggestions and testing\n\t  by Juergen Kammer \u003cj.kammer@eurodata.de\u003e. Fix follows from\n\t  his suggested fix, just made in a slightly different way.\n\t  (bgp_event) Transitions into Clearing always must call\n\t  bgp_clear_route_all().\n\t  (bgp_stop) No need to clear routes here, BGP FSM should do\n\t  it.\n"
    },
    {
      "commit": "a39275d76d33e2b17b8f90441863ca030412a664",
      "tree": "31e257dd3863edf5ad432c466ccbc139e204c2dc",
      "parents": [
        "7f643ebf2bca2ef446cdf4f4a3e7b16958c18069"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Nov 30 16:36:57 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Nov 30 16:36:57 2006 +0000"
      },
      "message": "[bgpd] Implement \u0027debug bgp zebra\u0027 to log all messages to and from zebra.\n\n2006-11-30 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* bgp_debug.h: Declare new bgp_debug_zebra conf and term flags,\n\t  and define BGP_DEBUG_ZEBRA.\n\t* bgp_debug.c: Declare conf_bgp_debug_zebra and term_bgp_debug_zebra.\n\t  (debug_bgp_zebra, no_debug_bgp_zebra, undebug_bgp_zebra) New\n\t  functions to enable/disable bgp zebra debugging.\n\t  (no_debug_bgp_all) Turn off zebra debugging.\n\t  (show_debugging_bgp) Show whether zebra debugging is on.\n\t  (bgp_config_write_debug) Add \u0027debug bgp zebra\u0027 if configured.\n\t  (bgp_debug_init) Add new zebra debugging commands.\n\t* bgp_zebra.c: (bgp_router_id_update, bgp_interface_add,\n\t  bgp_interface_delete, bgp_interface_up, bgp_interface_down,\n\t  bgp_interface_address_add, bgp_interface_address_delete,\n\t  zebra_read_ipv4, zebra_read_ipv6, bgp_zebra_announce,\n\t  bgp_zebra_withdraw, bgp_redistribute_set, bgp_redistribute_unset)\n\t  If zebra debugging is enabled, log an appropriate debug message.\n"
    },
    {
      "commit": "8d45210e7c9e221b519d975825cb83aea5ebe47e",
      "tree": "62629c7693b24c3b4a8e37eed7abe51e5695417d",
      "parents": [
        "435408866187f3bc3c49b26f11bc83c374e55dd5"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Nov 28 19:50:46 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Nov 28 19:50:46 2006 +0000"
      },
      "message": "[bgpd] Fix bug where a deleted route that was quickly re-added was being lost\n\n2006-11-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* bgp_route.c: (bgp_info_restore) New function that undoes\n\t  the effects of a previous call to bgp_info_delete.  This is\n\t  used when a route is deleted and quickly re-added before the\n\t  deletion has been processed.\n\t  (bgp_static_update_rsclient, bgp_static_update_main,\n\t  bgp_redistribute_add) Check whether a pre-existing route\n\t  has the BGP_INFO_REMOVED set, and, if so, we need to call\n\t  bgp_info_restore to resurrect it.\n"
    },
    {
      "commit": "56395af70588c8fda89bf5ef327df64b5efbeb67",
      "tree": "d3289e371b8296bc8e09d5e3464e331a040c31c6",
      "parents": [
        "8fb8a504e2c7c216b34c58e5658d84cb7dbe79b0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Oct 27 16:58:20 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Oct 27 16:58:20 2006 +0000"
      },
      "message": "[bgpd] trivial: non C99 u_int.._t should be uint.._t\n\n2006-10-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_table_stats) oops, u_intXX_t should be\n\t  uintXX_t\n"
    },
    {
      "commit": "6f58544db526b4dfb09d45f8507926b0ae5fe12b",
      "tree": "f73d22b4ff92eaef337a6d9af8a1923d730e9a21",
      "parents": [
        "ed3ebfa36b45fe487015e1918e848f0ff4500bff"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 22 19:13:07 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 22 19:13:07 2006 +0000"
      },
      "message": "[bgpd] struct peer must have bgp field valid (redistribute crash)\n\n2006-10-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd.c: (peer_new) bgp element of peer absolutely must be\n\t  filled in, make peer_new() require it as argument and update\n\t  all callers. Fixes a crash reported by Jan \u0027yanek\u0027 Bortl and\n\t  Andrew Schorr where bgpd would crash in bgp_pcount_adjust\n\t  trying to dereference the bgp member of bgp-\u003epeer_self,\n\t  triggered through redistribution.\n\t* bgp_route.c: (bgp_pcount_adjust) assert sanity of arguments.\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": "53d9f67a18dc59fd688fce999cb35653010a54fb",
      "tree": "8412f230b56f658361b99f773395157703bcad7d",
      "parents": [
        "dcdf399fbc7420d3edc230c9646f720825fcecda"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:41:16 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:41:16 2006 +0000"
      },
      "message": "[bgpd] CID#73, potential crash in bgp statistics if called for AFI/SAFI with emtpy table\n\n2006-10-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_table_stats_walker) NULL deref if table is\n\t  empty, bgp_table_top may return NULL, Coverity CID#73.\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": "876b8be0ab24721e8f94d47dde022563f76db992",
      "tree": "60afcf14974d39a081b64c71191038701e73a3f5",
      "parents": [
        "98954844ae56d142e96341d5dff959ec5518111e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:35:57 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:35:57 2006 +0000"
      },
      "message": "[daemon startup] Add --dry-run/-C argument to daemons, to check config file syntax\n\n2006-10-04 Oliver Hookins \u003cohookins@gmail.com\u003e\n\n\t* bgpd/bgp_main.c: Add configuration check option, with\n\t\u0027-C\u0027 rather than \u0027-c\u0027 for consistency between daemons.\n\t* isisd/isis_main.c: ditto\n\t* ospf6d/ospf6_main.c: ditto\n\t* ospfd/ospf_main.c: ditto\n\t* ripngd/ripng_main.c: ditto\n\t* vtysh/vtysh_main.c: ditto\n\t* ripd/rip_main.c: Change the config check option to\n\t\u0027-C\u0027 and tidy up the code.\n\t* zebra/main.c: ditto\n\n2006-10-04 Stergiakis Alexandros \u003castergiakis@antcor.com\u003e\n\n\t* ripd/rip_main.c: This trivial patch introduces a new\n\t  command-line option \u0027-c\u0027, which instructs zebra/ripd\n\t  to check its configuration file for validity,\tprint\n\t  any error message, and then exit. This is useful when\n\t  the configuration file is edited by hand or otherwise,\n\t  and you simply want to validate it without any other\n\t  effect.\n\t* zebra/main.c: ditto\n"
    },
    {
      "commit": "0cd1c32dc36ad650d6e21d44c3b289982d1f62a0",
      "tree": "c474767b3fe407ac63b47ea4cced9c9ac7ee04ba",
      "parents": [
        "09dd561eb444ab009103b2dde62db212eae7064a"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Sep 19 18:51:53 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Sep 19 18:51:53 2006 +0000"
      },
      "message": "[bgpd] Trivial fix of printf format/arg mismatch\n\n2006-09-19 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* bgpd.c: (peer_uptime) Fix printf format/arg mismatch in\n\t  zlog_warn message (%ld/size_t -\u003e %lu/u_long).\n"
    },
    {
      "commit": "09dd561eb444ab009103b2dde62db212eae7064a",
      "tree": "e7763c690dec621ca81370721f6c7b6cd38a5b10",
      "parents": [
        "8383a9bd2721dbd8fb1b657269a2cdc40b4226e1"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 03:38:16 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 03:38:16 2006 +0000"
      },
      "message": "[bgpd] reduce the process queue hold time to something more sensible\n\n2006-09-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_process_queue_init) process queue hold time\n\t  too high, adds extra memory load. Change to be much lower,\n\t  until such time as it\u0027s made configurable.\n"
    },
    {
      "commit": "8383a9bd2721dbd8fb1b657269a2cdc40b4226e1",
      "tree": "573d50347b4b45eabebbcc30263c4bb45a61bb2f",
      "parents": [
        "9fde6624fc480995449d8243fe85602d89927eb6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 03:06:54 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 03:06:54 2006 +0000"
      },
      "message": "[bgpd] RIB statistics address space size shouldnt double count space\n\n2006-09-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_table_stats_walker) Address space announced\n\t  should only count top-level unaggregateable prefixes, to\n\t  avoid falling afoul of anti-dodgy-accounting regulations\n\t  in various jurisdictions.. ;)\n"
    },
    {
      "commit": "9fde6624fc480995449d8243fe85602d89927eb6",
      "tree": "6591e476329ec88bd9ba5fcc008c626d32b3fdb5",
      "parents": [
        "ca058a30b1ea57f83871ab4cf1c9a91ea4064d52"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 03:02:02 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 03:02:02 2006 +0000"
      },
      "message": "[bgpd] simplify peer refcounts, squash slow peer leak\n\n2006-09-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) fix the peer refcount issue exposed by previous, by\n\t  just removing refcounting of peer threads, which is mostly\n\t  senseless as they\u0027re references leading from struct peer,\n\t  which peer_free cancels anyway. No need to muck around..\n\t* bgp_fsm.h: Just remove the refcounting from the various\n\t  TIMER/READ/WRITE/EVENT ON/OFF/ADD macros.\n\t* bgp_fsm.c: (bgp_stop) use BGP_EVENT_FLUSH, no refcounts attached\n\t  to events anymore.\n\t  (bgp_event) remove peer_unlock, events not refcounted.\n\t* bgpd.c: (peer_free) flush events before free.\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": "2815e61ffbbf9c362896f3912d925cf78e125ee1",
      "tree": "8cc9c2cc857f12e3c22813f756fb8fd674757e1b",
      "parents": [
        "9458b8191563eb5569f341172484a234ef2f743e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 02:56:07 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 14 02:56:07 2006 +0000"
      },
      "message": "[bgpd] Add RIB reporting commands, show bgp ... statistics\n\n2006-09-13 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.c: (aspath_highest) new, return highest ASN in an\n\t  aspath.\n\t* bgp_route.c: (bgp_peer_count_walker) new, do the walk done\n\t  in bgp_peer_counts as a thread.\n\t  (bgp_peer_counts) move walk to previous and call it via\n\t  thread_execute so this RIB walk shows up in thread stats.\n\t  (bgp_table_stats) New, gather some statistics for a given\n\t  RIB.\n\t  (bgp_table_stats_walker) New, RIB walker thread for former.\n\t  (bgp_table_stats_vty) Parsing front-end for \u0027show bgp ...\u0027,\n\t  useful model for future rationalisation of \u0027show ... bgp\u0027.\n\t  (bgp_route_init) Add new RIB stats commands.\n"
    },
    {
      "commit": "1a392d46db1917dfca2ddd06d7f0021396f8ecfa",
      "tree": "8dec4a2e583c9a1890fd62d647dcd5a27d14bde1",
      "parents": [
        "ff7924f6c0437e2f3cc3710570414ae87a828724"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 07 00:24:49 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 07 00:24:49 2006 +0000"
      },
      "message": "[bgpd] Handle pcount as flags are changed, fixing pcount issues\n\n2006-09-06 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Squash any and all prefix-count issues by\n\t  abstracting route flag changes, and maintaining count as and\n\t  when flags are modified (rather than relying on explicit\n\t  modifications of count being sprinkled in just the right\n\t  places throughout the code).\n\t* bgp_route.c: (bgp_pcount_{dec,inc}rement) removed.\n\t  (bgp_pcount_adjust) new, update prefix count as\n\t  needed for a given route.\n\t  (bgp_info_{uns,s}et_flag) set/unset a BGP_INFO route status\n\t  flag, calling previous function when appropriate.\n\t  (general) Update all set/unsets of flags to use previous.\n\t  Remove pcount_{dec,inc}rement calls.\n\t  No need to unset BGP_INFO_VALID in places where\n\t  bgp_info_delete is called, it does that anyway.\n\t* bgp_{damp,nexthop}.c: Update to use bgp_info_{un,}set_flag.\n\t* bgp_route.h: Export bgp_info_{un,}set_flag.\n\t  Add a \u0027meta\u0027 BGP_INFO flag, BGP_INFO_UNUSEABLE.\n\t  Move BGP_INFO_HOLDDOWN macro to here from bgpd.h\n"
    },
    {
      "commit": "ff7924f6c0437e2f3cc3710570414ae87a828724",
      "tree": "e7e7e1910839845b37b4fa3f7ebc3d935ff9de99",
      "parents": [
        "b5aeb4410ae3722a5f331850acbc84c39e3fcd9f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Sep 04 01:10:36 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Sep 04 01:10:36 2006 +0000"
      },
      "message": "[bgpd] Add \u0027show ... neighbor .... prefix-counts\u0027 command\n\n2006-09-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: Add \u0027show ... bgp ... \u003cneighbour\u003e prefix-count\u0027\n\t  commands, to provide detailed counts of prefixes for a peer.\n\t  Informative, and should help pin down to pfxcnt drift\n\t  problems.\n"
    },
    {
      "commit": "9f906c7c562bd62043c77a79d84967deea9fe45e",
      "tree": "84fc5f54c9effcb75ec8ea139228b5f0384075f1",
      "parents": [
        "3414bf250a385496fa6c11dbaa9a5f79100d7a48"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 27 06:57:47 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 27 06:57:47 2006 +0000"
      },
      "message": "[bgpd] fix mtype in XFREE and NULL out freed pointer\n\n2006-08-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_advertise.c: (bgp_sync_delete) fix mtype in XFREE.\n\t  NULL out peer-\u003ehash after free, to be sure.\n"
    },
    {
      "commit": "1f742f21a98f756cea03856849fa2f82f467baf7",
      "tree": "fe295616ed2036e691cf85f7fd73083ad4ddc2fd",
      "parents": [
        "36943749147bef10df8ffc0e2ad79f4dd06cd9ac"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 06 15:52:11 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 06 15:52:11 2006 +0000"
      },
      "message": "[bgpd] aspath_loop_check was broken, fix it and the aspath unit test code.\n\n2006-08-06 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.c: (aspath_loop_check) Fix the typo-bug which\n\t  essentially had disabled this check. Problem reported by\n\t  Bartek Kania \u003cmrbk@gnarf.org\u003e in [quagga-users 7388].\n\t* aspath_test.c: (validate) Fix the sense of the aspath_loop_check,\n\t  which was the wrong way around and had actually been testing for\n\t  aspath_loop_check to be buggy.\n"
    },
    {
      "commit": "1893740016d35d75de567a5f6b74db2314ffdc52",
      "tree": "95175d82fa7affe687afe8f9db893aee5746686c",
      "parents": [
        "f366ad31ae6bf7e2fb7271cf8eab6dee4af3baf9"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 19:05:12 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 19:05:12 2006 +0000"
      },
      "message": "[bgpd] Potential bug#287 fix, peer_delete should NULL out freed buffers\n\n2006-07-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd.c: (peer_delete) Ensure freed buffers can not be\n\t  accidently reused. A potential fix for bug #287.\n"
    },
    {
      "commit": "33d5ab9ef197ce281859f12251df4e412c469c65",
      "tree": "e33b0687ecc11d38b11bc53774e095298cc22c5e",
      "parents": [
        "9a57dc69d2432b6633fc47b05d4ee475a29db361"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Jul 02 11:01:50 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Jul 02 11:01:50 2006 +0000"
      },
      "message": "[bgpd] Fix crash on shutdown of peer\n\n2006-07-02 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_fsm.c: (bgp_{stop,start}) Move clear/free of certain\n\t  bits of state from stop to start, as they may be used via\n\t  peer references on clearing queues..\n"
    },
    {
      "commit": "369688c0c7a325e889e841afc2d59430baf079a2",
      "tree": "55c5e916f607609fc0e242ca874ff14758cc5f44",
      "parents": [
        "825cd49ead7a9222f93b37f65030f5ff325cd4ab"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue May 23 22:27:55 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue May 23 22:27:55 2006 +0000"
      },
      "message": "[bgpd] expand vty help for neighbor ... update-source\n\n2006-05-23 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_vty.c: (neighbor_update_source_cmd) Expand tab completion\n\t  to make it clear it takes both address and ifname.\n"
    },
    {
      "commit": "b2518c1e884cb8b4f4502f8b90b1c368e1a352ec",
      "tree": "7099a9dd8bf20d560ed9565b8ecc9eaaf50bd203",
      "parents": [
        "06e110f9372f61bea23c2eaa25e7850b254bbd1a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:48:40 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:48:40 2006 +0000"
      },
      "message": "[bgpd] CID #4,#5,#9,#10, simplify aspath_print_vty usage\n\n2006-05-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.{c,h}: (aspath_print_vty) take a format string,\n\t  so as to reduce burden on callers, all in bgp_route.c\n\t* bgp_route.c: (route_vty_out{,tmp}) Update to match\n\t  aspath_print_vty, simplifying checks needed to get spacing\n\t  right. CID #4,#5.\n\t  ({damp,flap}_route_vty_out) Ditto, CID #9, #10\n"
    },
    {
      "commit": "06e110f9372f61bea23c2eaa25e7850b254bbd1a",
      "tree": "a705c52302d9044f6ae7121ec7eadb62a072d5fe",
      "parents": [
        "dd8103a917c356abfdd166879186df2e5d1ca95a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:29:22 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:29:22 2006 +0000"
      },
      "message": "[bgpd] CID #6, remove useless NULL check, bgp_static_update_rsclient\n\n2006-05-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_static_update_rsclient) Remove useless NULL\n\t  check, code already assumes bgp_static can not be NULL,\n\t  fixes CID #6.\n"
    },
    {
      "commit": "dd8103a917c356abfdd166879186df2e5d1ca95a",
      "tree": "03319c6b4338b847ad244c3e88dbddb7e6c12f16",
      "parents": [
        "34c3f81b542c7f91fa04a43f7d0a8a4482f22d4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:27:30 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:27:30 2006 +0000"
      },
      "message": "[bgpd] CID #7, remove useless NULL check, bgp_static_update_main\n\n2006-05-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_static_update_main) Remove useless NULL\n\t  check, code already assumes bgp_static can not be NULL,\n\t  fixes CID #7.\n"
    },
    {
      "commit": "34c3f81b542c7f91fa04a43f7d0a8a4482f22d4d",
      "tree": "58f05fdafbc1c2036b9ccdf9de01d77f503e510e",
      "parents": [
        "5fc60519ede0d34688832e353c35bf1832a4330d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:25:37 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 12 23:25:37 2006 +0000"
      },
      "message": "[bgpd] Remove dead code in ORIGINATOR_ID packet forming code\n\n2006-05-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_attr.c: (bgp_packet_attribute) Remove dead code, Coverity\n\t  CID #1\n"
    },
    {
      "commit": "da5b30f6fb9437f1dc3d05a48e5e17f78695f820",
      "tree": "baa0663a2aea52399162c3e8e69be7ef8f54a4c7",
      "parents": [
        "7a559cbe8f794d298419a8ada80a9f12933eceda"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 08 14:37:17 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 08 14:37:17 2006 +0000"
      },
      "message": "[bgpd] Bug #240, Fix route-server crash when static routes are configured\n\n2006-05-08 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_afi_node_get) given table should never be\n\t  NULL, check/assert this.\n\t  (bgp_static_update) Bug #240. Rsclients should only be passed\n\t  the static update if they are configured for the afi,safi.\n"
    },
    {
      "commit": "542bcb724c410283d7a3f317c8fe5e8a0b58f196",
      "tree": "cefe67e9b39990827c64fda884adeda208af9787",
      "parents": [
        "65ca75e0d1e7e440bf0d2a6a031d4148024c9d12"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 08 14:25:09 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 08 14:25:09 2006 +0000"
      },
      "message": "[bgpd] CID#62 fix double-free, use-after-free in community_str2com\n\n2006-05-08 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_community.c: (community_str2com) Coverity CID#62, fix\n\t  double-free, use-after-free.\n"
    },
    {
      "commit": "65ca75e0d1e7e440bf0d2a6a031d4148024c9d12",
      "tree": "71826429ce3985bf3900be4a965de238ac668e82",
      "parents": [
        "a3b6ea56a0add7d0972a66d96e1fbcf5461eecdb"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 04 08:08:15 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 04 08:08:15 2006 +0000"
      },
      "message": "[bgpd] Fix bug where FSM can stay hung forever in Idle/Clrng\n\n2006-05-04 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (general) Fix logical bug in clearing, noted\n\t  by Chris Caputo in [quagga-users 6728] - clearing depended on\n\t  at least one route being added to workqueue, in order for\n\t  workqueue completion function to restart FSM. However, if no\n\t  routes are cleared, then the completion function never is\n\t  called, it needs to be called manually if the workqueue\n\t  didn\u0027t get scheduled.\n\t  Finally, clearing is per-peer-session, not per AFI/SAFI, so\n\t  the FSM synchronisation should be in bgp_clear_route_table.\n\t  (bgp_clear_route_table) Wrong place for FSM/clearing\n\t  synchronisation, move to..\n\t  (bgp_clear_route) FSM/clearing synchronisation should be\n\t  here.\n\t  If no routes were cleared, no workqueue scheduled, call\n\t  the completion func to ensure FSM kicks off again.\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": "15aa6a1a732eef1049dbc64d7ede9236772cafcf",
      "tree": "0badfe99eedf29a4e8ef519123e91e96309ad300",
      "parents": [
        "cdc2c3f98e5652c06ad01eed6bfb5f93c168f817"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:39:35 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:39:35 2006 +0000"
      },
      "message": "[bgpd] Fix infinite loop in community_str2com\n\n2006-03-30 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_community.c: (community_gettoken) Unknown token should\n\t  return NULL, to give a strong indication to callers that\n\t  the token no longer can be parsed, otherwise callers looping\n\t  on this function may have a hard time ending their loop.\n\t  (community_str2com) While loop around community_gettoken appears\n\t  to have been coded thinking that break statement would break\n\t  from the while{}, hence it could never exit for unknown token\n\t  case. Fix it to do..while, so it can use the NULL result from\n\t  community_gettoken easily.\n"
    },
    {
      "commit": "a625ca3cd2df6016aef97096eb927b783eb26d7f",
      "tree": "9681829543d5eeba5b55df3361b30e4e7c1cfc91",
      "parents": [
        "b51f126edee1c170e69951f92033e3e5aec2862d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:12:38 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:12:38 2006 +0000"
      },
      "message": "[bgpd] release peer specific clear queue in peer_free\n\n2006-03-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd.c: (peer_free) release the per-peer workqueue when\n\t  freeing the peer.\n"
    },
    {
      "commit": "b51f126edee1c170e69951f92033e3e5aec2862d",
      "tree": "ff637d3f5909fd777aa8e8fe0740349258485e6f",
      "parents": [
        "4bf6a3621c828ea9f2c62298b525a2c1a191a45e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:09:38 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:09:38 2006 +0000"
      },
      "message": "[bgpd] trivial: use a distinct memtype for struct bgp_synchronize\n\n2006-03-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memtypes.c: Add MTYPE_BGP_SYNCHRONISE.\n\t* bgp_advertise.c: Use a distinct memory type for struct\n\t  bgp_synchronize.\n"
    },
    {
      "commit": "4bf6a3621c828ea9f2c62298b525a2c1a191a45e",
      "tree": "88d950315b8ef20ce1e12e4166c3eb6b10d989dd",
      "parents": [
        "5304cb52f47a646554241b3bc1d1dab9ccaea73d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:05:23 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:05:23 2006 +0000"
      },
      "message": "[bgpd] Add \u0027show bgp memory\u0027 for stats on fixed-size allocations in bgpd\n\n2006-03-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd/bgp_vty.c: Add includes to get several structs we want\n\t  to provide usage statistics on.\n\t  (show_bgp_memory_cmd) Show memory usage stats for various\n\t  notable fixed size objects. Using mtype_stats_alloc and\n\t  mtype_memstr recently added to memory.c.\n\t  (bgp_show_summary) Report some additional stats specific to\n\t  the given BGP instance and/or AFI/SAFI such as table counts,\n\t  peers, rsclients and peer-groups.\n\t  (bgp_vty_init) Install show_bgp_memory_cmd.\n"
    },
    {
      "commit": "5304cb52f47a646554241b3bc1d1dab9ccaea73d",
      "tree": "7de840321cf650b83aeb992d6bbcb57a93dd855a",
      "parents": [
        "cec0c4fb1beb024e54d134a419893e2ad4389254"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:01:14 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:01:14 2006 +0000"
      },
      "message": "[bgpd] Include header dependency in bgp_nexthop.h\n\n2006-03-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_nexthop.h: Include if.h as a dependent header, for struct\n\t  connected.\n"
    },
    {
      "commit": "cbdfbaa51b600c7b217968b99a9b5a8fbf04bec4",
      "tree": "bb8ce6ac1da775d34796315b1c5ac82e477bbd13",
      "parents": [
        "478ccfd61bd61fd6925c84811c2c0e893a38a38b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:20:48 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 13:20:48 2006 +0000"
      },
      "message": "[bgpd] rearrange some structs for less padding, stats for table/attrs.\n\n2006-03-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_attr.h: (struct attr) rearrange fields to avoid\n\t  wasted padding between them as much as possible.\n\t  (attr_count,attr_unknown_count) export new functions to\n\t  return number of counts of cached attributes.\n\t* bgp_attr.c: (attr_count,attr_unknown_count) new functions to\n\t  return number of counts of cached attributes.\n\t* bgp_route.h: (struct bgp_info) rearrange fields to avoid\n\t  wasted padding.\n\t* bgp_table.h: (struct bgp_table) Add a count field, of number\n\t  of nodes in the table.\n\t  (struct bgp_node)  rearrange fields to avoid\n\t  wasted padding between them, though I don\u0027t think there\n\t  was any in this case.\n\t* bgp_table.c: (bgp_node_{delete,get}) Maintain the table node count.\n\t  (bgp_table_count) new function to access the table count.\n"
    },
    {
      "commit": "3e0c78ef8a8fb80f52a36dab99d76a5913281e4c",
      "tree": "e09c41768a283796fd9def9c65d5500bbe712a69",
      "parents": [
        "5a54df971e7da8aacddbf54afa33bd81b6c01f13"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Mar 06 18:06:53 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Mar 06 18:06:53 2006 +0000"
      },
      "message": "[bgpd] Start off FSM again once clearing finishes.\n\n2006-03-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_clear_node_complete) Doh. When clearing\n\t  is complete we need to kick off FSM again.\n"
    },
    {
      "commit": "6a419733c5fba17b246b5cce4af73828f8c346ef",
      "tree": "f62342579f0adce713aa9d599bfe2fa20a987456",
      "parents": [
        "64e580a72deaa268e46559516663808503f347ec"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 21 01:14:13 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 21 01:14:13 2006 +0000"
      },
      "message": "[bgpd] Add Clrng description to bgp summary state.\n\n2006-02-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_vty.c: (bgp_show_summary) Add a \u0027Clrng\u0027 sub-description\n\t  to state of peer while it\u0027s suppressed due to clearing.\n"
    },
    {
      "commit": "64e580a72deaa268e46559516663808503f347ec",
      "tree": "7b11b71858334f07a72d3885e00f63dd5c8efcf7",
      "parents": [
        "e24f0638e6fc7256580c185a631cbe5549bf7db3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 21 01:09:01 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 21 01:09:01 2006 +0000"
      },
      "message": "[bgpd] Record afi/safi in bgp_table. Serialise peer clear with FSM.\n\n2006-02-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd.h: move the clear_node_queue to be peer specific.\n\t  Add a new peer status flag, PEER_STATUS_CLEARING.\n\t* bgp_table.h: (struct bgp_table) Add fields to record afi,\n          safi of the table.\n          (bgp_table_init) Take afi and safi to create table for.\n        * bgp_table.c: (bgp_table_init) record the afi and safi.\n        * bgp_nexthop.c: Update all calls to bgp_table_init.\n        * bgp_vty.c: ditto.\n        * bgpd.c: ditto.\n        * bgp_fsm.c: (bgp_timer_set) dont bring up a session which is\n\t  clearing.\n        * bgp_route.c: (general) Update all bgp_table_init calls.\n          (bgp_process_{rsclient,main}) clear_node is serialised\n          via PEER_STATUS_CLEARING and fsm now.\n          (struct bgp_clear_node_queue) can be removed. struct bgp_node\n          can be the queue item data directly, as struct peer can be\n          kept in the new wq global user data and afi/safi can be\n          retrieved via bgp_node -\u003e bgp_table.\n          (bgp_clear_route_node) fix to get peer via wq-\u003espec.data,\n          afi/safi via bgp_node-\u003ebgp_table.\n          (bgp_clear_node_queue_del) no more item data to delete, only\n          unlock the bgp_node.\n          (bgp_clear_node_complete) only need to unset CLEARING flag\n          and unlock struct peer.\n          (bgp_clear_node_queue_init) queue attaches to struct peer\n          now. record peer name as queue name.\n          (bgp_clear_route_table) If queue transitions to active,\n          serialise clearing by setting PEER_STATUS_CLEARING rather\n          than plugging process queue, and lock peer while queue\n          active.\n          Update to pass only bgp_node as per-queue-item specific data.\n"
    },
    {
      "commit": "7c7fa1b43100b4358ec0217d950b4aa9a2ec4bfd",
      "tree": "b317ffff8d3c3b432d841698b5814e709082fb2f",
      "parents": [
        "aa94ca86ba0323d61fc3bc9b881718567ee943b3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Feb 18 10:52:09 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Feb 18 10:52:09 2006 +0000"
      },
      "message": "[bgpd] trivial readability fix\n\n2006-02-18 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.c: (bgp_announce_check) trivial, move declaration\n\t  of two local variables into the only block where they are\n\t  used, to aid the reader.\n"
    },
    {
      "commit": "aa94ca86ba0323d61fc3bc9b881718567ee943b3",
      "tree": "f4c41a1d40c6321482defa436ebfb2eeb31d22ab",
      "parents": [
        "3fff6ffc697e362959de95b6cc292fd6fb7502a6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Feb 18 10:49:04 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Feb 18 10:49:04 2006 +0000"
      },
      "message": "[bug #89] Fix leak of community when set community is used\n\n2006-02-18 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_routemap.c: (route_set_community) Quick, very hacky, fix\n\t  for the set-community leak, bug #89. True fix will be to\n\t  detangle the web of *_intern caching and provide saner object\n\t  caching for Quagga, future work.\n"
    },
    {
      "commit": "3fff6ffc697e362959de95b6cc292fd6fb7502a6",
      "tree": "f9ac1da3796e48c1aa83ed3d5f9dd7594b6812ee",
      "parents": [
        "902212c3f3df5198a6cdf2c95e4686790e437f6f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Feb 05 17:55:35 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Feb 05 17:55:35 2006 +0000"
      },
      "message": "[bgpd] trivial fix for gcc warning\n\n2006-02-05 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.c: (aspath_gettoken) fix gcc warning about\n\t  possible uninitialised usage.\n"
    },
    {
      "commit": "902212c3f3df5198a6cdf2c95e4686790e437f6f",
      "tree": "7587a283dd51a6d5a896111ec294683d077d4274",
      "parents": [
        "306d8890439cdb9128d063ee2f77700a11e6843c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Feb 05 17:51:19 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Feb 05 17:51:19 2006 +0000"
      },
      "message": "[bgpd] Fix peer prefix counts and make it slightly more robust\n\n2006-02-05 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.h: Add BGP_INFO_COUNTED to track whether\n\t  prefix has been counted or not.\n\t* bgp_route.c: (bgp_pcount_{inc,dec}rement) new helpers, to\n\t  centralise inc/dec of prefix-count,\n\t  (bgp_rib_remove) Remove pcount decrement, use helper.\n\t  (bgp_rib_withdraw) ditto, additionally use previous function\n\t  too.\n\t  (bgp_update_main) Use pcount helpers.\n\t  (bgp_clear_route_node) ditto, aslo REMOVED routes don\u0027t need\n\t  clearing.\n"
    },
    {
      "commit": "306d8890439cdb9128d063ee2f77700a11e6843c",
      "tree": "fa5c8e035891cc83e9f5cfa80343df4bcac40fb7",
      "parents": [
        "3a570c8b7b56b5a3042fbc035a01c753440b927c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Feb 02 17:50:19 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Feb 02 17:50:19 2006 +0000"
      },
      "message": "[lib/workqueue] remove the useless \u0027delay\u0027 factor.\n\n2006-02-02 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* workqueue.h: (struct work_queue) Remove the delay field.\n\t  It served no purpose and just introduced bad behaviour.\n\t  Should be excised before its allowed to escape into 1.0.\n\t  This removes need for the \u0027flood\u0027 and runs_since_clear\n\t  fields.\n\t* workqueue.c: (general) excise delay factor between queue\n\t  runs, hence the \u0027flood\u0027 crap too.. See above.\n\t* bgp_route.c: (bgp_{clear_node,process}_queue_init) delay\n\t  field is removed from workqueue spec.\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": "d3092e7f226c48f7caeac22ad62f39e8d71d9e12",
      "tree": "a4ede38eeab47522eae40c929ed5a4a82d978df5",
      "parents": [
        "98fd1e61212ea98154e7cc4b6deed41a07794523"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:33:46 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 17:33:46 2006 +0000"
      },
      "message": "[zserv] fix up custom isisd and bgpd Zserv functions for new format.\n\n2006-01-17 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_nexthop.c: (zlookup_read*) convert to new Zserv format.\n\t  (zlookup_query_ipv6) ditto.\n\t  (bgp_import_check) ditto.\n\t* isis_zebra.c: (isis_zebra_route_add_ipv4) fix for new\n\t  zserv format.\n"
    },
    {
      "commit": "8fdc32ab9a81cb80296d322346867c8c3d2b2b37",
      "tree": "bed62ebe30b81035f9ee9f5f605c1f443ad01c25",
      "parents": [
        "02335429e8cf2afc191fd518a3b55564bf6e5b2c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 12:01:29 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 12:01:29 2006 +0000"
      },
      "message": "[bgpd] add aspath_finish, static resource cleanup function.\n\n2006-01-16 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.c:\n\t  (aspath_snmp_pathseg) move the static stream pointer out to\n\t  file scope, so it can be freed.\n\t  (aspath_finish) new function, free aspath resources.\n\t* bgp_aspath.h: (aspath_finish) export.\n"
    },
    {
      "commit": "02335429e8cf2afc191fd518a3b55564bf6e5b2c",
      "tree": "aea6397f2ff082bded4380aa1db27245ff21994c",
      "parents": [
        "c1b9800a60f073c7d57f6232f9af7ae39bc3353a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 11:13:27 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 11:13:27 2006 +0000"
      },
      "message": "[bgpd] fix some leaks introduced in aspath rewrite.\n\n2006-01-16 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.c: (assegment_append_asns) XREALLOC can return\n\t  NULL theoretically, take care not to lose the allocated data.\n\t  (aspath_hash_alloc) aspath_dup already set the aspath\n\t  string - fix leak.\n\t  (aspath_parse) aspath_hash_alloc dupes the entire aspath,\n\t  including segments, but we forgot to free the temporary\n\t  assegment.\n"
    },
    {
      "commit": "37c38304e481037ed075f79f78a3d6f78038f907",
      "tree": "ee83dfe3f0ea07e3d99eb32e32a5902d6f627ce9",
      "parents": [
        "98429f6d07b0bac006eb14aea13c1d989fc835ed"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 10 22:15:45 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 10 22:15:45 2006 +0000"
      },
      "message": "[bgpd] remove export of long defunct function\n\n2006-01-10 Juris Kalnins \u003cjuris@mt.lv\u003e\n\n\t* bgpd.h: (bgp_router_id_unset) ex-function, remove.\n"
    },
    {
      "commit": "ad72740e884f16c1f30a99168428fdd15fadaa68",
      "tree": "79126f6d960dd8ab96043203d728edfdc04f67a1",
      "parents": [
        "c24d602e82d31a2fcbccb4cc3b66f8d0a79d5f22"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Nov 23 02:47:02 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Nov 23 02:47:02 2005 +0000"
      },
      "message": "[bgp] Fix SEGV if empty path is confed-compared ([quagga-users 5968])\n\n2005-11-23 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_aspath.c: (assegments_parse) should be static\n\n2005-11-23 Juergen Kammer \u003cj.kammer@eurodata.de\u003e\n\n\t* bgp_aspath.c: (aspath_cmp_left_confed) fix SEGV for case\n\t  where one or both paths are empty.\n"
    },
    {
      "commit": "0fb58d5d7993b638fc46085944d17d3a54d66046",
      "tree": "9b1195ad505d2c14fdf09036db4f324ff3ec7f18",
      "parents": [
        "76367ea9753aa9cef7cf5d3c954f55b5725f31da"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:31:49 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:31:49 2005 +0000"
      },
      "message": "2005-11-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra_rib.c: (rib_process) convert to new workqueue specs and\n\t  shut up gcc, which complains about cast from void via\n\t  function parameters, for some dumb reason. Do the cast\n\t  inside the function instead.\n\t  (rib_queue_qnode_del) ditto.\n\t  (rib_queue_init) no need for the casts anymore.\n"
    },
    {
      "commit": "412008568bddbc9475eafba224d1a1703d6cca97",
      "tree": "8f9fc89b99f657af060904ae353ba07b9375321f",
      "parents": [
        "0752ef0b2e9bbf6c7ab20ed0fe87840b3bd1b7f4"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 12:52:18 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 12:52:18 2005 +0000"
      },
      "message": "2005-11-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_damp.c: (bgp_reuse_timer) struct bgp can be retrieved via\n\t  the struct bgp_damp_info, no need to guess by using\n\t  bgp_get_default().\n"
    },
    {
      "commit": "f52d13cb2e8e7197934d5f241f88647f9b9d78b8",
      "tree": "b0aa01befc07f57ed47e83ac7dfb383284c49d26",
      "parents": [
        "c05612b9a702d0f49c379c92deb6daab55372aea"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 17:38:06 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 17:38:06 2005 +0000"
      },
      "message": "2005-10-01 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: Declare new functions zebra_route_string() and\n\t  zebra_route_char().\n\t* log.c: (zroute_lookup,zebra_route_string,zebra_route_char) New\n\t  functions to map zebra route numbers to strings.\n\t* zebra_vty.c: (route_type_str) Remove obsolete function: use new\n\t  library function zebra_route_string() instead.  Note that there\n\t  are a few differences: for IPv6 routes, we now get \"ripng\" and\n\t  \"ospf6\" instead of the old behavior (\"rip\" and \"ospf\").\n\t  (route_type_char) Remove obsolete function: ues new library function\n\t  zebra_route_char() instead.  Note that there is one difference:\n\t  the old function returned \u0027S\u0027 for a ZEBRA_ROUTE_SYSTEM route,\n\t  whereas the new one returns \u0027X\u0027.\n\t  (vty_show_ip_route_detail,vty_show_ipv6_route_detail) Replace\n\t  route_type_str() with zebra_route_string().\n\t  (vty_show_ip_route,vty_show_ipv6_route) Replace route_type_char()\n\t  with zebra_route_char().\n\t* bgp_vty.c: (bgp_config_write_redistribute) Use new library function\n\t  zebra_route_string instead of a local hard-coded table.\n\t* ospf6_asbr.c: Remove local hard-coded tables zroute_name and\n\t  zroute_abname. Change the ZROUTE_NAME macro to use new library\n\t  function zebra_route_string().  Remove the ZROUTE_ABNAME macro.\n\t  (ospf6_asbr_external_route_show): Replace ZROUTE_ABNAME() with\n\t  a call to zebra_route_char(), and be sure to fix the format string,\n\t  since we now have a char instead of a char *.\n\t* ospf6_zebra.c: Remove local hard-coded tables zebra_route_name and\n\t  zebra_route_abname.  Note that the zebra_route_name[] table\n\t  contained mixed-case strings, whereas the zebra_route_string()\n\t  function returns lower-case strings.\n\t  (ospf6_zebra_read_ipv6): Change debug message to use new library\n\t  function zebra_route_string() instead of zebra_route_name[].\n\t  (show_zebra): Use new library function zebra_route_string() instead\n\t  of zebra_route_name[].\n\t* ospf_dump.c: Remove local hard-coded table ospf_redistributed_proto.\n\t  (ospf_redist_string) New function implemented using new library\n\t  function zebra_route_string().  Note that there are a few differences\n\t  in the output that will result: the new function returns strings\n\t  that are lower-case, whereas the old table was mixed case.  Also,\n\t  the old table mapped ZEBRA_ROUTE_OSPF6 to \"OSPFv3\", whereas the\n\t  new function returns \"ospf6\".\n\t* ospfd.h: Remove extern struct message ospf_redistributed_proto[],\n\t  and add extern const char *ospf_redist_string(u_int route_type)\n\t  instead.\n\t* ospf_asbr.c: (ospf_external_info_add) In two messages, use\n\t  ospf_redist_string instead of LOOKUP(ospf_redistributed_proto).\n\t* ospf_vty.c: Remove local hard-coded table distribute_str.\n\t  (config_write_ospf_redistribute,config_write_ospf_distribute): Use\n\t  new library function zebra_route_string() instead of distribute_str[].\n\t* ospf_zebra.c: (ospf_redistribute_set,ospf_redistribute_unset,\n\t  ospf_redistribute_default_set,ospf_redistribute_check)\n\t  In debug messages, use ospf_redist_string() instead of\n\t  LOOKUP(ospf_redistributed_proto).\n\t* rip_zebra.c: (config_write_rip_redistribute): Remove local hard-coded\n\t  table str[]. Replace str[] with calls to new library function\n\t  zebra_route_string().\n\t* ripd.c: Remove local hard-coded table route_info[].\n\t  (show_ip_rip) Replace uses of str[] with calls to new library\n\t  functions zebra_route_char and zebra_route_string.\n\t* ripng_zebra.c: (ripng_redistribute_write) Remove local hard-coded\n\t  table str[].  Replace str[i] with new library function\n\t  zebra_route_string(i).\n\t* ripngd.c: Remove local hard-coded table route_info[].\n\t  (show_ipv6_ripng) Use new library function zebra_route_char() instead\n\t  of table route_info[].\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": "ceacedba227e77156f92f7676b274c48a2817e8f",
      "tree": "f362ecc8f6f183347ebe45ab79727b54d2f527a6",
      "parents": [
        "e62178797d0ee5f326fd587b84ee965cf88833e4"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Sep 29 14:39:32 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Sep 29 14:39:32 2005 +0000"
      },
      "message": "2005-09-29 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: Add the test for Solaris least-privileges. Set\n\t  defines for whether capabilities are supported and whether of\n\t  the linux or solaris variety.\n\t  Add missing-prototypes, missing-declarations, char-subscripts\n\t  and cast-qual warnings to default cflags, cause Hasso enjoys warnings,\n\t  and we really should clean the remaining ones up. (ie isisd..).\n\t* (*/*main.c) Update the zebra_capabilities_t arrays in the various\n\t  daemons to match the changes made in lib/privs.h.\n\t* zebra.h: Solaris capabilities requires priv.h to be included.\n\t* privs.{c,h}: Add support for Solaris Least-Privileges.\n\t  privs.h: Reduce some of the abstract capabilities, which do\n\t  not have rough equivalents on both systems. Rename the net\n\t  related caps to _NET, as they should have been in first\n\t  place.\n\t  (zprivs_terminate) should take the zebra_privs_t as argument so\n\t  that it can update change pointer.\n\t  Add an additional privilege state, ZPRIVS_UNKNOWN.\n\t* privs.c: (various capability functions) Add\n\t  Solaris privileges variants.\n\t  (zprivs_state) Use privs.c specific generic types to\n          represent various capability/privilege related types, so that\n          each can be typedef\u0027d as appropriate on each platform.\n\t  (zprivs_null_state) static added, to hold the state the null\n\t  method should report (should be raised by default, and\n          LOWERED if zprivs_terminate has been called)\n          (zprivs_state_null) Report back the zprivs_null_state.\n          (cap_map) Make it able to map abstract capability to multiple\n          system capabilities.\n          (zcaps2sys) Map to abstract capabilities to multiple system\n          privileges/capabilities.\n          (zprivs_init) move capability related init to seperate\n\t  function, zprivs_caps_init.\n          (zprivs_terminate) ditto, moved to zprivs_caps_terminate.\n          Set the change_state callback to the NULL state, so the\n          user can continue to run and use the callbacks.\n"
    },
    {
      "commit": "fe69a505f7be4357bf8523e3bbdced9c95590f3a",
      "tree": "6d2450016eb19f30b153b2439d06ade68d1b8f12",
      "parents": [
        "1f8ae70b7b86d132b95a18f0c824deb248987afc"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Sep 10 16:55:02 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Sep 10 16:55:02 2005 +0000"
      },
      "message": "2005-09-10 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* Makefile.am: bgpd shouldn\u0027t list libgp\u0027s sources as its own.\n\t  Use LDADD.\n\t* bgp_aspath.h:\n\t  (struct assegment) New struct, abstract representation of a\n\t  list of AS_PATH segments and the contained ASNs.\n\t  (struct aspath) Remove the raw-data related\n\t  fields, reference the abstract struct assegment instead.\n\t  Remove several other computed fields, it\u0027s just a\n\t  headache to maintain them and they\u0027re cheap to compute from\n\t  struct assegment.\n\t  (aspath_parse) parse a stream, not a pointer to raw data.\n\t  (aspath_count_{hops,confeds,size}) helpers to access\n\t  information formerly directly contained in struct aspath.\n\t  (aspath_snmp_pathseg) Helper for SNMP, BGP MIB wants\n\t  to be able to output hex representation of raw data.\n\t* bgp_aspath.c: (general) partial-rewrite. Store aspath data\n\t  as an abstract singly-linked list of abstract segments,\n          rather than storing the raw data, and parsing it each and\n\t  every time. Remove several count/size fields which are cheap\n\t  to compute from the abstract segment structure.\n\t  (global) Include stream.h, needed for aspath_parse, and\n\t  others. Couple of helper macros added.\n\t  (struct assegment_header) Just the header, and only the\n\t  header.\n\t  (assegment_data_{new,free}) convenience functions for\n\t  AS_SEG_DATA allocation, the dynamic, per-segment array of\n\t  ASNs.\n\t  (assegment_{new,free,free_all,dup,dup_all}) convenience\n\t  functions for creating struct assegments. The _all forms will\n\t  follow the entire chain of segments from the given segment.\n\t  (assegment_prepend_asns) new function, prepend an ASN N times\n\t  to segment.\n \t  (assegment_append_asns) Append a list (array) of ASNs to\n\t  segment.\n\t  (int_cmp) convenience function for the aspath hash.\n\t  (assegment_normalise) new function. Normalise the given\n\t  segment chain to meet expectations of Quagga, and to\n\t  eliminate differing raw representations of the same paths.\n\t  Merge \u0027runs\u0027 of SEQUENCEs into one segment as our internal\n\t  segment is not limited by the protocol AS_PATH segment\n\t  length. Sort ASNs in SETs.\n\t  (aspath_new) Take void argument to quell warnings. Use the\n\t  assegment convenience functions.\n\t  (assegment_count_{asns,confeds,hops}) new functions to\n\t  compute at runtime values previously held in struct aspath.\n\t  (aspath_size) ditto.\n\t  (aspath_make_str_count) rewritten to stringify new\n\t  representation, and to be slightly easier to understand\n\t  hopefully.\n\t  (aspath_str_update) convenience function, update the aspath\n\t  str. Should investigate removing maintained string from\n\t  struct aspath, just run-time compute it, as per other fields.\n\t  It\u0027s just a maintenance headache, would save noticeable\n\t  amount of RAM with possibly not much extra run-time cost.\n\t  (aspath_dup) use the assegment dup functions.\n\t  (aspath_hash_alloc) Take void * argument to satisfy gcc. Use\n\t  the proper helper functions to dup data.\n\t  (assegments_parse) new function. parse raw AS_PATH data into\n\t  struct assegments. Normalise and return the head of the list.\n\t  (aspath_parse) Parse a stream, not pointer to raw data and\n\t  use assegments_parse to do it.\n\t  (assegment_data_put) Write out a single segment data in protocol\n\t  form to stream.\n\t  (assegment_header_put) ditto but for segment header.\n\t  (aspath_put) new function. As per previous but for an entire\n\t  struct aspath.\n\t  (aspath_snmp_pathseg) wrapper around aspath_put for\n\t  bgp_snmp.c. Uses a static buffer sadly.\n\t  (aspath_aggregate_as_set_add) rewritten to use assegments.\n\t  (aspath_aggregate) ditto\n\t  (aspath_{firstas,loop,private_as}_check) ditto\n\t  (aspath_{merge,prepend,add_one_as}) ditto\n\t  (aspath_cmp_left{_confed}) ditto\n\t  (aspath_delete_confed_seq) ditto, plus fixed to properly\n\t  delete all leading confed segments.\n\t  (aspath_as_add) Just use assegment_append_asns.\n\t  (aspath_segment_add) updated to use assegments.\n\t  (enum as_token) Add values for confeds\n\t  (aspath_gettoken) Add support for confeds\n\t  (aspath_str2aspath) ditto\n\t  (aspath_key_make) updated to use as_segments. Also, add\n\t  segment type into the hash value as appropriate.\n\t  (aspath_cmp) updated to use as_segments.\n\t  (aspath_print) don\u0027t segfault on NULL argument.\n\t* bgp_attr.c: (bgp_attr_aspath) aspath_parse wants the stream\n\t  now. No need for manual forwarding of stream.\n\t  (bgp_packet_attribute) empty aspath is now denoted by NULL\n\t  segment field, length is gone.\n\t  Use aspath_size() to determine size.\n\t  (bgp_attr_init) Fix declaration, explicitely specify void\n\t  arg.\n\t  (bgp_dump_routes_attr) Use aspath_size() to determine size.\n\t* bgp_route.c: (bgp_info_cmp) use the aspath_count_* functions.\n\t  (bgp_rib_withdraw) remove unused variable. Use\n\t  aspath_count_hops.\n\t* bgp_snmp.c: (bgp4PathAttrTable) raw data is gone, use\n\t  aspath_snmp_pathseg to get the representation.\n"
    },
    {
      "commit": "1f8ae70b7b86d132b95a18f0c824deb248987afc",
      "tree": "4d50ffd23b5e1e63a442e59c66c16227d06c4d33",
      "parents": [
        "e7cd37bf334c6a4c0a3db6a0cfeb97674f820503"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Sep 09 23:49:49 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Sep 09 23:49:49 2005 +0000"
      },
      "message": "2005-09-10 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_vty.c: (bgp_vty_init) gcc 4 compile fix. static\n\t  function declarations shouldn\u0027t be inside functions.\n\t* bgp_dump.c: (bgp_dump_interval_add) ditto.\n"
    },
    {
      "commit": "b7395791a31f7b734094d032998ab632136f36f1",
      "tree": "8b8e5efb0c0082b882f8a5a9db9eabd3aa9841e7",
      "parents": [
        "a969459c92d6b6cc557a0961aca14059e791bc08"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Aug 26 12:58:38 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Aug 26 12:58:38 2005 +0000"
      },
      "message": "\t* bgp_route.c: Third (?) attempt to fix best selection breakage\n\t  introduced long time ago with route server patch. Hopefully\n\t  it\u0027s last case to fix - route-server client not in peer group.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "25ffbdc1d72682dea1f5254d7c12e400215e0f1e",
      "tree": "f0a1c3a7fd8b384e71c49a27b4c3c7508ee7b163",
      "parents": [
        "1e83659026e5b9c5876273c83e86fd229dd98c88"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Aug 22 22:42:08 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Aug 22 22:42:08 2005 +0000"
      },
      "message": "2005-08-22 Hugo Santos \u003chsantos@av.it.pt\u003e\n\n\t* bgp_vty.c: (general) Add support for BGP IPv6 Multicast SAFI\n\t  commands and BGP_IPV6M_NODE.\n"
    },
    {
      "commit": "b40d939b477a08d79dbee947aea42ac652090f85",
      "tree": "fe160cd4514218baea57c2566e318fc66ea9a6ef",
      "parents": [
        "bb5b7552cc4f067fbb25f7a8f0c4fe558a508f3f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Aug 22 22:34:41 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Aug 22 22:34:41 2005 +0000"
      },
      "message": "2005-08-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.h: (struct bgp_info) add a new flag, BGP_INFO_REMOVED.\n\t  BGP_INFO_VALID is already overloaded, don\u0027t care to do same thing\n\t  to STALE or HISTORY.\n\t* bgpd.h: (BGP_INFO_HOLDDOWN) Add INFO_REMOVED to the macro, as a\n\t  route which should generally be ignored.\n\t* bgp_route.c: (bgp_info_delete) Just set the REMOVE flag, rather\n\t  than doing actual work, so that bgp_process (called directly,\n\t  or indirectly via the scanner) can catch withdrawn routes.\n\t  (bgp_info_reap) Actually remove the route, what bgp_info_delete\n\t  used to do, only for use by bgp_process.\n\t  (bgp_best_selection) reap any REMOVED routes, other than the old\n\t  selected route.\n\t  (bgp_process_rsclient) reap the old-selected route, if appropriate\n\t  (bgp_process_main) ditto\n\t  (bgp_rib_withdraw, bgp_rib_remove) make them more consistent with\n\t  each other. Don\u0027t play games with the VALID flag, bgp_process\n\t  is async now, so it didn\u0027t make a difference anyway.\n\t  Remove the \u0027force\u0027 argument from bgp_rib_withdraw, withdraw+force\n\t  is equivalent to bgp_rib_remove. Update all its callers.\n\t  (bgp_update_rsclient) bgp_rib_withdraw and force set is same as\n\t  bgp_rib_remove.\n\t  (route_vty_short_status_out) new helper to print the leading\n\t  route-status string used in many command outputs. Consolidate.\n\t  (route_vty_out, route_vty_out_tag, damp_route_vty_out,\n\t   flap_route_vty_out) use route_vty_short_status_out rather than\n\t  duplicate.\n\t  (route_vty_out_detail) print state of REMOVED flag.\n\t  (BGP_SHOW_SCODE_HEADER) update for Removed flag.\n"
    },
    {
      "commit": "e279c7a6f35a211453ec52fdd16ab78535f5d727",
      "tree": "45f72efa37416835c10bca1f1fef07fcee717c37",
      "parents": [
        "6eb8827d669b06d7b38357860d23fa33e0c0078e"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Aug 03 17:23:20 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Aug 03 17:23:20 2005 +0000"
      },
      "message": "\t* bgp_routemap.c: Revert part of leaking communities fix commited in\n\t  2005-05-27. While ecommunity fix seems to be correct, community case\n\t  isn\u0027t.\n\n\tFixes bugzilla #209.\n\t[backport candidate]\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": "e210cf9fd09c938b92dc1a993b254d8d5a8b312c",
      "tree": "635e23a3f56c05f3cc89bddb5b7030ef0b7d13bc",
      "parents": [
        "245a2b29a501bad850c5399ac1c1da2fddf0572a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 15 19:15:35 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 15 19:15:35 2005 +0000"
      },
      "message": "2005-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgpd.c: (bgp_terminate) workqueue\u0027s are lazy allocated and its\n\t  possible to terminate bgpd before workqueues were setup, causing\n\t  an abort/crash. Reported by Ashish Mehta of Sun.\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": "033e861222f07d68697aa883d9391a30c3e011c6",
      "tree": "e21f614e529e61e4de6ed8c3d64cae12ed20c9c2",
      "parents": [
        "70601e0691e178ca23f14fdc666a97efce26897f"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat May 28 04:50:54 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat May 28 04:50:54 2005 +0000"
      },
      "message": "Sync bgpd and ripd set_metric_addsub_cmd commands. Fixes bugzilla #192.\n[backport candidate]\n"
    },
    {
      "commit": "70601e0691e178ca23f14fdc666a97efce26897f",
      "tree": "02e822953d578b96c53a053b97573f6c009c6461",
      "parents": [
        "54a6ed38ac38777f5c2966f74a85cc12659efc87"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri May 27 03:26:57 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri May 27 03:26:57 2005 +0000"
      },
      "message": "\t* bgp_routemap.c: Stop leaking communities.\n\n\tFixes bugzilla #89. [backport candidate]\n"
    },
    {
      "commit": "54a6ed38ac38777f5c2966f74a85cc12659efc87",
      "tree": "d38112804dd53e9305514feb3d570a5214085745",
      "parents": [
        "500e418921b0a2141e182a346f8d32864516236d"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 26 22:12:33 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 26 22:12:33 2005 +0000"
      },
      "message": "\t* bgpd.c: Deleting bgp-\u003ersclient list needs fix similar to pree-groups\n\t  deleting fix. Avoid leaking bgp-\u003egroup, bgp-\u003epeer and bgp-\u003ersclient\n\t  lists.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "b6b7cff22df912938f6cfd755dcad8cf915be2d0",
      "tree": "26599303f4a7b7364d8d2750f3126b013d78b781",
      "parents": [
        "dc625e86063125f8ecaaa1502c3cf53f44d76eff"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 26 08:29:07 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 26 08:29:07 2005 +0000"
      },
      "message": "\t* bgpd.c: Don\u0027t crash while deleting list of peer-groups.\n\n\t[backport candidate]\n"
    }
  ],
  "next": "b5f29603399070041289729e175fbec085e8e904"
}
