)]}'
{
  "log": [
    {
      "commit": "fc98d16ea77372f4ab4231e8904f8467e8d1ef71",
      "tree": "ad69423081bd300c5a60262f947760ac7189744f",
      "parents": [
        "dc00d2bb56aa6a84dd2328133f69db3c3e6d9dc7"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 09 11:36:23 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 09 11:36:23 2012 +0000"
      },
      "message": "bgpd: reinstate zlookup checks, required for BGP without zebra\n\n* bgp_nexthop.c: The nexthop lookup cache has to return success for queried\n  nexthops if bgpd isn\u0027t connected to zebra, or else BGP without zebra doesn\u0027t\n  work.\n"
    },
    {
      "commit": "0e8032d69961ae196c11ba6ead856084c7acf7c2",
      "tree": "f9adf1934b0b34fd3e4db4896bc83c05e471d234",
      "parents": [
        "b64bfc1c4a552fc0b4dd024d5f77171ec848a5df"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Aug 09 14:42:58 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:31:50 2012 +0000"
      },
      "message": "bgpd: improve \"show ip bgp scan detail\"\n\n* bgp_nexthop.c (show_ip_bgp_scan_tables): access proper structure field\n  in AF_INET6 case, handle ifindex NH type properly\n"
    },
    {
      "commit": "b64bfc1c4a552fc0b4dd024d5f77171ec848a5df",
      "tree": "f03661d27a79ae5810c861c643d85d810e885b87",
      "parents": [
        "318f0d8a7f5e8e87086bbf2a9e7c4b35638951ac"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Aug 08 19:36:44 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:31:35 2012 +0000"
      },
      "message": "bgpd: dismiss some zlookup checks\n\nbgp_nexthop_onlink(): zlookup is not used here at all\nbgp_nexthop_lookup_ipv6(): rely on the detection performed by \"query\"\n  function (this also changes the fallback value to 0), reorder if-block\nbgp_nexthop_lookup(): idem\n"
    },
    {
      "commit": "318f0d8a7f5e8e87086bbf2a9e7c4b35638951ac",
      "tree": "deab95315df2b315ba5b03162c43b61cb6c9ff2b",
      "parents": [
        "8e80bdf20f493a71bcf74262ed3aa3a2437f4df6"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Aug 05 21:47:08 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:31:17 2012 +0000"
      },
      "message": "bgpd: add \"show ip bgp scan detail\" command\n\n* bgp_nexthop.c: (show_ip_bgp_scan) transform into\n  show_ip_bgp_scan_tables(), which uses inet_ntop() and can dump\n  nexthops on request; (show_ip_bgp_scan_detail_cmd) new function\n"
    },
    {
      "commit": "8e80bdf20f493a71bcf74262ed3aa3a2437f4df6",
      "tree": "b1ebddbda4b8f12a28c3ce6299ebe931105a25b6",
      "parents": [
        "23be94ea00fadace0007b6ffa6c9107124249e91"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Fri Aug 05 18:52:52 2011 +0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jan 08 11:30:55 2012 +0000"
      },
      "message": "bgpd: touch nexthop handling code\n\nbgp_nexthop_lookup_ipv6(): declare variables where they are actually\nused, drop no-op initialization (the field is already 0)\nbgp_nexthop_lookup(): ditto\nbgp_nexthop_check_ebgp(): rename to bgp_nexthop_onlink()\nbgp_nexthop_cache_changed(): rename to bgp_nexthop_cache_different()\n"
    },
    {
      "commit": "b51146856e660bcec723f535c17dc1c38b2f6efc",
      "tree": "8f501c98b3714e1d5ed381bd4d82fece4106aa8c",
      "parents": [
        "2f658673fa477b58ed38caf94c156c95948de382"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Fri Nov 25 18:51:48 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 14:26:28 2011 +0400"
      },
      "message": "quagga: option \"-z\" (\"--socket \u003cpath\u003e\") added\n\nAll daemons modified to support custom path to zserv\nsocket.\n\nlib: generalize a zclient connection\n\nzclient_socket_connect added. zclient_socket and\nzclient_socket_un were hidden under static expression.\n\"zclient_serv_path_set\" modified.\n"
    },
    {
      "commit": "6c88b44dcb26b60bb1f93e5c387aa102019ed849",
      "tree": "772aacb2702dd635ca271ceca966986e38ecb3be",
      "parents": [
        "cca85d27a59c31e1b20e4c4adc7d9bb57606e584"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jul 27 16:28:55 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:15:32 2011 +0000"
      },
      "message": "bgpd: fix bgp_node locking issues\n\n* bgpd: Connected table locks were being locked but not unlocked, such that\n  eventually a lock would exceed 2^31 and become negative, thus triggering\n  an assert later on.\n* bgp_main.c: (bgp_exit) delete connected elements along with ifp\u0027s.\n* bgp_nexthop.c: (bgp_nexthop_lookup{,_ipv6}) add missing unlocks\n  (bgp_multiaccess_check_v4) ditto\n  (bgp_connected_{add,delete}) Use a distinct memtype for bgp_connected_ref.\n  (bgp_scan_finish) reset the nexthop cache to clean it up when bgpd exits\n* bgp_route.c: fix missing bgp_node unlocks\n* lib/memtype.c: (memory_list_bgp) add MTYPE_BGP_CONN\n* testing: has been tested for almost 2 months now.\n"
    },
    {
      "commit": "228da42898c4f7bd72d9c1ee4135108e8d40d860",
      "tree": "a780ed018bfeb97c174958f188c770c74a48bad9",
      "parents": [
        "54a15182e05ca757db3bb90a4135e9f8fd3c84f2"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sat Jul 18 05:44:03 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jul 19 18:28:08 2009 +0100"
      },
      "message": "[bgpd] Stability fixes including bugs 397, 492\n\nI\u0027ve spent the last several weeks working on stability fixes to bgpd.\nThese patches fix all of the numerous crashes, assertion failures, memory\nleaks and memory stomping I could find.  Valgrind was used extensively.\n\nAdded new function bgp_exit() to help catch problems.  If \"debug bgp\" is\nconfigured and bgpd exits with status of 0, statistics on remaining\nlib/memory.c allocations are printed to stderr.  It is my hope that other\ndevelopers will use this to stay on top of memory issues.\n\nExample questionable exit:\n\n  bgpd: memstats: Current memory utilization in module LIB:\n  bgpd: memstats:  Link List                     :          6\n  bgpd: memstats:  Link Node                     :          5\n  bgpd: memstats:  Hash                          :          8\n  bgpd: memstats:  Hash Bucket                   :          2\n  bgpd: memstats:  Hash Index                    :          8\n  bgpd: memstats:  Work queue                    :          3\n  bgpd: memstats:  Work queue item               :          2\n  bgpd: memstats:  Work queue name string        :          3\n  bgpd: memstats: Current memory utilization in module BGP:\n  bgpd: memstats:  BGP instance                  :          1\n  bgpd: memstats:  BGP peer                      :          1\n  bgpd: memstats:  BGP peer hostname             :          1\n  bgpd: memstats:  BGP attribute                 :          1\n  bgpd: memstats:  BGP extra attributes          :          1\n  bgpd: memstats:  BGP aspath                    :          1\n  bgpd: memstats:  BGP aspath str                :          1\n  bgpd: memstats:  BGP table                     :         24\n  bgpd: memstats:  BGP node                      :          1\n  bgpd: memstats:  BGP route                     :          1\n  bgpd: memstats:  BGP synchronise               :          8\n  bgpd: memstats:  BGP Process queue             :          1\n  bgpd: memstats:  BGP node clear queue          :          1\n  bgpd: memstats: NOTE: If configuration exists, utilization may be expected.\n\nExample clean exit:\n\n  bgpd: memstats: No remaining tracked memory utilization.\n\nThis patch fixes bug #397: \"Invalid free in bgp_announce_check()\".\n\nThis patch fixes bug #492: \"SIGBUS in bgpd/bgp_route.c:\nbgp_clear_route_node()\".\n\nMy apologies for not separating out these changes into individual patches.\nThe complexity of doing so boggled what is left of my brain.  I hope this\nis all still useful to the community.\n\nThis code has been production tested, in non-route-server-client mode, on\na linux 32-bit box and a 64-bit box.\n\nRelease/reset functions, used by bgp_exit(), added to:\n\n  bgpd/bgp_attr.c,h\n  bgpd/bgp_community.c,h\n  bgpd/bgp_dump.c,h\n  bgpd/bgp_ecommunity.c,h\n  bgpd/bgp_filter.c,h\n  bgpd/bgp_nexthop.c,h\n  bgpd/bgp_route.c,h\n  lib/routemap.c,h\n\nFile by file analysis:\n\n* bgpd/bgp_aspath.c: Prevent re-use of ashash after it is released.\n\n* bgpd/bgp_attr.c: #if removed uncalled cluster_dup().\n\n* bgpd/bgp_clist.c,h: Allow community_list_terminate() to be called from\n  bgp_exit().\n\n* bgpd/bgp_filter.c: Fix aslist-\u003ename use without allocation check, and\n  also fix memory leak.\n\n* bgpd/bgp_main.c: Created bgp_exit() exit routine.  This function frees\n  allocations made as part of bgpd initialization and, to some extent,\n  configuration.  If \"debug bgp\" is configured, memory stats are printed\n  as described above.\n\n* bgpd/bgp_nexthop.c: zclient_new() already allocates stream for\n  ibuf/obuf, so bgp_scan_init() shouldn\u0027t do it too.  Also, made it so\n  zlookup is global so bgp_exit() can use it.\n\n* bgpd/bgp_packet.c: bgp_capability_msg_parse() call to bgp_clear_route()\n  adjusted to use new BGP_CLEAR_ROUTE_NORMAL flag.\n\n* bgpd/bgp_route.h: Correct reference counter \"lock\" to be signed.\n  bgp_clear_route() now accepts a bgp_clear_route_type of either\n  BGP_CLEAR_ROUTE_NORMAL or BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n* bgpd/bgp_route.c:\n  - bgp_process_rsclient(): attr was being zero\u0027ed and then\n    bgp_attr_extra_free() was being called with it, even though it was\n    never filled with valid data.\n\n  - bgp_process_rsclient(): Make sure rsclient-\u003egroup is not NULL before\n    use.\n\n  - bgp_processq_del(): Add call to bgp_table_unlock().\n\n  - bgp_process(): Add call to bgp_table_lock().\n\n  - bgp_update_rsclient(): memset clearing of new_attr not needed since\n    declarationw with \"\u003d { 0 }\" does it.  memset was already commented\n    out.\n\n  - bgp_update_rsclient(): Fix screwed up misleading indentation.\n\n  - bgp_withdraw_rsclient(): Fix screwed up misleading indentation.\n\n  - bgp_clear_route_node(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n  - bgp_clear_node_queue_del(): Add call to bgp_table_unlock() and also\n    free struct bgp_clear_node_queue used for work item.\n\n  - bgp_clear_node_complete(): Do peer_unlock() after BGP_EVENT_ADD() in\n    case peer is released by peer_unlock() call.\n\n  - bgp_clear_route_table(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.  Use\n    struct bgp_clear_node_queue to supply data to worker.  Add call to\n    bgp_table_lock().\n\n  - bgp_clear_route(): Add support for BGP_CLEAR_ROUTE_NORMAL or\n    BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n  - bgp_clear_route_all(): Use BGP_CLEAR_ROUTE_NORMAL.\n\n  Bug 397 fixes:\n\n    - bgp_default_originate()\n    - bgp_announce_table()\n\n* bgpd/bgp_table.h:\n  - struct bgp_table: Added reference count.  Changed type of owner to be\n    \"struct peer *\" rather than \"void *\".\n\n  - struct bgp_node: Correct reference counter \"lock\" to be signed.\n\n* bgpd/bgp_table.c:\n  - Added bgp_table reference counting.\n\n  - bgp_table_free(): Fixed cleanup code.  Call peer_unlock() on owner if\n    set.\n\n  - bgp_unlock_node(): Added assertion.\n\n  - bgp_node_get(): Added call to bgp_lock_node() to code path that it was\n    missing from.\n\n* bgpd/bgp_vty.c:\n  - peer_rsclient_set_vty(): Call peer_lock() as part of peer assignment\n    to owner.  Handle failure gracefully.\n\n  - peer_rsclient_unset_vty(): Add call to bgp_clear_route() with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n* bgpd/bgp_zebra.c: Made it so zclient is global so bgp_exit() can use it.\n\n* bgpd/bgpd.c:\n  - peer_lock(): Allow to be called when status is \"Deleted\".\n\n  - peer_deactivate(): Supply BGP_CLEAR_ROUTE_NORMAL purpose to\n    bgp_clear_route() call.\n\n  - peer_delete(): Common variable listnode pn.  Fix bug in which rsclient\n    was only dealt with if not part of a peer group.  Call\n    bgp_clear_route() for rsclient, if appropriate, and do so with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n  - peer_group_get(): Use XSTRDUP() instead of strdup() for conf-\u003ehost.\n\n  - peer_group_bind(): Call bgp_clear_route() for rsclient, and do so with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n  - bgp_create(): Use XSTRDUP() instead of strdup() for peer_self-\u003ehost.\n\n  - bgp_delete(): Delete peers before groups, rather than after.  And then\n    rather than deleting rsclients, verify that there are none at this\n    point.\n\n  - bgp_unlock(): Add assertion.\n\n  - bgp_free(): Call bgp_table_finish() rather than doing XFREE() itself.\n\n* lib/command.c,h: Compiler warning fixes.  Add cmd_terminate().  Fixed\n  massive leak in install_element() in which cmd_make_descvec() was being\n  called more than once for the same cmd-\u003estrvec/string/doc.\n\n* lib/log.c: Make closezlog() check fp before calling fclose().\n\n* lib/memory.c: Catch when alloc count goes negative by using signed\n  counts.  Correct #endif comment.  Add log_memstats_stderr().\n\n* lib/memory.h: Add log_memstats_stderr().\n\n* lib/thread.c: thread-\u003efuncname was being accessed in thread_call() after\n  it had been freed.  Rearranged things so that thread_call() frees\n  funcname.  Also made it so thread_master_free() cleans up cpu_record.\n\n* lib/vty.c,h: Use global command_cr.  Add vty_terminate().\n\n* lib/zclient.c,h: Re-enable zclient_free().\n"
    },
    {
      "commit": "66e5cd87194ae6fdd51061a91b4698bc0a652f6b",
      "tree": "659d31f9a7dfb8d9ad9a51f37ff0853054a45399",
      "parents": [
        "cedd7f2fa6823bca9ddcfb062f97ed83b11a80dd"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Feb 09 10:14:16 2009 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:09:03 2009 +0100"
      },
      "message": "[cleanup] functions taking no args should be declared with void args\n\nUse Ansi-C prototypes rather than old K\u0026R method of declaring\nfunction without arguments\n"
    },
    {
      "commit": "393deb9bd663361e6b110d579a8b1d4c22667068",
      "tree": "e93ebf2f57bf92ff7a9cd045764b3cdbb99a07e5",
      "parents": [
        "3453a7122c1d585ad789ed0f63deb90cc5e89fae"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Aug 18 14:13:29 2008 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:07:49 2009 +0100"
      },
      "message": "[cleanup] Convert XMALLOC/memset to XCALLOC\n\nSimple conversion of XMALLOC/memset to XCALLOC\n"
    },
    {
      "commit": "62687ff1cd3d4460cdbd4b0fbf1e3298fe277ad2",
      "tree": "6bea5c1cf07d9d702c95fabe356fcec418b91398",
      "parents": [
        "b38309a4ee831a440ef78f8a27db584f2f8e8276"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Aug 23 14:27:06 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Aug 23 14:27:06 2008 +0100"
      },
      "message": "[vty] Add support for a \u0027restricted mode\u0027 with anonymous vty connections\n\n\t* lib/command.h: Add a RESTRICTED_NODE, intended for use with\n\t  anonymous, \u0027no login\u0027 vtys, to provide a subset of \u0027view\u0027 mode\n\t  commands.\n\t* lib/command.c: Add RESTRICTED_NODE bits, nothing special, just\n\t  following VIEW_NODE.\n\t* lib/vty.c: (vty_auth) enable authentication should fall back to\n\t  restricted/view node as appropriate.\n\t  (vty_create) init vty\u0027s to restricted/view node as appropriate,\n\t  for the \u0027no login\u0027 case.\n\t  (vty_{no_,}restricted_mode_cmd) config commands to enable\n\t  \u0027anonymous restricted\u0027 in vty configuration.\n\t  (vty_config_write) \u0027anonymous restricted\u0027 config.\n\t  (vty_init) Install some commands to restricted mode, and the\n\t  \u0027anonymous restricted\u0027 config commands into VTY_NODE.\n\t* bgpd/*.c: Install some of the safe(r) BGP commands into\n\t  \u0027restricted mode\u0027, i.e. lookup commands of non-sensitive data.\n\t  Useful with looking-glass route-servers.\n"
    },
    {
      "commit": "fb982c25aa771b7c7425a3c3cce0a2cda0a715de",
      "tree": "74aa4dc86b04365d90a1030682796421b0eff011",
      "parents": [
        "5921ef9aae3b5d6ff8663298f649fb9d76594acd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 04 20:15:47 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 04 20:15:47 2007 +0000"
      },
      "message": "[bgpd] Trim memory usage of BGP routes\n\n2007-05-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.h: (struct info) Move less frequently used\n\t  fields to a lazily allocated struct info_extra.\n\t  Export bgp_info_extra_get\n\t* bgp_route.c: (bgp_info_extra_new) allocate extra\n\t  (bgp_info_extra_free) Free damp info and the info_extra.\n\t  (bgp_info_extra_get) Retrieve the info_extra of a struct\n\t  info, allocating as required.\n\t  (generally) adjust to use info-\u003eextra\n\t* bgp_damp.c: (generally) use bgp_info_extra_get to access\n\t  dampinfo\n\t* bgp_attr.h: Move rarely allocated attributes from struct attr\n\t  to a struct attr_extra, for a substantial saving in size of\n\t  struct attr.\n\t* bgp_attr.c: (bgp_attr_extra_{new,free}), new, self-explanatory.\n\t  (bgp_attr_extra_get) Get the attr_extra for a given struct\n\t  attr, allocating it if needs be.\n\t  (bgp_attr_dup) Shallow copy the struct attr and its attr_extra.\n\t  (generally) adjust to know about attr-\u003eextra.\n\t* bgp_debug.c: (bgp_dump_attr) ditto\n\t* bgp_vty.c: (show_bgp_memory) print attr and info extra sizes.\n\t* bgp_nexthop.c: (generally) adjust to know about attr-\u003eextra\n\t  and info-\u003eextra.\n\t* bgp_{packet,routemap,snmp,zebra}.c: ditto\n\t* lib/memtypes.c: Add MTYPE_ATTR_EXTRA and MTYPE_BGP_ROUTE_EXTRA\n"
    },
    {
      "commit": "e4529636b77124285cca96a62799d0ff6a7addeb",
      "tree": "a8a50de7413833d5277ed7309248e03719e9efd3",
      "parents": [
        "43cd33a44e010f818633b7f144b5a0be352b41e7"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Dec 12 19:18:21 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Dec 12 19:18:21 2006 +0000"
      },
      "message": "[PtP over ethernet] New peer flag allows much more addressing flexibility\n\n2006-12-12 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (struct connected) Add new ZEBRA_IFA_PEER flag indicating\n\t  whether a peer address has been configured.  Comment now shows\n\t  the new interpretation of the destination addr: if ZEBRA_IFA_PEER\n\t  is set, then it must contain the destination address, otherwise\n\t  it may contain the broadcast address or be NULL.\n\t  (CONNECTED_DEST_HOST,CONNECTED_POINTOPOINT_HOST) Remove obsolete\n\t  macros that were specific to IPv4 and not fully general.\n\t  (CONNECTED_PEER) New macro to check ZEBRA_IFA_PEER flag.\n\t  (CONNECTED_PREFIX) New macro giving the prefix to insert into\n\t  the RIB: if CONNECTED_PEER, then use the destination (peer) address,\n\t  else use the address field.\n\t  (CONNECTED_ID) New macro to come up with an identifying address\n\t  for the struct connected.\n\t* if.c: (if_lookup_address, connected_lookup_address) Streamline\n\t  logic with new CONNECTED_PREFIX macro.\n\t* prefix.h: (PREFIX_COPY_IPV4, PREFIX_COPY_IPV6) New macros\n\t  for better performance than the general prefix_copy function.\n\t* zclient.c: (zebra_interface_address_read) For non-null destination\n\t  addresses, set prefixlen to equal the address prefixlen.  This\n\t  is needed to get the new CONNECTED_PREFIX macro to work properly.\n\t* connected.c: (connected_up_ipv4, connected_down_ipv4,\n\t  connected_up_ipv6, connected_down_ipv6) Simplify logic using the\n\t  new CONNECTED_PREFIX macro.\n\t  (connected_add_ipv4) Set prefixlen in destination addresses (required\n\t  by the CONNECTED_PREFIX macro).  Use CONNECTED_PEER macro instead\n\t  of testing for IFF_POINTOPOINT.  Delete invalid warning message.\n\t  Warn about cases where the ZEBRA_IFA_PEER is set but no\n\t  destination address has been supplied (and turn off the flag).\n\t  (connected_add_ipv6) Add new flags argument so callers may set\n\t  the ZEBRA_IFA_PEER flag.  If peer/broadcast address satisfies\n\t  IN6_IS_ADDR_UNSPECIFIED, then reject it with a warning.\n\t  Set prefixlen in destination address so CONNECTED_PREFIX will work.\n\t* connected.h: (connected_add_ipv6) Add new flags argument so\n\t  callers may set the ZEBRA_IFA_PEER flag.\n\t* interface.c: (connected_dump_vty) Use CONNECTED_PEER macro\n\t  to decide whether the destination address is a peer or broadcast\n\t  address (instead of checking IFF_BROADCAST and IFF_POINTOPOINT).\n\t* if_ioctl.c: (if_getaddrs) Instead of setting a peer address\n\t  only when the IFF_POINTOPOINT is set, we now accept a peer\n\t  address whenever it is available and not the same as the local\n\t  address.  Otherwise (no peer address assigned), we check\n\t  for a broadcast address (regardless of the IFF_BROADCAST flag).\n\t  And must now pass a flags value of ZEBRA_IFA_PEER to\n\t  connected_add_ipv4 when a peer address is assigned.\n\t  The same new logic is used with the IPv6 code as well (and we\n\t  pass the new flags argument to connected_add_ipv6).\n\t  (if_get_addr) Do not bother to check IFF_POINTOPOINT: just\n\t  issue the SIOCGIFDSTADDR ioctl and see if we get back\n\t  a peer address not matching the local address (and set\n\t  the ZEBRA_IFA_PEER in that case).  If there\u0027s no peer address,\n\t  try to grab SIOCGIFBRDADDR regardless of whether IFF_BROADCAST is set.\n\t* if_ioctl_solaris.c: (if_get_addr) Just try the SIOCGLIFDSTADDR ioctl\n\t  without bothering to check the IFF_POINTOPOINT flag.  And if\n\t  no peer address was found, just try the SIOCGLIFBRDADDR ioctl\n\t  without checking the IFF_BROADCAST flag.  Call connected_add_ipv4\n\t  and connected_add_ipv6 with appropriate flags.\n\t* if_proc.c: (ifaddr_proc_ipv6) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* kernel_socket.c: (ifam_read) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* rt_netlink.c: (netlink_interface_addr) Copy logic from iproute2\n\t  to determine local and possible peer address (so there\u0027s no longer\n\t  a test for IFF_POINTOPOINT).  Set ZEBRA_IFA_PEER flag appropriately.\n\t  Pass new flags argument to connected_add_ipv6.\n\t  (netlink_address) Test !CONNECTED_PEER instead of if_is_broadcast\n\t  to determine whether the connected destination address is a\n\t  broadcast address.\n\t* bgp_nexthop.c: (bgp_connected_add, bgp_connected_delete)\n\t  Simplify logic by using new CONNECTED_PREFIX macro.\n\t* ospf_interface.c: (ospf_if_is_configured, ospf_if_lookup_by_prefix,\n\t  ospf_if_lookup_recv_if) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_lsa.c: (lsa_link_ptop_set) Using the new CONNECTED_PREFIX\n\t  macro, both options collapse into the same code.\n\t* ospf_snmp.c: (ospf_snmp_if_update) Simplify logic using new\n\t  CONNECTED_ID macro.\n\t  (ospf_snmp_is_if_have_addr) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) Use new CONNECTED_PEER macro\n\t  instead of testing the IFF_POINTOPOINT flag.\n\t* ospfd.c: (ospf_network_match_iface) Use new CONNECTED_PEER macro\n\t  instead of testing with if_is_pointopoint.  And add commented-out\n\t  code to implement alternative (in my opinion) more elegant behavior\n\t  that has no special-case treatment for PtP addresses.\n\t  (ospf_network_run) Use new CONNECTED_ID macro to simplify logic.\n\t* rip_interface.c: (rip_interface_multicast_set) Use new CONNECTED_ID\n\t  macro to simplify logic.\n\t  (rip_request_interface_send) Fix minor bug: ipv4_broadcast_addr does\n\t  not give a useful result if prefixlen is 32 (we require a peer\n\t  address in such cases).\n\t* ripd.c: (rip_update_interface) Fix same bug as above.\n"
    },
    {
      "commit": "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": "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": "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": "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": "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": "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": "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": "478ba054aa04293821d86953a8455b7221cba39e",
      "tree": "bec35cafb8867aba0562a240d57c282863b63519",
      "parents": [
        "8c2e200a4654b43594ae79e384fb44497958519b"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 20:41:23 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Dec 08 20:41:23 2004 +0000"
      },
      "message": "2004-12-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* *.c: Change level of debug messages to LOG_DEBUG.\n"
    },
    {
      "commit": "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": "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": "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": "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": "fa2b17e39499a77f41a719035a588b7fb63cec63",
      "tree": "3356703917aaa8359e0106ae3c2340ee6eea0e1f",
      "parents": [
        "caa6f8ac7d07f8cd3269255e6dce6d248f74af62"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 04 17:45:00 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 04 17:45:00 2004 +0000"
      },
      "message": "Many warning fixes from PC Drew ([quagga-dev 940]) and removing using PAGER\nfrom vtysh ([quagga-dev 932]).\n"
    },
    {
      "commit": "31a476c7e9014aa81dc0d50b4100431ab111bf3f",
      "tree": "3f7fd8ed9010917cb3e93389d4e1d5a9649c5741",
      "parents": [
        "f3e05cda2a35abe1bcd9e3ad33083f4c78c0235a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 29 19:54:53 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 29 19:54:53 2003 +0000"
      },
      "message": "2003-09-29 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* zebra/connected.c: revert the \u0027generic PtP\u0027 patch as it causes\n\tfar too many problems. People who use FreeSWAN should investigate\n\tnative linux ipsec.\n\t* zebra/rt_netlink.c: ditto\n\t* lib/if.c: ditto\n\t* ripd/ripd.h: ditto\n\t* ripd/ripd.c: ditto\n\t* ripd/rip_interface.c: ditto\n\t* ospfd/ospfd.c: ditto\n\t* ospfd/ospf_snmp.c: ditto\n\t* bgpd/bgp_nexthop.c: ditto\n"
    },
    {
      "commit": "6cbbc3cc9fc3127c6ad45e73755b4f0c3afff31a",
      "tree": "4387bd7c1b0a42198ea56b5a939d96adbbc122f1",
      "parents": [
        "a2c6283126a48c915561364e8456894bf7089b2c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 28 17:11:02 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 28 17:11:02 2003 +0000"
      },
      "message": "Import of zebra.org 20030428-18:07 IST\n"
    },
    {
      "commit": "00df0c1e80811f3cf5eca0b28e720bf1bcc84a53",
      "tree": "d03bbabe82d8526b1f5472d38a59ed24f9c8c42b",
      "parents": [
        "8bd9c714365883e405af7c7c4257e404a1053469"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 21:07:36 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 21:07:36 2002 +0000"
      },
      "message": "[zebra 14631] Generic PtP and RFC3021 interface addressing support\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"
    }
  ]
}
