)]}'
{
  "log": [
    {
      "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": "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"
    },
    {
      "commit": "b5f29603399070041289729e175fbec085e8e904",
      "tree": "320e22b39f6e0ff1f689f089898cb7b2ffc1cbf9",
      "parents": [
        "92c9f2229fea8fdef31a701d36d7df91f3e9905d"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed May 25 21:00:28 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed May 25 21:00:28 2005 +0000"
      },
      "message": "\t* bgpd.c: Fix obvious (routeserver patch) merge error. This makes \"no\n\t  neighbor x.x.x.x routemap [export|import] commands work again.\n\n\tFixes bugzilla #184. [backport candidate]\n"
    },
    {
      "commit": "00d252cb5ff21ecc537ab40385316b41622a95e2",
      "tree": "c0132f4be53d8ae251ecb1dd8c39816f8734d08f",
      "parents": [
        "269d74fdc39a612da8f627bf97628c68d25a16ab"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 23 14:19:54 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 23 14:19:54 2005 +0000"
      },
      "message": "2005-05-23 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* bgp_fsm.h: Add extern qualifier to exported functions\n\t* bgp_nexthop.c: add static to nexthop specific globals\n\t* *.h: Add guard defines\n"
    },
    {
      "commit": "a94feb380df46bdfc742257648c9825e8e7b17c0",
      "tree": "1b79a4bb5dcab782036a57cb684ee7c392ef13b3",
      "parents": [
        "d4f0960cb23abc7528d7282fa08c68131eae5f93"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 23 13:17:29 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 23 13:17:29 2005 +0000"
      },
      "message": "2005-05-23 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* bgp_routemap.c: add semi-colons to VTY_GET_* to match vty.h change\n"
    },
    {
      "commit": "e83e2080cecffa86267c07b46bbb5a9677b37996",
      "tree": "4523977a4fea76bdf2609ecb656a175aeaa4032f",
      "parents": [
        "22db9dec63766cdf6dcd3ecb4b48177fb0e48143"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu May 19 02:12:25 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu May 19 02:12:25 2005 +0000"
      },
      "message": "2005-05-19 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* bgp_network.c: (bgp_accept) use XSTRDUP\n\t* bgpd.c: (peer_delete) XFREE the correct memtype, not free.\n\t  (peer_create) use XSTRDUP\n\t* bgp_packet.c: (bgp_stream_dup) deleted, stream_dup should be used\n\t  (various) update -\u003e s/bgp_stream_dup/stream_dup\n"
    },
    {
      "commit": "22db9dec63766cdf6dcd3ecb4b48177fb0e48143",
      "tree": "3de4512bd147a2822c3af46aacc8822ea1083e78",
      "parents": [
        "2ba9a37add807b1fbd103424b1365fac8fb2b78f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu May 19 01:50:11 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu May 19 01:50:11 2005 +0000"
      },
      "message": "2005-05-19 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* bgp_fsm.c: (bgp_stop) use sockunion_free, not XFREE..\n\t* bgp_network.c: (bgp_getsockname) ditto\n\t* bgp_routemap.c: (route_match_peer) ditto, als use a ret value and\n\t  remove one sockunion_free.\n\t* bgpd.c: (peer_delete) ditto\n"
    },
    {
      "commit": "634f9ea20fce82c94407cb677b5487b65bde1973",
      "tree": "32db82e4ae3b0f409d6d06a0fda401f9d5df5cc9",
      "parents": [
        "dfb9a545f8e3500e6a99518193872f526c1f56ba"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Apr 11 15:51:40 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Apr 11 15:51:40 2005 +0000"
      },
      "message": "2005-04-11 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\tImplement non-blocking zclient I/O with buffering.\n\t* zclient.h (struct zclient): Add two fields to support non-blocking\n\t  I/O: struct buffer *wb, and struct thread *t_write.\n\t  (zclient_free): Remove function.\n\t  (zebra_redistribute_send): Change 2nd arg from socket fd to\n\t  struct zclient * (needed to support non-blocking I/O and buffering).\n\t  (zclient_send_message): New function to send an arbitrary\n\t  message with non-blocking I/O.\n\t* zclient.c (zclient_new): Create write buffer.\n\t  (zclient_free): Remove unused function.\n\t  (zclient_stop): Must cancel new t_write thread.  Also, reset\n\t  all buffers: ibuf, obuf, and wb.\n\t  (zclient_failed): New helper function for typical error handling.\n\t  (zclient_flush_data): New thread to flush queued data.\n\t  (zclient_send_message): New function to send the message in\n\t  zclient-\u003eobuf to zebra using non-blocking I/O and buffering.\n\t  (zebra_message_send, zapi_ipv4_route, zapi_ipv6_route): Use\n\t  new zclient_send_message function instead of calling writen.\n\t  (zclient_start): Set socket non-blocking.  Also, change 2nd arg\n\t  to zebra_redistribute_send from zclient-\u003esock to zclient.\n\t  (zebra_redistribute_send): Change 2nd arg to struct zclient *.\n\t  Can now use zclient-\u003eobuf to assemble the message instead of\n\t  allocating a temporary stream.  And call zclient_send_message to\n\t  send the message instead of writen.\n\t  (zclient_read): Convert to support non-blocking I/O by using\n\t  stream_read_try instead of deprecated stream_read.\n\t  (zclient_redistribute): Change 2nd arg to zebra_redistribute_send\n\t  from zclient-\u003esock to zclient.\n\t* ospf6_zebra.c (ospf6_zebra_redistribute, ospf6_zebra_no_redistribute):\n\t  Change 2nd arg to zebra_redistribute_send from zclient-\u003esock\n\t  to zclient.\n\t* ospf_zebra.c (ospf_zebra_add): Call zclient_send_message instead\n\t  of writen.\n\t* rip_zebra.c (rip_redistribute_set, rip_redistribute_unset,\n\t  rip_redistribute_clean): Change 2nd arg to zebra_redistribute_send\n\t  from zclient-\u003esock to zclient.\n\t* ripng_zebra.c (ripng_redistribute_unset, ripng_redistribute_clean):\n\t  Change 2nd arg to zebra_redistribute_send from zclient-\u003esock\n\t  to zclient.\n\t* bgp_zebra.c (bgp_redistribute_set, bgp_redistribute_unset):\n\t  The 2nd arg to zebra_redistribute_send is now zclient instead of\n\t  zclient-\u003esock.\n\t* isis_zebra.h (isis_zebra_finish): Remove declaration of unused\n\t  function.\n\t* isis_zebra.c (isis_zebra_route_add_ipv4): Call zclient_send_message\n\t  to send the message to zebra instead of calling writen directly, since\n\t  zclient_send_message understands non-blocking I/O and will manage\n\t  the buffer queue appropriately.\n\t  (isis_zebra_finish): Remove unused function, particularly since\n\t  the zclient_free function has been removed.\n"
    },
    {
      "commit": "a8a80d532f3248567b6926b5dbd12509eadd6b43",
      "tree": "b3b42ef7f78c62fb0c1edddd7c0272950883c14c",
      "parents": [
        "67bf16c0f8179af05bcff04d19226866a8b7e806"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 13:07:47 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 13:07:47 2005 +0000"
      },
      "message": "\t* bgp_vty.c: Make \"exit-address-family\" work in IPv4 unicast address\n\t  family node.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "6811845b67999861388cf00d3ca0ee8471d29876",
      "tree": "1f7f08f171164b1a75b66a45093ccb44217dff12",
      "parents": [
        "4a8164e5b310094315e2c50d73aeea489766a48a"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Apr 08 15:40:36 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Apr 08 15:40:36 2005 +0000"
      },
      "message": "\t* bgpd.texi: Document new \"bgp bestpath as-path confed\" command.\n\t* bgp_aspath.[ch], bgp_route.c, bgp_vty.c, bgpd.[ch]: Allow to enable\n\t  the length of confederation path segments to be included during the\n\t  as-path length check in the best path decision.\n"
    },
    {
      "commit": "d2fc88962a9a494ecb34167871bb9e7273a25d33",
      "tree": "304a1c1a744972bc10b1f677a134907c404b361d",
      "parents": [
        "386e61502d391adb985ac1487825349ec85e6a8c"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 18:38:43 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 18:38:43 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\tFix problems when netlink interfaces are renamed (same ifindex used\n\tfor a new interface).  Start cleaning up some problems with the way\n\tinterface names are handled.\n\t* interface.c: (if_new_intern_ifindex) Remove obsolete function.\n\t  (if_delete_update) After distributing the interface deletion message,\n\t  set ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t  (if_dump_vty) Detect pseudo interface by checking if ifp-\u003eifindex is\n\t  IFINDEX_INTERNAL.\n\t  (zebra_interface) Check return code from interface_cmd.func.\n\t  Do not set internal ifindex values to if_new_intern_ifindex(),\n\t  since we now use IFINDEX_INTERNAL for all pseudo interfaces.\n\t* kernel_socket.c: (ifm_read) Fix code and comments to reflect that\n\t  all internal interfaces now have ifp-\u003eifindex set to IFINDEX_INTERNAL.\n        * rt_netlink.c: (set_ifindex) New function used to update ifp-\u003eifindex.\n\t  Detects interface rename events by checking if that ifindex is already\n\t  being used.  If it is, delete the old interface before assigning\n\t  the ifindex to the new interface.\n\t  (netlink_interface, netlink_link_change) Call set_ifindex to update\n\t  the ifindex.\n\t* if.h: Remove define for IFINDEX_INTERNBASE and add define\n\t  IFINDEX_INTERNAL 0, since all internal (i.e. non-kernel) pseudo-\n\t  interfaces should have ifindex set to 0.\n\t  (if_new) Remove function.\n\t  (if_delete_retain) New function to delete an interface without\n\t  removing from iflist and freeing the structure.\n\t  (ifname2ifindex) New function.\n\t* if.c: (if_new) Remove function (absorb into if_create).\n\t  (if_create) Replace function if_new with call to calloc.\n\t  Set ifp-\u003eifindex to IFINDEX_INTERNAL.  Fix off-by-one error\n\t  in assert to check length of interface name.  Add error message\n\t  if interface with this name already exists.\n\t  (if_delete_retain) New function to delete an interface without\n\t  removing from iflist and freeing the structure.\n\t  (if_delete) Implement with help of if_delete_retain.\n\t  (ifindex2ifname) Reimplement using if_lookup_by_index.\n\t  (ifname2ifindex) New function to complement ifindex2ifname.\n\t  (interface) The interface command should check the name length\n\t  and fail with a warning message if it is too long.\n\t  (no_interface) Fix spelling in warning message.\n\t  (if_nametoindex) Reimplement using if_lookup_by_name.\n\t  (if_indextoname, ifaddr_ipv4_lookup) Reimplement using\n\t  if_lookup_by_index.\n\t* bgp_zebra.c: (bgp_interface_delete) After deleting, set ifp-\u003eifindex\n\t  to IFINDEX_INTERNAL.\n\t* isis_zebra.c: (isis_zebra_if_del) Call if_delete_retain instead\n\t  of if_delete, since it is generally not safe to remove interface\n\t  structures.  After deleting, set ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t  (zebra_interface_if_lookup) Tighten up code.\n\t* ospf6_zebra.c: (ospf6_zebra_if_del) Previously, this whole function\n\t  was commented out.  But this is not safe: we should at least update\n\t  the ifindex when the interface is deleted.  So the new version\n\t  updates the interface status and sets ifp-\u003eifindex to\n\t  IFINDEX_INTERNAL.\n\t  (ospf6_zebra_route_update) Use if_indextoname properly.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) Show ifindex and interface\n\t  flags to help with debugging.\n\t* ospf_zebra.c: (ospf_interface_delete) After deleting, set ifp-\u003eifindex\n\t  to IFINDEX_INTERNAL.\n\t  (zebra_interface_if_lookup) Make function static.  Tighten up code.\n\t* rip_interface.c: (rip_interface_delete) After deleting, set\n\t  ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t* ripng_interface.c: (ripng_interface_delete) After deleting, set\n\t  ifp-\u003eifindex to IFINDEX_INTERNAL.\n"
    },
    {
      "commit": "6cf159b97848503ee9da0273eb97a6712369fd24",
      "tree": "c2c19bab97b455fceea49a763430cc709a61682a",
      "parents": [
        "db8eaac6615dacf17eb3958b0f3b6ea58f8f1e1d"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Mar 21 10:28:14 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Mar 21 10:28:14 2005 +0000"
      },
      "message": "        * bgp_route.c: Don\u0027t crash while clearing route tables if there is\n          no particular afi/safi configured.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "338b3424154af85b0762713796397d3f2345d54f",
      "tree": "53e202ad7097edc2299179135265475bb48435ed",
      "parents": [
        "e69b9e40c74d9d910934c94c63c08e36e9799e00"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 23 14:27:24 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 23 14:27:24 2005 +0000"
      },
      "message": "\t* bgp_route.c: Make reannouncing prefixes with changed attributes\n\t  work again.\n"
    },
    {
      "commit": "dd4c593fb88b7c6cf5f27aa8a8286644743ed58a",
      "tree": "962cd10bb5bf92a42285f3bb88cbb3ef3f33f595",
      "parents": [
        "c1643bb7d7de6c030a61983be8e0925160a9e427"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 17:15:34 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 17:15:34 2005 +0000"
      },
      "message": "\t* bgp_vty.c: Deprecate \"neighbor transparent-as\" and \"neighbor\n\t  transparent-nexthop\" commands.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "c1643bb7d7de6c030a61983be8e0925160a9e427",
      "tree": "4be029bfbc3ec5d53996966824a5a88c5c2a0395",
      "parents": [
        "fee6e4e4547783b915838f6868d6cd694f6cee21"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 16:43:17 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 16:43:17 2005 +0000"
      },
      "message": "\t* bgp_routemap.c: New route-map command - \"match ip route-source\".\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "fee6e4e4547783b915838f6868d6cd694f6cee21",
      "tree": "2fb39322113433ab2d5e42042c1b9e397779b6c1",
      "parents": [
        "6ffd2079596c232856dda0d56fddd9610e8d61fe"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 16:29:31 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 16:29:31 2005 +0000"
      },
      "message": "\t* bgp_clist.[ch], bgp_route.c, bgp_routemap.c, bgp_vty.c:\n\t  community-list cleanup.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "6ffd2079596c232856dda0d56fddd9610e8d61fe",
      "tree": "d5c4906cbfb4af98a8c73be667a9ab2369a6c64b",
      "parents": [
        "93406d87e68a0e9cf5ce0240461395cd59c143b6"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:50:11 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:50:11 2005 +0000"
      },
      "message": "\t* bgp_route.c, bgp_vty.c, bgp_zebra.c, bgpd.[ch]: \"enforce-multihop\"\n\t  -\u003e \"disable-connected-check\".\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "93406d87e68a0e9cf5ce0240461395cd59c143b6",
      "tree": "b1cb2bae2eca7c5206565f73169cf43bf8cf892d",
      "parents": [
        "c9502438e822199370fe87100c725e1092e943c1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:40:33 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Feb 02 14:40:33 2005 +0000"
      },
      "message": "\t* bgp_fsm.c, bgp_open.c, bgp_packet.c, bgp_route.[ch], bgp_vty.c,\n\t  bgpd.[ch]: Add BGP_INFO_STALE flag and end-of-rib support. \"bgp\n\t  graceful-restart\" commands added. Show numbers of individual\n\t  messages in \"show ip bgp neighbor\" command. Final pieces of graceful\n\t  restart.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "c9502438e822199370fe87100c725e1092e943c1",
      "tree": "bfeb6babd5d0ba6037ab2aa3a544b2d855e4e8d9",
      "parents": [
        "3d515fd9af9f126667a9c2da9c2f40c4c37c28df"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 22:01:48 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 22:01:48 2005 +0000"
      },
      "message": "\t* bgp_open.c, bgp_packet.c, bgp_vty.c, bgpd.[ch]: Remove \"no neighbor\n\t  capability route-refresh\" commands. Route refresh capability is sent\n\t  anyway now. Preserve dummy deprecated commands.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "3d515fd9af9f126667a9c2da9c2f40c4c37c28df",
      "tree": "c107224556ed7678d7a5afc42c19742948cda477",
      "parents": [
        "0a486e5fcb1b8dac7d8b4cf6ed93e82b8b72fed6"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 21:30:04 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 21:30:04 2005 +0000"
      },
      "message": "\t* bgp_attr.c, bgp_snmp.c, bgp_vty.c, bgpd.[ch]: Remove support for old\n\t  draft - ie. \"neighbor version 4-\" commands. Preserve dummy \"neighbor\n\t  version\" command as deprecated.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "0a486e5fcb1b8dac7d8b4cf6ed93e82b8b72fed6",
      "tree": "f63429ed7767e227457cb48196d82f12e4fcaad6",
      "parents": [
        "f418446bb767d79438e2df689c5bf9563c54b317"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:57:17 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:57:17 2005 +0000"
      },
      "message": "\t* bgpd.[ch], bgp_vty.c, bgp_route.c: \"Restart session after\n\t  maximum-prefix limit\" feature support.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "f418446bb767d79438e2df689c5bf9563c54b317",
      "tree": "a1c7322c8b54e46a09bf2f402537277fff59c1c3",
      "parents": [
        "6a52d0d155fc8b892e30cdb5e3fbe4c2779bd4cd"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:13:16 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Feb 01 20:13:16 2005 +0000"
      },
      "message": "        * bgp_nexthop.c: Improve debug.\n        * bgpd.[ch], bgp_nexthop.c, bgp_snmp.c: Remove useless bgp_get_master()\n          function.\n        * bgp_packet.c: MP AFI_IP update and withdraw parsing.\n        * bgp_fsm.c: Reset peer synctime in bgp_stop(). bgp_fsm_change_status()\n          is better place to log about peer status change than bgp_event().\n          Log in bgp_connect_success().\n        * bgp_vty.c: Fix typo in comment.\n        * bgp_attr.c: Better log about unknown attribute.\n\n\t[merge from GNU Zebra]\n"
    },
    {
      "commit": "3b8b1855038afde448993e5a56955e9b7a4d99c2",
      "tree": "5378ad7cc9d2fdb42558044833036e347ca1277e",
      "parents": [
        "4460e7a4cf3dadcd9f06e4b519ba7be2cc936c0a"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 18:19:13 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 18:19:13 2005 +0000"
      },
      "message": "2005-01-29 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* buffer.h: Fix comment on buffer_getstr to reflect that it now\n\t  uses XMALLOC.\n\t* buffer.c: (buffer_getstr) Use XMALLOC(MTYPE_TMP) instead of malloc.\n\t* filter.c: (access_list_remark,ipv6_access_list_remark) Use\n\t  argv_concat instead of buffer_getstr.\n\t* if.c: (interface_desc) Use argv_concat instead of buffer_getstr.\n\t* plist.c: (ip_prefix_list_description,ipv6_prefix_list_description)\n\t  Use argv_concat instead of buffer_getstr.\n\t* bgp_filter.c: (ip_as_path,no_ip_as_path) Use argv_concat instead\n\t  of buffer_getstr.\n\t* bgp_route.c: (bgp_show_regexp) Fix memory leak: need to free string\n\t  returned by buffer_getstr.\n\t  (bgp_show_community) Must use XFREE instead of free on string\n\t  returned by buffer_getstr.\n\t* bgp_routemap.c: (set_community) Must use XFREE instead of free\n\t  on string returned by buffer_getstr.\n\t* bgp_vty.c: (neighbor_description) Use argv_concat instead of\n\t  buffer_getstr.\n"
    },
    {
      "commit": "6d69429c1bff7291bac52a05234c12434f152a94",
      "tree": "e37c98526a257a907e23986e6ada290bc39f09c9",
      "parents": [
        "c15cb24241277db9fb4102ddc712dc3297f16d1f"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Jan 24 09:29:42 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Jan 24 09:29:42 2005 +0000"
      },
      "message": "\t* bgp_route.c: Fix showstopper bug. New route must be selected also\n\t  if old one is flaged as BGP_INFO_ATTR_CHANGED.\n"
    },
    {
      "commit": "f127165de02a66934082f23810fab37d7efbce8b",
      "tree": "aed5017ae77c2927b48bc5950c928782ef9c8d80",
      "parents": [
        "583d800c11922018af02420a758f974be691065f"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Jan 17 11:04:32 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Jan 17 11:04:32 2005 +0000"
      },
      "message": "\t* bgp_route.c: Clear peer\u0027s routing table regardless whether it\u0027s\n\t  configured or not. Being not configured is even better reason to\n\t  do it.\n"
    },
    {
      "commit": "a24a7e1b9e145d4c855d0aa4d919a79f598c645b",
      "tree": "02236b0424330cce2c902a9a971829a3610bac25",
      "parents": [
        "6c20046fd7494f9f529dac1b6f79da51b6efa44d"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 05 08:14:13 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 05 08:14:13 2005 +0000"
      },
      "message": "2005-01-05 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* bgp_packet.c: (bgp_write) set socket to nonblock while writing\n          this should be generalised. See bugzilla #102. Fix supplied by\n\t  wawa@yandex-team.ru (Vladimir Ivanov).\n"
    },
    {
      "commit": "d2c1f16be47a3d60555219a92dad8639f381d553",
      "tree": "662cd144ac4f838c65a5e6397363699768b3b76d",
      "parents": [
        "6b51474d91024a4a0e82fccdd55580ce9b3f5561"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 21:10:20 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 21:10:20 2004 +0000"
      },
      "message": "2004-12-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* *.c: Change level of debug messages to LOG_DEBUG.\n"
    },
    {
      "commit": "274a4a4447b13f89f8237156a887d05a24a73cc6",
      "tree": "d5c2c6ee94bb77ef4346bcc07834808a75210bfd",
      "parents": [
        "5e76477456ce8bc4a1eeaccb5c5e1d3d99ab1300"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 15:39:31 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 15:39:31 2004 +0000"
      },
      "message": "2004-12-07 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* bgp_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* isis_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.\n\t  Note that stdout logging will no longer be enabled by default when\n\t  not running as a daemon.\n\t* ospf_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* rip_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* ripng_main.c: (main) The 2nd argument to openzlog has been removed.\n\t* main.c: (main) The 2nd argument to openzlog has been removed.\n\t  So stdout logging will no longer be enabled by default.\n\t* irdp_main.c: (irdp_finish) Reduce severity of shutdown message\n\t  from LOG_WARNING to LOG_INFO.\n\t* vtysh.c: Make several functions static instead of global.\n\t  Added several commands to support destination-specific logging levels.\n\t  (vtysh_completion) This function is unused, so comment it out.\n\t* basic.texi: Document new logging features.  Separate basic config\n\t  commands from basic VTY commands.\n\t* log.h: Replace struct zlog flags and maskpri fields with maxlvl\n\t  array to support individual logging levels for each destination.\n\t  Remove the 2nd argument to openzlog since the default logging config\n\t  should be standardized inside the library.  Replaced the\n\t  zlog_set_flag and zlog_reset_flag functions with zlog_set_level.\n\t  And zlog_set_file now requires an additional log_level argument.\n\t  Declare zlog_proto_names for use inside command.c in the\n\t  \"show logging\" command.  Added defines useful for command\n\t  construction.\n\t* log.c: (vzlog) Decide where to send the message based on the\n\t  individual logging levels configured for each destination.\n\t  Remove support for ZLOG_STDERR since it was never actually used.\n\t  Support record-priority for terminal monitors.\n\t  (zlog_signal,zlog_backtrace_sigsafe) Support destination-specific\n\t  logging levels.  Remove stderr support (was never used).  Added\n\t  support for terminal monitor logging.\n\t  (_zlog_assert_failed) Increase message severity to LOG_EMERG.\n\t  (openzlog) Remove 2nd argument since default config should be\n\t  standardized in library.  By default, terminal monitoring\n\t  is set to debug, and all other logging is disabled.\n\t  (zlog_set_flag,zlog_reset_flag) Removed.\n\t  (zlog_set_level) New function to replace zlog_set_flag and\n\t  zlog_reset_flag.  Supports destination-specific logging levels.\n\t  (zlog_set_file,zlog_reset_file) Support file-specific logging level.\n\t  (zlog_rotate) Log an error message if fopen fails, and support\n\t  new file-specific logging level.\n\t* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that\n\t  command functions will be static instead of global.  Remove\n\t  declarations for config_exit and config_help.  Define new macros\n\t  DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can\n\t  have deprecated commands in vtysh.  Similarly, for completeness,\n\t  define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.\n\t  Also, fix bug in ALIAS_ATTR macro (didn\u0027t matter because it\n\t  was never used).\n\t* command.c: Make many functions static instead of global.\n\t  (facility_name,facility_match,level_match) New functions\n\t  to support enhanced destination-specific logging levels.\n\t  (config_write_host) Support new destination-specific logging levels.\n\t  (config_logmsg) Added new \"logmsg\" command to help test logging\n\t  system.\n\t  (show_logging) Added \"show logging\" command to show the current\n\t  configuration of the logging system.\n\t  (config_log_stdout_level) Support explicit stdout logging level.\n\t  (no_config_log_stdout) Now takes optional LEVEL arg.\n\t  (config_log_monitor,config_log_monitor_level,no_config_log_monitor)\n\t  New commands creating new \"log monitor\" commands to set terminal\n\t  monitoring log level.\n\t  (config_log_file_level) Support explicit file logging level.\n\t  (config_log_syslog_level) Support explicit syslog logging level.\n\t  (config_log_facility,no_config_log_facility) Implement new\n\t  \"log facility\" command.\n\t  (cmd_init) Add hooks for new commands: \"show logging\", \"logmsg\",\n\t  \"log stdout \u003clevel\u003e\", \"log monitor\", \"log monitor \u003clevel\u003e\",\n\t  \"no log monitor\", \"log file \u003cfilename\u003e \u003clevel\u003e\",\n\t  \"no log file \u003cfilename\u003e \u003clevel\u003e\", \"log syslog \u003clevel\u003e\",\n\t  \"log facility\", and \"no log facility\".\n\t* vty.h: Added a \"level\" argument to vty_log so it can support\n\t  \"log record-priority\".  Declare new function vty_log_fixed for\n\t  use in signal handlers.\n\t* vty.c: (vty_log,vty_log_out) Added a \"level\" argument to support\n\t  \"log record-priority\" for vty terminal monitors.\n\t  (vty_down_level) Use config_exit_cmd.func instead of calling\n\t  config_exit directly (since command functions will now be static\n\t  instead of global).\n\t  (vty_log_fixed) New function to send terminal monitor messages\n\t  from inside a signal handler.\n"
    },
    {
      "commit": "887c44a4f3d8219dc5b1c52b5dcde1f31d52b73d",
      "tree": "5c0ef5fe1d3948c56e6abf2ffd3c9811e92f0f2e",
      "parents": [
        "bec595ada58ebfa98ad49220f29ab28b58549094"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 16:36:46 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Dec 03 16:36:46 2004 +0000"
      },
      "message": "2004-12-03 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* bgp_main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Use zlog_notice for startup announcement.\n\t* isis_main.c: (sigint,sigterm) Use zlog_notice for termination message.\n\t  (terminate) This function should be static, not global.\n\t  (main) Use zlog_notice for startup announcement, and remove\n\t  ifdef ZEBRA_VERSION.\n\t* version.h.in: Remove declaration for pid_output_lock, this function\n\t  is now static, not global.\n\t* pid_output.c: (pid_output_lock) This function should be static, not\n\t  global.  And remove \"old umask\" error message, since it was really\n\t  an unimportant debug message, not an error.\n\t  (pid_output) Need to declare static function pid_output_lock.\n\t* ospf6_main.c: (sigint,sigterm) Use zlog_notice for termination\n\t  message.\n\t  (main) Remove commented-out call to pid_output_lock (which should\n\t  never be called other than from inside pid_output).  And use\n\t  zlog_notice to print the startup message, which now includes\n\t  the vty port.\n\t* ospf_main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Issue a startup announcement using zlog_notice.\n\t* rip_main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Add a startup announcement using zlog_notice.\n\t* ripng_main.c: (sighup) Remove spurious terminating message.\n\t  (sigint) Use zlog_notice for termination message.\n\t  (main) Issue a startup announcement using zlog_notice.\n\t* main.c: (sigint) Use zlog_notice for termination message.\n\t  (main) Add a startup announcement using zlog_notice.\n"
    },
    {
      "commit": "c065230a4c617a1cdf8813dd25384bcc9591f61a",
      "tree": "42285fe5604e43ada3b53ac9a77ba1e3c4464b52",
      "parents": [
        "accb156b9b1c3f4b46ab01f8850200f450fc40d8"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Nov 25 19:33:48 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Nov 25 19:33:48 2004 +0000"
      },
      "message": "Make group to run daemon as configurable. Fixes #2 from Bugzilla #64.\n"
    },
    {
      "commit": "5932020bb11c1b5447f4aa4423062f275ab1fa94",
      "tree": "5c23a5b805cb1d1701c9f2290c192ac7ba5a5640",
      "parents": [
        "1b074dd28a04f4734e37d420c95c492affe24bc1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Nov 09 01:54:03 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Nov 09 01:54:03 2004 +0000"
      },
      "message": "2004-11-09 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* bgp_nexthop.c: collapse bgp_connected_ipvX, bgp_nexthop_cache_ipvX\n\t  and cache{1,2}.. into arrays of tables and hence collapse\n          bgp_scan_ipv{4,6} into a single bgp_scan function. Tested, though\n          a long time ago (and this change was hand-merged).\n"
    },
    {
      "commit": "5a64665039dc98c341fd8d50458ec2a72c5ebbf5",
      "tree": "e89689f085b7b8eed09a0558e2a80dadb4826033",
      "parents": [
        "f3ae74cdf0768d0bd35f26f728f72439f2d8bd6f"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 05 01:25:55 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Nov 05 01:25:55 2004 +0000"
      },
      "message": "2004-11-04 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* vty.h: Remove fields in struct vty that were related to VTY_CONTINUE\n\t  capabilities (that were used only in bgpd/bgp_route.c and are now\n\t  removed).  Also remove some other fields that were not being\n\t  used at all.\n\t* vty.c: (vty_execute) Do not test for obsolete status values VTY_START\n\t  and VTY_CONTINUE.\n\t  (vty_read) Remove calls to vty-\u003eoutput_func since that was part\n\t  of the VTY_CONTINUE infrastructure that has been removed.\n\t  (vty_flush) Remove code to support VTY_START and VTY_CONTINUE.\n\t  (vty_close) Remove code to cancel vty-\u003et_output thread, since that\n\t  thread was never actually used.\n\t* bgp_route.c: Remove all code related to VTY_CONTINUE; this feature\n\t  is deprecated because the output did not represent a single point\n\t  in time.  All output needs to be generated inline and buffered\n\t  by the library code.\n\t  (route_vty_out,route_vty_out_tag,damp_route_vty_out,\n\t   flap_route_vty_out) Remove code to count number of lines of output,\n\t   since this was only useful for VTY_CONTINUE behavior.\n\t  (bgp_show_callback) Removed.\n\t  (bgp_show_table) Remove hooks for VTY_CONTINUE callback support.\n\t  As a result, there\u0027s a new output_arg argument to this function.\n\t  Make function static.\n\t  (bgp_show) Make function static and add a new output_arg argument.\n\t  Change all functions that call bgp_show or bgp_show_table to\n\t  pass the new output_arg argument (that used to be passed inside\n\t  vty-\u003eoutput_arg).\n\t* bgp_mplsvpn.c: Remove declarations of functions defined in\n\t  bgp_route.c; these declarations belong in bgp_route.h.\n\t* bgp_route.h: Declare 3 global functions used in both bgp_route.c\n\t  and in bgp_mplsvpn.c.\n"
    },
    {
      "commit": "a2b1ecd29f8bd4b01d5287ff862e156b2ffc30b3",
      "tree": "6c4947a0e49537be984ca482b5b4f32b3763d2bc",
      "parents": [
        "64511f394a90602a31cbe1660be426c16439322c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Oct 31 18:58:09 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Oct 31 18:58:09 2004 +0000"
      },
      "message": "2004-10-31 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* {bgpd,bgp_attr}.c: size_t printf format should be ld.\n"
    },
    {
      "commit": "98f5163c3fb005af35f9f3a4bc4ee60d4f3ee741",
      "tree": "0fb3b1a0da479f53152294a5f1f059b9ab8258a8",
      "parents": [
        "508ec9102057c86769e5c0dd280037025102a9c0"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Oct 25 14:19:15 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Oct 25 14:19:15 2004 +0000"
      },
      "message": "2004-10-25 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* Update with fix in debian bug id 222930.\n\t* bgp_main.c: Add ZCAP_RAW, needed to bind to interfaces.\n\t  bgp_network.c: (....) raise/lower privs around call to\n          SO_BINDTODEVICE sockopt.\n"
    },
    {
      "commit": "3fb9cd6ef456959b6eff939d5c316f6785c2dda4",
      "tree": "e350cb3ef7b20b8bbccfb1aa9309152311e845bd",
      "parents": [
        "5ae35f45f1292dce3a01f241accafeb2e59b10cc"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 19 19:44:43 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 19 19:44:43 2004 +0000"
      },
      "message": "OK. Here it is - PtP patch from Andrew J. Schorr. No problems with ospfd,\nripd might need some more testing though.\n"
    },
    {
      "commit": "501ba490846e87e6fd5bfea05c31dce1777915b9",
      "tree": "e81c211d3b1cf95f925fd076c4517d2ef89985ac",
      "parents": [
        "8b3126b3c0b18144f8b748d7d82d72dcd538396d"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 21:32:46 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 21:32:46 2004 +0000"
      },
      "message": "Make dump configuration appear in vtysh.\n"
    },
    {
      "commit": "8b3126b3c0b18144f8b748d7d82d72dcd538396d",
      "tree": "853e095b735e169ace22e8a7f5c44fe10f4f0431",
      "parents": [
        "f4ad4dbea2cdda5d763143b221ddeaa92fe06840"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 20:59:04 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 20:59:04 2004 +0000"
      },
      "message": "Ladies and Gentlemens. This file is dead for years, from 1999 to be exact.\n"
    },
    {
      "commit": "c75105ab6e6eeac0b013eab186c97641984f68cc",
      "tree": "ea221df06e957de7e83f379c9b45f578762736e7",
      "parents": [
        "d68614db1dc36a6814fee33f584417b1441a83e4"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 10:33:26 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Oct 13 10:33:26 2004 +0000"
      },
      "message": "Make initializing smux connection configurable - \"smux peer OID\" command\ninitializes connection, and \"no smux peer\" command terminates it. Fixes\nbugzilla #47 and #112.\n"
    },
    {
      "commit": "fd79ac918b8feaacebe9719adaac97dffb69137a",
      "tree": "d0665eb68e60da9d6e364414cdb61830f19f33d3",
      "parents": [
        "39db97e4e02eae08a1e18528367b6e9b07eb6a93"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 13 05:06:08 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 13 05:06:08 2004 +0000"
      },
      "message": "2004-10-13 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* (global) more const\u0027ification and fixups of types to clean up code.\n\t* bgp_mplsvpn.{c,h}: (str2tag) fix abuse. Still not perfect,\n          should use something like the VTY_GET_INTEGER macro, but without\n          the vty_out bits..\n        * bgp_routemap.c: (set_aggregator_as) use VTY_GET_INTEGER_RANGE\n          (no_set_aggregator_as) ditto.\n        * bgpd.c: (peer_uptime) fix unlikely bug, where no buffer is\n          returned, add comments about troublesome return value.\n"
    },
    {
      "commit": "18a6dce6f83dd20caf1f36c8e840868ff0bf6dbd",
      "tree": "ff832cbf6fe2b239bde06268820587bec671ae6d",
      "parents": [
        "a49c0ff6771975eeb1bd7da923a9dc830200cf65"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:18:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:18:34 2004 +0000"
      },
      "message": "Common router id.\n"
    },
    {
      "commit": "c9e52be3f4d98943b67fbbe5d9a7ccd823b88326",
      "tree": "d4045a946af3be8bbdc303162778e8c44057e2f9",
      "parents": [
        "e473b032b860444b9656cee1654b0120f77b52b1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Sep 26 16:09:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Sep 26 16:09:34 2004 +0000"
      },
      "message": "Compiler warnings fixes.\n"
    },
    {
      "commit": "52dc7ee65f8d887b0730abc0a5d44d27fc6ecafd",
      "tree": "a557339540c56dd3953c29a50ca0e48c1911efc8",
      "parents": [
        "44983cf8a9c587dfbcad294b9dfe4dccbb68ba98"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Sep 23 19:18:23 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Sep 23 19:18:23 2004 +0000"
      },
      "message": "Remove usage of evil list and listnode typedefs.\n"
    },
    {
      "commit": "e01f9cbb87123217ac6d88c12ddb784fca9cc5b7",
      "tree": "edf78b44ec8c5979afe0abdeefa8b33572e67ef7",
      "parents": [
        "b9790b34c825e390c818044f6666f73beee1d373"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 09 17:48:53 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 09 17:48:53 2004 +0000"
      },
      "message": "2004-07-09 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        Merge of GNU Zebra cvs2svn changesets r799, r800 and r807.\n\n        * bgp_dump.c: (bgp_dump_attr) cleanup. return status code. check\n          attributes present before printing.\n        * bgp_dump.c: update bgp_dump_attr prototype.\n        * bgp_packet.c: (bgp_update_receive) init attrstr. check status\n          of bgp_dump_attr. Log end-of-rib UPDATEs.\n"
    },
    {
      "commit": "f5ba387492ec163f1200d949a984f12ef88538ba",
      "tree": "c17eef0501ef903883aae2ec62fba0be1a244fa0",
      "parents": [
        "4d4653afe362d6ea549c6e21b27afe01fb8b8aac"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 09 12:11:31 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 09 12:11:31 2004 +0000"
      },
      "message": "2004-07-09 Sowmini Varadhan \u003csowmini.varadhan@sun.com\u003e\n\n        * bgp_packet.c: (bgp_collision_detect) Send NOTIFY on new socket\n          if that is connection we\u0027re closing.\n          (bgp_read) invalid marker check applies to KEEPALIVE too.\n        * bgp_route.c: Ignore multicast NRLI, dont send NOTIFY.\n"
    }
  ],
  "next": "5228ad27e2f3abe0ebb69f66607aedc048b94a13"
}
