)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "1eb8ef2584833f18fb674e127d59cb5a7f771482",
      "tree": "f5b09d4781de9a9b08839fefb6530e64d2d2ec31",
      "parents": [
        "5920990fecba7e2430af3cfaa8bcbaed40d0ba1a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 07 07:30:20 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 07 07:30:20 2005 +0000"
      },
      "message": "2005-04-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global): Fix up list loops to match changes in lib/linklist,\n\t  and some basic auditing of usage.\n\t* configure.ac: define QUAGGA_NO_DEPRECATED_INTERFACES\n\t* HACKING: Add notes about deprecating interfaces and commands.\n\t* lib/linklist.h: Add usage comments.\n\t  Rename getdata macro to listgetdata.\n\t  Rename nextnode to listnextnode and fix its odd behaviour to be\n\t  less dangerous.\n\t  Make listgetdata macro assert node is not null, NULL list entries\n          should be bug condition.\n          ALL_LIST_ELEMENTS, new macro, forward-referencing macro for use\n          with for loop, Suggested by Jim Carlson of Sun.\n          Add ALL_LIST_ELEMENTS_RO for cases which obviously do not need the\n          \"safety\" of previous macro.\n\t  LISTNODE_ADD and DELETE macros renamed to ATTACH, DETACH, to\n\t  distinguish from the similarly named functions, and reflect their\n\t  effect better.\n\t  Add a QUAGGA_NO_DEPRECATED_INTERFACES define guarded section\n\t  with the old defines which were modified above,\n\t  for backwards compatibility - guarded to prevent Quagga using it..\n\t* lib/linklist.c: fix up for linklist.h changes.\n\t* ospf6d/ospf6_abr.c: (ospf6_abr_examin_brouter) change to a single\n\t  scan of the area list, rather than scanning all areas first for\n\t  INTER_ROUTER and then again for INTER_NETWORK. According to\n\t  16.2, the scan should be area specific anyway, and further\n\t  ospf6d does not seem to implement 16.3 anyway.\n"
    },
    {
      "commit": "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": "c29fdba771810c70d78d87127d3a479e0f72b60e",
      "tree": "75361d6969db5f8796596ccb7dbcae1d6769523e",
      "parents": [
        "d1db06faa82a331fb6729064290ecbc61a969b88"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 09 14:46:46 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Thu Dec 09 14:46:46 2004 +0000"
      },
      "message": "Add comments with warnings obtained on NetBSD/i386.  Both are due to\nsize_t being used for streams.  Perhaps cast to unsigned long before\nprintf?  Surely that\u0027s big enough even if size_t could be larger in\ntheory.\n\n(no changelog, since only comment changes)\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": "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": "fee0f4c629412f422fc9a857e097ef335c2c576c",
      "tree": "14703e303ea2cecaee7728d9ee27075b0590a679",
      "parents": [
        "0e82d0e1204e45ecce773a7e19f7d64140f7a66a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 13 05:12:46 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 13 05:12:46 2004 +0000"
      },
      "message": "2004-09-13 Jose Luis Rubio \u003cjrubio@dit.upm.es\u003e\n           (at Technical University of Madrid as part of Euro6ix Project)\n\n        Enhanced Route Server functionality and Route-Maps:\n\n        * bgpd/bgpd.h: Modified \u0027struct peer\u0027 and \u0027struct bgp_filter\u0027 to\n        support rs-clients. A \u0027struct bgp_table *rib\u0027 has been added to the\n        first (to mantain a separated RIB for each rs-client) and two new\n        route-maps have been added to the last (for import/export policies).\n        Added the following #defines: RMAP_{IN|OUT|IMPORT|EXPORT|MAX},\n        PEER_RMAP_TYPE_{IMPORT|EXPORT} and BGP_CLEAR_SOFT_RSCLIENT.\n\n        * bgpd/bgpd.c: Modified the functions that create/delete/etc peers in\n        order to consider the new fields included in \u0027struct peer\u0027 for\n        supporting rs-clients, i.e. the import/export route-maps and the\n        \u0027struct bgp_table\u0027.\n\n        * bgpd/bgp_route.{ch}: Modified several functions related with\n        receiving/sending announces in order to support the new Route Server\n        capabilities.\n        Function \u0027bgp_process\u0027 has been reorganized, creating an auxiliar\n        function for best path selection (\u0027bgp_best_selection\u0027).\n        Modified \u0027bgp_show\u0027 and \u0027bgp_show_route\u0027 for displaying information\n        about any RIB (and not only the main bgp RIB).\n        Added commands for displaying information about RS-clients RIBs:\n        \u0027show bgp rsclient (A.B.C.D|X:X::X:X)\u0027, \u0027show bgp rsclient\n        (A.B.C.D|X:X::X:X) X:X::X:X/M\u0027, etc\n\n        * bgpd/bgp_table.{ch}: The structure \u0027struct bgp_table\u0027 now has two\n        new fields: type (which can take the values BGP_TABLE_{MAIN|RSCLIENT})\n        and \u0027void *owner\u0027 which points to \u0027struct bgp\u0027 or \u0027struct peer\u0027 which\n        owns the table.\n        When creating a new bgp_table by default \u0027type\u003dBGP_TABLE_MAIN\u0027 is set.\n\n        * bgpd/bgp_vty.c: The commands \u0027neighbor ... route-server-client\u0027 and\n        \u0027no neighbor ... route-server-client\u0027 now not only set/unset the flag\n        PEER_FLAG_RSERVER_CLIENT, but they create/destroy the \u0027struct\n        bgp_table\u0027 of the peer. Special actions are taken for peer_groups.\n        Command \u0027neighbor ... route-map WORD (in|out)\u0027 now also supports two\n        new kinds of route-map: \u0027import\u0027 and \u0027export\u0027.\n        Added commands \u0027clear bgp * rsclient\u0027, etc. These commands allow a new\n        kind of soft_reconfig which affects only the RIB of the specified\n        RS-client.\n        Added commands \u0027show bgp rsclient summary\u0027, etc which display a\n        summary of the rs-clients configured for the corresponding address\n        family.\n\n        * bgpd/bgp_routemap.c: A new match statement is available,\n        \u0027match peer (A.B.C.D|X:X::X:X)\u0027. This statement can only be used in\n        import/export route-maps, and it matches when the peer who announces\n        (when used in an import route-map) or is going to receive (when used\n        in an export route-map) the route is the same than the one specified\n        in the statement.\n        For peer-groups the statement matches if the specified peer is member\n        of the peer-group.\n        A special version of the command, \u0027match peer local\u0027, matches with\n        routes originated by the Route Server (defined with \u0027network ...\u0027,\n        redistributed routes and default-originate).\n\n        * lib/routemap.{ch}: Added a new clause \u0027call NAME\u0027 for use in\n        route-maps. It jumps into the specified route-map and when it returns\n        the first route-map ends if the called RM returns DENY_MATCH, or\n        continues in other case.\n"
    },
    {
      "commit": "538621f2f80ced838048fa7402e57face3b224a5",
      "tree": "1193f5948da15db665aa6d4a43027c466c0614b4",
      "parents": [
        "3950fda506e4db58a0ccc50156cf70f97da95bc3"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri May 21 09:31:30 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri May 21 09:31:30 2004 +0000"
      },
      "message": "Merge graceful restart capability display and some small fixes from Zebra\nrepository by Rivo Nurges.\n"
    },
    {
      "commit": "e0701b7955b883c5437269a382e1afc76ee71e5c",
      "tree": "d00034c1b7f369fc8214d401b7a44ef586d73e15",
      "parents": [
        "62843e433d8f85bce381edc6202c4af6c5cec31b"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 20 09:19:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu May 20 09:19:34 2004 +0000"
      },
      "message": "Merge bgpd changeset 1176 from Zebra repository by Rivo Nurges.\n"
    },
    {
      "commit": "eb821189d2778a93069fc1fc2f104db529ec5a1e",
      "tree": "a623d680931ee722fb946f56476f23efd1f13685",
      "parents": [
        "eb3f463aab7f09e6c1041bf779fd5752b038f847"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 01 08:44:08 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 01 08:44:08 2004 +0000"
      },
      "message": "2004-05-01 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * Revert the attempted clean-up of the dummy peer hack, reverts\n          patchsets 435 (see 2004-02-17 below) and 456.\n"
    },
    {
      "commit": "545acafbf599b3d163813e6640a1f83703ebda2e",
      "tree": "dd2c4b6288cf4cd34a381c280c995d85c40c8ecc",
      "parents": [
        "6b3fac0aab9ea72c927531df4c20a6e60df650fe"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Apr 20 15:13:15 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Apr 20 15:13:15 2004 +0000"
      },
      "message": "2004-04-16 rivo nurges \u003crix@estpak.ee\u003e\n\n        * bgpd.h: update cease subcodes to draft-ietf-idr-cease-subcode-05\n        * bgpd.h, bgpd.c, bgp_route.c, bgp_route.h: fix UNH IOL BGP-4.1.6a\n"
    },
    {
      "commit": "6ad23f05e36e743b89fc5a9a41e3db7eccb917fb",
      "tree": "522a8914b6aefe124c2e972481e89f408110ef3c",
      "parents": [
        "5de5bbf107f9eacb8d8265f8c0b925b2aed21878"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Feb 17 19:45:10 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Feb 17 19:45:10 2004 +0000"
      },
      "message": "2004-02-17 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * bgpd.h: (bgp_peer) add fd_local and fd_accept\n          file descriptor\u0027s, fd becomes a pointer to one of these.\n        * bgpd.c: (global) adjust for fact that fd is now a pointer.\n          (peer_create_accept) removed.\n        * bgp_route.c: (global) adjust for change of peer fd to pointer\n        * bgp_packet.c: (bgp_collision_detect) adjust and remove the\n          \"replace with other peer\" hack.\n        * bgp_network.c: (bgp_accept) Remove the dummy peer hack.\n          Update peer-\u003efd_accept instead.\n          (global) Adjust fd references - now a pointer.\n        * bgp_fsm.c: (global) adjust peer fd to pointer.\n          (bgp_connection_stop) new function, to stop connection.\n          (global) adjust everything which closed peer fd to use\n          bgp_connection_stop().\n"
    },
    {
      "commit": "848973c71e75424d07c2cd52ba991aae1b9df12a",
      "tree": "0a46f5b0fea868dd2003a475d860108b14786fe1",
      "parents": [
        "e8f2984c00d406781eff42db7afcdae5d5a6a366"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Aug 13 00:32:49 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Aug 13 00:32:49 2003 +0000"
      },
      "message": "2003-08-13 kunihiro \u003ckunihiro@zebra.org\u003e\n\n\t* bgpd/bgp{_fsm.c,_vty.c,d.c,d.h}: Add support for \"bgp\n          log-neighbor-changes\" command.\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
