)]}'
{
  "log": [
    {
      "commit": "dca6c883ea6219460efbe3dadde4b8b9cb12c845",
      "tree": "71352e214bd59277a50a43779bb2cbafbace6cc3",
      "parents": [
        "3f3dc2bd5f8cbde24cb581ed0aed0e372bfd556c"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Jan 27 12:38:16 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 27 12:38:16 2010 +0300"
      },
      "message": "lib: undo the last PIE commit\n\nStephen:\nA recent change breaks build Quagga on Debian Lenny with amd64 (but not\ni386). Not sure whether this is cause by ld, gcc, or libtool; but\nwhatever it just won\u0027t work for a large number of users.\n\nMathias:\nI would guess it\u0027s a problem of libtool because it adds \"-fPIC -DPIC\" to\nthe compiler flags but doesn\u0027t remove -fPIE. That wouldn\u0027t be a problem\nif the compiler would ignore the -fPIE in favor to the latter -fPIC, but\nobviously it does not. [...] Those objects were actually compiled with\n-fPIC but also -fPIE which seems to confuse gcc.\n"
    },
    {
      "commit": "3f3dc2bd5f8cbde24cb581ed0aed0e372bfd556c",
      "tree": "7754c556419e6315fed189a4d7a88f33a3558852",
      "parents": [
        "65957886bfd0dd9d95360d8b015781fc82cc09be"
      ],
      "author": {
        "name": "Mathias Krause",
        "email": "Mathias.Krause@secunet.com",
        "time": "Wed Jan 20 17:39:13 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 20 17:39:13 2010 +0300"
      },
      "message": "lib: fix PIE build flags\n\nBecause the final executables are built as position independent\nexecutables (PIE) -- when configure has detected compiler supported for\nPIE -- the objects in the library archive must be built in that way,\ntoo. Otherwise the runtime linker has to do unneccesary relocation for\neach start of the program. Even worse, the programs won\u0027t even be able\nto start on a (hardened) kernel that doesn\u0027t allow those relocations to\nhappen by preventing making the .text segment writable (PaX\u0027s MPROTECT\nfeature comes to mind). The attached patch fixes this issue by adding\nthe appropriate flags to the Makefile.am.\n"
    },
    {
      "commit": "0917f7e7c5920b70295c44bd8aad537bc3ee8581",
      "tree": "d55fa58af8937c2373d532223cf9a7c35df95c64",
      "parents": [
        "b6516829595ed4fc47af955de8bda9ef5be14ffd"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Wed Jan 13 20:10:56 2010 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Jan 13 20:10:56 2010 +0300"
      },
      "message": "lib: fix memory logging\n\n* lib/memory.h\n  * mtype_zcalloc(): correct function prototype\n  * XFREE(): make both definitions consistent in setting\n    the pointer to NULL after freeing the memory\n\nThese changes will only have an effect if MEMORY_LOG is defined\n(it is not by default).\n"
    },
    {
      "commit": "2d362d1099f346202cb628665ff4ae563b2594f5",
      "tree": "5e8101d4ace5f4ef4e51c1cdc277c0f9652728d0",
      "parents": [
        "da88ea82acd70adf3bab641b2300ee24319da422"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Mon Dec 21 12:54:58 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 21 13:03:51 2009 +0300"
      },
      "message": "lib: make some structures constant\n\n* isisd/isis_pdu.c\n  * maskbit: this pre-initialized array is not modified\n* lib/prefix.c\n  * maskbit: idem\n* lib/command.c\n  * facility_map: idem\n  * itoa64: idem\n  * default_motd: make local var static\n  * facility_name(): update local var accordingly\n  * facility_match(): idem\n"
    },
    {
      "commit": "813f6a0064e76fdc8d509ddfbd4d3870d7027850",
      "tree": "eed75fc5da5c0a4dd5dcd20bc8c7c2523b6fd32d",
      "parents": [
        "5eb9d11bf6bbe99ce47f929a14ac03351f21fe27"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Dec 10 16:13:09 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 10 16:13:09 2009 +0300"
      },
      "message": "ospf6d: fix warnings from recent prefix bit commit\n\n* lib/prefix.h\n  * prefix6_bit(): add IPv6 wrapper for prefix_bit()\n* ospf6d/ospf6_lsdb.c\n  * ospf6_lsdb_type_router_head(): employ prefix6_bit()\n  * ospf6_lsdb_type_head(): idem\n"
    },
    {
      "commit": "1352ef32d70dcc102074814de63b5d08e591dd2d",
      "tree": "a0a4a40bf9a7726914f76cfa3a108529c7cc59df",
      "parents": [
        "3949a60c350fea947d2701e2fe709b174ae7af16"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 09 14:43:17 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 09 14:43:17 2009 +0300"
      },
      "message": "lib: move check_bit into prefix common code\n\nMake one version of check prefix bit, and put it inline\nwith proper prototype. This gets rid of some macro\u0027s and also some\nassert() that can never happen on a non-broken compiler.\n\n* bgpd/bgp_table.c\n  * CHECK_BIT(): sayonara\n  * check_bit(): sayonara\n  * SET_LINK(): sayonara\n  * set_link(): make use of prefix_bit() instead of check_bit()\n  * bgp_node_match(): idem\n  * bgp_node_lookup(): idem\n  * bgp_node_get(): idem\n* lib/prefix.h\n  * prefix_bit(): new inline version of check_bit()\n* lib/table.c\n  * CHECK_BIT(): sayonara\n  * check_bit(): sayonara\n  * SET_LINK(): sayonara\n  * set_link(): make use of prefix_bit() instead of check_bit()\n  * route_node_match(): idem\n  * route_node_lookup(): idem\n  * route_node_get(): idem\n* ospf6d/ospf6_lsdb.c\n  * CHECK_BIT(): sayonara\n  * ospf6_lsdb_lookup_next(): make use of prefix_bit() instead of\n    CHECK_BIT()\n  * ospf6_lsdb_type_router_head(): idem\n  * ospf6_lsdb_type_head(): idem\n* ospf6d/ospf6_route.c\n  * CHECK_BIT(): sayonara\n  * ospf6_route_match_head() make use of prefix_bit() instead of\n  * CHECK_BIT()\n"
    },
    {
      "commit": "3949a60c350fea947d2701e2fe709b174ae7af16",
      "tree": "f9df272afc80a1835c4d5ab10ac7460e8499566b",
      "parents": [
        "b0b709ab6656ba07f12fe0d256912dcabba19017"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Dec 09 14:13:27 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Wed Dec 09 14:13:27 2009 +0300"
      },
      "message": "lib: fix warning on little endian\n\n* md5.c\n  * md5_calc(): If building on little endian then X\n    will be \u0027const uint32_t\u0027 which causes compiler\n    warning in code that never gets used. Just move\n    the endif to make sure code is not checked.\n"
    },
    {
      "commit": "38cc00cd823fe945c7748de18c3e8932d98dd8f8",
      "tree": "51f79a6ff37f8858b569f55f27480c4b47eb2aac",
      "parents": [
        "0d6388abc7a5da2a20a4854c400c8e176127e480"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Dec 08 12:00:50 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 08 12:00:50 2009 +0300"
      },
      "message": "lib: make match functions take const args\n\n* table.c: general type safety and compiler help:\n  * maskbit[]: become const\n  * route_node_match(): take const args\n  * route_node_match_ipv4(): idem\n  * route_node_match_ipv6(): idem\n  * check_bit(): idem, plus adjust local vars typing\n"
    },
    {
      "commit": "0d6388abc7a5da2a20a4854c400c8e176127e480",
      "tree": "effe14c7fc1e958b6082685026a1c3ad92b2451a",
      "parents": [
        "78e6cd98dd88393d0863388caf37dae45435db7a"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 07 19:19:13 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 07 19:19:13 2009 +0300"
      },
      "message": "lib: remove unused function: route_dump_node()\n"
    },
    {
      "commit": "78e6cd98dd88393d0863388caf37dae45435db7a",
      "tree": "3c1e57265ea8f54055eb67b3ceb147da90920e0d",
      "parents": [
        "64bf3ab7291cc5c39c5add0dc1a7de447914248b"
      ],
      "author": {
        "name": "heasley",
        "email": "heas@shrubbery.net",
        "time": "Mon Dec 07 16:41:14 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Dec 07 16:41:14 2009 +0300"
      },
      "message": "lib: log source of vty connections (bug #566)\n\nheasley: I\u0027ve used this for a while to track usage.\n"
    },
    {
      "commit": "c4cf095e95ae66c1a7b87bca95e61e50fec746ee",
      "tree": "368c8688e2bbe6cdffa46c28d4480c1496449f48",
      "parents": [
        "fab7f89dcfe77cf06806e7f8a33314d3b4857a69"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Aug 08 20:41:39 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 14:51:49 2009 +0100"
      },
      "message": "lib/trivial: str2prefix checks return of inet_pton in fragile way\n\n* prefix.c: (str2prefix_ipv6) inet_pton succesful return is presumed to be\n  1, rather than the \"not zero\" the man page describes - seemed fragile.\n"
    },
    {
      "commit": "3e4ee9591aa2d84f01ae478afd273ac55add0a1c",
      "tree": "dda1a647bc59031728ac28733feec89d8a38a8b2",
      "parents": [
        "27f5dc8120e1c6902e29d86cf0d77b82cf3848c0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 06 12:08:50 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 14:51:18 2009 +0100"
      },
      "message": "lib: if_lookup_by_name should be more robust to null argument\n\n* if.c: (if_lookup_by_name) shouldn\u0027t crash just cause we got a NULL name\n"
    },
    {
      "commit": "d023aec49f70156d2ed894a8fba65bcfa221ff02",
      "tree": "00ab5d69481c212b6ed2f350c5a5c7f430ef9208",
      "parents": [
        "03621955d8ab0ea30024bd8fc83afda8e48db712"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Jul 21 16:27:21 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 10:04:38 2009 +0100"
      },
      "message": "bgpd: start listener on first instance\n\nStart BGP listener only after first instance is started.  This helps the\nsecurity if BGP is not used but daemon is started.  It also addresses some\nissues like MD5 not working on listener unless IPV6 configured (because\nlistener was not in list); as well as compiler warnings.\n\n* bgp_network.c: (bgp_listener) listen socket creation consolidated here\n  (bgp_socket) Use bgp_listener\n* bgpd.c: (bgp_get) call bgp_socket on creation of first struct bgp.\n  (bgp_init) remove bgp_socket call.\n* memtypes.c: Add MTYPE_BGP_LISTENER\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": "3fa3f957e70f594cc2c1cac03644ddf48554c178",
      "tree": "86e63fd609afab8fc297e557b03cd4993f981ab2",
      "parents": [
        "9b4ef258a9d9c5f1052afe0e19ebaef9f6740fa2"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Sat Jul 11 21:27:51 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 16 18:13:00 2009 +0100"
      },
      "message": "[lib] Fix IPv6 normalisation\n\n* lib/sockunion.c: (sockunion_normalise_mapped) The code to normalize\n  address was not copying port value - probably reason why IPV4 in IPV6\n  never worked right.\n"
    },
    {
      "commit": "41b2373cece77f0cc9a06fba076c99a7be653593",
      "tree": "bed11b842b7a33e78e8c5012bf624946aeaf1edc",
      "parents": [
        "bd2462425205a681d75e04c94a94bf4cea5da58b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 30 16:12:49 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 30 16:12:49 2009 +0100"
      },
      "message": "[lib/cleanup] Use a typedef for the thread type\n\n* lib/thread.{c,h}: As per subject. This will avoid head-scratching for next\n  person who adds a thread-type and gets strange breakage.\n"
    },
    {
      "commit": "2b35ae41c2c5d39801c943fa740c72fc15613141",
      "tree": "b72600ce7970f5a62a344fd7fed3f5e53779b7a2",
      "parents": [
        "b60668d092f1778395b6c10b406059b8cbf235b8"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 23 05:34:29 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:21:40 2009 +0100"
      },
      "message": "Fixes to RFC2385/MD5 BGP\n\n* bgpd/bgp_network.c: Fix MD5 listen in IPv4 version of bgp_socket() by\n  adding listen socket to listen_sockets list so that MD5 passwords can\n  get set.\n* lib/sockopt.c: (sockopt_tcp_signature) Fix bogus \"% Error while applying\n  TCP-Sig to session(s)\" / \"can\u0027t set TCP_MD5SIG option\" startup error\n  messages by not returning error when there isn\u0027t one.\n"
    },
    {
      "commit": "6511cab26728453d1b5e572bbbc3775f70c10c0e",
      "tree": "586184e1e02aedbf67d4ebca145980f8f402ae62",
      "parents": [
        "c4376c9d28f1282f502ed5279ee80ec5c4cb810d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 17:38:01 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:31 2009 +0100"
      },
      "message": "[configure] Refine CLOCK_MONOTONIC test\n\n* configure.ac: Check for the actual CLOCK_MONOTONIC symbol, as clock_gettime\n  need not imply that clock type is supported\n* lib/zebra.h: use the method given in autoconf docs for sys/time.h\n  inclusion\n"
    },
    {
      "commit": "8e4c09307d9eafbbbf7fbffb3d3483287cea169b",
      "tree": "c9b39213248d64fdaa28bc419e77ce1e3866a585",
      "parents": [
        "fc52f95373b1dc0bec5f5a474bafa362b02a63ae"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 09:47:34 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:29 2009 +0100"
      },
      "message": "[cleanup] Allow message tables to be constant\n\nAvoid bugs, and improve cache locality by allowing message lists\nto be read/only.\n"
    },
    {
      "commit": "65d3fbb4835e268b1683b88b12e101c6592b1948",
      "tree": "5eb12ca5e645fd6d4751367d6b2b2ea5ed18699e",
      "parents": [
        "9bddac4bd50034c713940ad77cebfbb7f3cd123a"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 09:59:03 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:29 2009 +0100"
      },
      "message": "[cleanup] Use const in smux interface\n\nsmux_trap and oid_copy should allow read-only source.\n"
    },
    {
      "commit": "94fc1dd41cd0267acb9c67dd3dcf1e64ef8713af",
      "tree": "95ade8cc41fe0d758b22d01d50b02b7b88499f38",
      "parents": [
        "e5862a2df2b5f65b0c050987c5f145836e0b75b3"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Mar 09 16:09:50 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:27 2009 +0100"
      },
      "message": "[lib] Put symbolic backtrace on system log\n\nWhen BGP crashes, sometimes all we get to see is syslog.\n"
    },
    {
      "commit": "e5862a2df2b5f65b0c050987c5f145836e0b75b3",
      "tree": "20a10d219e87f9ac98d858cad263e9d1760d1ebb",
      "parents": [
        "66a11e76d4a8ee18c4e79c06d25814b9aa94e45d"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Feb 19 23:01:41 2009 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:27 2009 +0100"
      },
      "message": "[lib] sockopt_tcp_signature: sin6 requires HAVE_IPV6\n\nAn external user was building on system without IPv6 and\nit wouldn\u0027t work.\n"
    },
    {
      "commit": "80c375e72d7c3b9fe41b1ffec461ec5e1b57caa7",
      "tree": "1b596a2dd78fe20757443543512669c641b00ade",
      "parents": [
        "7fc626de5f618133ad2a478d13defa3a110b89ea"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri Aug 08 15:15:23 2008 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:24 2009 +0100"
      },
      "message": "[gcc] Add gcc printf format checks\n"
    },
    {
      "commit": "7fc626de5f618133ad2a478d13defa3a110b89ea",
      "tree": "432ff0e4672eabc2ec6b0dcffc22dcc0aee532c8",
      "parents": [
        "66e5cd87194ae6fdd51061a91b4698bc0a652f6b"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Dec 01 11:10:34 2008 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:10:29 2009 +0100"
      },
      "message": "[cleanup] Make command nodes static\n\nThe cmd_nodes used to configure vty, can mostly be static so\n(basic data hiding 101).\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": "cedd7f2fa6823bca9ddcfb062f97ed83b11a80dd",
      "tree": "4e6cc4d9ebf2bf861fb0278f8d49f8f3c030edc1",
      "parents": [
        "393deb9bd663361e6b110d579a8b1d4c22667068"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri Jun 12 16:58:49 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:08:26 2009 +0100"
      },
      "message": "[cleanup] add const attribute to lib/if.c::if_dump\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": "3453a7122c1d585ad789ed0f63deb90cc5e89fae",
      "tree": "688446217623080afedffc7f074c8cba58b9b5aa",
      "parents": [
        "10819ecee3ced786162b68310cf172aacda18857"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 14:21:02 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 14:21:02 2009 +0100"
      },
      "message": "[bgpd] Add support for the old Linux 2.4, TCP_MD5_AUTH RFC2385 patch\n\n* configure.ac: Add a --enable-linux24-tcp-md5 argument, to compile in\n  support for the old TCP-MD5 patch for Linux 2.4 systems.  This overrides\n  auto-detection of TCP-MD5 supported by the target system.\n* lib/sockopt.c: (sockopt_tcp_signature) add in a variant for the old\n  Linux 2.4, TCP_MD5_AUTH variant of TCP-MD5 support, conditional\n  on the previous configure arg.\n"
    },
    {
      "commit": "0be8dfb2a95f41f100982085595b7c7505127018",
      "tree": "add7218b0c518ac0cd276c74fe700b5ed1f26762",
      "parents": [
        "42176e6b01c9ca2b2725952684b2d7792468e861"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 02 18:40:07 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 18:45:10 2009 +0100"
      },
      "message": "[snmp] Compiler warning fixes for when \"--enable-snmp\" is configured.\n\nCompiled on 32-bit and 64-bit linux gcc 4.1.2 platforms.\nNo run-time testing on 32-bit and limited run-time testing on 64-bit.\n"
    },
    {
      "commit": "42176e6b01c9ca2b2725952684b2d7792468e861",
      "tree": "2eb360778e96efe5ddc554a2b348e5e743030d61",
      "parents": [
        "04d23314ddf950fefb3ff18306c7564bf4573a12"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 02 18:37:11 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 18:38:24 2009 +0100"
      },
      "message": "[smux] 64-bit fix for lib/smux.h SNMP_INTEGER() macro\n\nMacro SNMP_INTEGER() prepares data which is eventually processed\nby asn_build_int().  SNMP_INTEGER() was using \"int32_t\" whereas\nasn_build_int() uses \"long\".  On 32-bit systems these are the\nsame, both 4 bytes, but on x86 64-bit systems \"long\" is 8 bytes.\n\nasn_build_int()\u0027s reaction to an improperly sized value is to return\na NULL pointer.  Quagga\u0027s smux.c would eventually get this NULL\npointer and use it in calculations to determine how much data to send\nover the smux connection, resulting in garbage being sent to the\nSNMP agent.\n\nCorrected SNMP_INTEGER() to use \"long\".\n\nTested on 32-bit and 64-bit x86 Linux 2.6.27.10 systems running\nQuagga 0.99.11 with bgpd smux.\n"
    },
    {
      "commit": "acde4b861333d799b50d6e8a53214abc0d17ede3",
      "tree": "e6fa104c7bfb45043aec82c9cab3941cb09459bd",
      "parents": [
        "5012bc3d217f4fff5759745ee689869fb5224b41"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jun 02 14:28:16 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 14:28:16 2009 +0100"
      },
      "message": "[bgp] Fix crash on SIGHUP, deref of freed workqueues\n\n* lib/workqueue.c: free-ing workqueues had never been tested obviously,\n  queue\u0027s thread was not being stopped\n* bgpd/bgpd.c: null out freed workqueues, to prevent acting on freed\n  workqueues\n"
    },
    {
      "commit": "b8192765a320f389e09bf7261e8902958ad21584",
      "tree": "dab031e7db5d0f844164b52391155af17a3c2a81",
      "parents": [
        "6e907dd4abdff9c52c809ea49c76d789b11c0e12"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Nov 10 09:33:30 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Nov 29 18:04:22 2008 +0000"
      },
      "message": "[lib] Fix timer precision.\n\nWhenever a thread adds an timer funcname_thread_add_timer_timeval() gets called\nto add the timer. Before adding the timer a quagga_gettimeofday() call\nis made to do some time house keeping. However quagga_gettimeofday() only\nupdates recent_time, not relative_time that is used to calculate\nthe alarm_time. Replace with quagga_get_relative (NULL)\n"
    },
    {
      "commit": "6e907dd4abdff9c52c809ea49c76d789b11c0e12",
      "tree": "fc63d6c0699cc626a316ae3662f045f7de8e90fe",
      "parents": [
        "4768061ad5d7c762f2272436a89e62d4e41676a2"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Nov 17 11:22:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sat Nov 29 18:04:11 2008 +0000"
      },
      "message": "[lib] Move type cast in Fletcher checksum\n\nThe int type cast should be on the whole expression\npassed to the mod operator. Otherwise it won\u0027t work\nwhen/if c0/c1 is unsigned.\nMaking c0/c1 unsigned makes it possible to use 5802\nas MODX value.\n"
    },
    {
      "commit": "84152ee6841d0d83bd46ed6f8f12cc5c08386c7f",
      "tree": "e832a6c1cb1f752dfd1f38fd3c4804038ec455f2",
      "parents": [
        "e0081f70ede76bc7a3db53eaab3e45ba657cc4d3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Nov 24 22:25:16 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Nov 24 22:25:16 2008 +0000"
      },
      "message": "[lib] fix missing sockunion_normalise_mapped\n\n* lib/sockunion.c: (sockunion_accept) sockunion needs to be normalised here,\n  as it used to before this was moved to a dedicated function..\n"
    },
    {
      "commit": "5d4b8cf2faba9f5386810a7c70837e5b7fae3572",
      "tree": "ec89383f7bfd4684a0cde15648e5f00e8d2d8f7b",
      "parents": [
        "41dc3488cf127a1e23333459a0c316ded67f7ff3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Nov 16 18:34:19 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Nov 16 18:47:02 2008 +0000"
      },
      "message": "[lib] Switch Fletcher checksum back to old ospfd version\n\n* lib/checksum.c: (fletcher_checksum) Switch the second phase of the checksum\n  back to the old ospfd logic.\n\n  The isisd-derived version:\n\n  a) is very hard to follow\n  b) had some kind of subtle bug that caused it be wrong when c0\u003d0 and c1\u003d254\n     (potentially fixable by doing the mods before adjusting x and y)\n\n  Additionally:\n\n  - explicitely cast expressions using non-internal variables to int, to ensure\n    the result is signed.\n  - defensively change the length argument to \u0027size_t\u0027, to ensure the code\n    works with that argument being unsigned..\n\n  Thanks to Joakim Tjernlund for the investigative work into this bug.\n\n* tests/test-checksum.c: new file to exercise the checksum code.\n"
    },
    {
      "commit": "1a7dcf42a244d758732464be389f5cdb1358b9e4",
      "tree": "2ffaad12282dda97d2f180e6c0c0a52d9e38d595",
      "parents": [
        "2b2fc5606f035eabd322b3a6aad4349efb9ab542"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Sep 09 21:17:04 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 09 21:17:04 2008 +0100"
      },
      "message": "[lib] re-enable conversion of v6mapped INET6 sockunions to regular INET\n\n* lib/sockunion.c: Re-enable conversion of v6mapped INET6 sockunions to\n  regular INET sockunions, which was disabled in 0df7c9, as it leads to\n  failures in sockunion_cmp.\n  (sockunion_normalise_mapped) consolidate here\n  (sockunion_accept) remove conversion code altogether here - no sockunion\n  is created\n  (sockunion_get{sockname,peername}) normalise newly created sockunion.\n"
    },
    {
      "commit": "ef16c8a2abd39b14fed45665eda5c293b93ee54b",
      "tree": "3e8a386296fcc36ec3ffef6ebbf38da36c7cfdcf",
      "parents": [
        "b3bc68e5a4eecd85138463ae5742c2ccaa1db4bb",
        "62687ff1cd3d4460cdbd4b0fbf1e3298fe277ad2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Sep 04 13:52:38 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 04 13:52:38 2008 +0100"
      },
      "message": "Merge branch \u0027restricted-mode\u0027\n"
    },
    {
      "commit": "fb62a3cef5960885119f9e87c833520ddf2a9b49",
      "tree": "cf6c5cde38c91ad555021f44793b92fd34de8198",
      "parents": [
        "b38309a4ee831a440ef78f8a27db584f2f8e8276"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Tue May 13 20:03:32 2008 +0200"
      },
      "committer": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Aug 25 09:48:30 2008 +0200"
      },
      "message": "Make --enable-snmp cross compile and make libcrypto optional with --without-crypto\n\nAutoconfig work by me, the rest was done by\n\"Kirill K. Smirnov\" \u003clich@math.spbu.ru\u003e\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": "d68cbf9261869e532dfdd14dbb4122b3f3feb0d4",
      "tree": "5cc873e6a38a3db9ad5fb4dfe579624ff7693c13",
      "parents": [
        "3998bfd76620a676fbd77f19c5c6ea80a4cc88d2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Oct 21 18:35:27 2006 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 20:00:46 2008 +0100"
      },
      "message": "[administrivia] Git should ignore backup files and .loT files\n"
    },
    {
      "commit": "3998bfd76620a676fbd77f19c5c6ea80a4cc88d2",
      "tree": "66bf93340e55bb06b25544ef04afec3749269391",
      "parents": [
        "e5248434c0d287668be956a2bd52399d67b16c39"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Aug 19 14:13:43 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:57:22 2008 +0100"
      },
      "message": "[trivia] Remove ChangeLog files, as this data is now maintained in SCM\n"
    },
    {
      "commit": "30a2231a4881f53deca61ef7a62b225a43dab4c5",
      "tree": "f26dff922a4f85d302fa67bbd9a120108db41c44",
      "parents": [
        "f5612dd382d9c0f4089b08ec164c25a8082d9f89"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Aug 15 14:05:22 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:59 2008 +0100"
      },
      "message": "[warnings] Fix various SOS warnings\n\n2008-08-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* */*: Fix various problems flagged by Sun Studio compiler.\n\t  - \u0027\u003cqualifier\u003e \u003cstorage\u003e\u0027 obsolescent in declarations\n\t  - empty statements (\u0027;\u0027 after ALIAS definitions)\n\t  - implicit declarations (e.g printstack in lib/log.c)\n\t  - \"\\%\" in printf string instead of \"%%\"\n\t  - loops that return on the first iteration (legitimately, but\n \t    compiler can\u0027t really know), e.g. bgp_routemap.c\n \t  - internal declarations which mask prototypes.\n"
    },
    {
      "commit": "f5612dd382d9c0f4089b08ec164c25a8082d9f89",
      "tree": "6766dccbdf57cc0b936d622c8172ae7a9f8cfc6e",
      "parents": [
        "6ac29a51075def99217a4ab1015635db3b3e83ed"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Aug 15 14:05:08 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] Fix mistake in tcp-md5sig commit which broke compile on BSD\n\n2008-08-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/sockopt.c: (sockopt_tcp_signature) ifdef\u0027ing hid variable\n\t  declaration for HAVE_DECL_TCP_MD5SIG \u0026\u0026 !GNU_LINUX, breaking\n\t  compile - fix.\n"
    },
    {
      "commit": "1423c809cc4ddc2e013ba6264c49a11e5719c6f2",
      "tree": "db0389e7de020bbcb9fd78d45417b0842a6adb0b",
      "parents": [
        "89d9fa301e146193093ff876f96b3612dc390bbb"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Aug 14 17:59:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] mes_lookup string lookup table argument should be marked const\n\n2008-08-14 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* lib/log.{c,h}: struct message argument should point to const\n\t* */*.c: adjust to suit,\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "ffe11cfb0a808ae514193438616dfabc512b4cf6",
      "tree": "94452dba2c1a49d6e6a0782c6513acb36823cefc",
      "parents": [
        "9fd4958a4eef88c536e4a5aeefce302e10ee8ee6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Aug 14 16:25:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] hash compare function arguments ought to be const qualified\n\n2008-08-14 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* lib/hash.h: (struct hash) Hash comparator callback really\n\t  ought to treat storage behind arguments as constant - a compare\n\t  function with side-effects would be evil.\n\t* */*.c: Adjust comparator functions similarly, thus fixing at least\n\t  a few compiler warnings about const qualifier being dropped.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "efda3bb8e548fee84928ff23329c11de8e742ecd",
      "tree": "d49dd2cdcf1d995be81c9cf56ddda6a25d3aba22",
      "parents": [
        "40da22166ff29753a65b7947ed5fa7261fee1d80"
      ],
      "author": {
        "name": "Jingjing Duan",
        "email": "Jingjing.Duan@sun.com",
        "time": "Wed Aug 13 19:02:03 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:57 2008 +0100"
      },
      "message": "[lib] Add fletcher checksum implementation\n\n2008-08-13 Jingjing Duan \u003cJingjing.Duan@sun.com\u003e\n\n\t* lib/checksum.?: (fletcher_checksum) implementation of\n\t  Fletcher checksum, as per RFC1008.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "7f794f2bb079c1a5bb0fdebb815921c168c00e90",
      "tree": "7107c63dc002db8b76fc1d6b6e3dea0ca25a035e",
      "parents": [
        "fe86b484e2303103107a6ec7fc02e4e0acaf31c7"
      ],
      "author": {
        "name": "Roy",
        "email": "quagga@de.vio.us",
        "time": "Wed Aug 13 17:27:38 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:57 2008 +0100"
      },
      "message": "[vty] Allow delete during password entry\n\n2008-08-13 roy \u003cquagga@de.vio.us\u003e\n\n\t* lib/vty.c: (vty_delete_char) move check for authentication\n\t  down a bit, so we do the delete, but still not re-write of line.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "3c5a0a4f8fe3811affff6d5e123379eedb083571",
      "tree": "79e285e0bd04c6ef0dfcde9cf0ce8fda8abecbe1",
      "parents": [
        "750e814693050bc97391eec618aad9db798ee5e8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Feb 19 17:30:10 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:49:33 2008 +0100"
      },
      "message": "[administrivia] Add .gitignore files, based on .cvsignores.\n"
    },
    {
      "commit": "0df7c91f048f2116610d6bdfce3ab6cad1981802",
      "tree": "18390aa845054b757fae86dde49b907ee7f14908",
      "parents": [
        "f04b0e6bb8c1339243717b156880d7e24c84c951"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Jul 21 21:02:49 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Jul 21 21:02:49 2008 +0000"
      },
      "message": "[bgpd] TCP-MD5: password vty configuration and initial Linux support\n\n2008-07-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_packet.c: (bgp_open_receive) fix warning in a zlog call\n\t* bgp_vty.c: (bgp_vty_return) add return code\n\t* bgpd.c: (bgp_master_init) setup the socket list.\n\t* bgp_network.c: Remove the dual IPv4/6 socket thing for now, which\n\t  was implemented by Michael, until such time as its clear its\n\t  required for Linux (see sockopt comments). IPv6 support, including\n\t  IPv4 sessions on AF_INET6 sockets, therefore is broken, and the\n\t  \u0027-l 0.0.0.0\u0027 arguments would need to be given to bgpd to make\n\t  things work here.\n\n2008-07-21 Michael H. Warfield \u003cmhw@wittsend.com\u003e\n           YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\n\t   Tomohiko Kusuda \u003ckusuda@inetcore.com\u003e\n           Leigh Brown \u003cleigh@solinno.co.uk\u003e\n\n\t* bgp_network.c: (bgp_md5_set_one) shim between libzebra tcp-md5\n\t  sockopt and bgpd.\n\t  (bgp_md5_set_socket) Helper for bgp_connect\n\t  (bgp_md5_set) setup TCP-MD5SIG for the given peer.\n\t  (bgp_connect) call out to bgp_md5_set_socket for the outgoing\n\t  connect socket.\n\t  (bgp_socket) save references to the listen sockets, needed if\n\t  TCP-MD5SIG is applied later or changed.\n\t* bgp_vty.c: (*neighbor_password_cmd) New \u0027neighbor ... password\u0027\n\t  commands.\n\t* bgpd.c: (peer_{new,delete) manage TCP-MD5 password\n\t  (peer_group2peer_config_copy) inherit TCP-MD5 password\n\t  (peer_password_{un,}set) orchestrate the whole add/remove of TCP-MD5\n\t  passwords: applying checks, stopping peers, and trying to return\n\t  errors to UI, etc.\n\t  (bgp_config_write_peer) save password.\n\t  Fix missing newline in writeout of neighbor ... port.\n\n2008-07-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* sockunion.c: ifdef out various places that converted\n\t  v4mapped sockets to pure v4. Doesn\u0027t seem necessary at all,\n\t  presumably a workaround for now historical inet_ntop bugs (?)\n\n2008-07-21 Michael H. Warfield \u003cmhw@wittsend.com\u003e\n           YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\n\n\t* sockopt.{c,h}: (sockopt_tcp_signature) Add TCP-MD5SIG support.\n"
    },
    {
      "commit": "3d52bb8085c32b54fa21d88588310716245291d4",
      "tree": "8d47a7c92cafb9df895ba32b705e19386e0944e9",
      "parents": [
        "032928091c558d3b0940be079049009f47652711"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:42:07 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:42:07 2008 +0000"
      },
      "message": "[lib] trivial: add const qualifier to stream_put/write\n\n2008-06-07 Paul Jakma \u003cpaul@jakma.org\u003e\n\n\t* stream.{c,h}: (stream_{put,write}) add const qualifier to source\n\t  argument. Change u_char to void *.\n"
    },
    {
      "commit": "e96f92034dad1a70c92ad4ad863a5259c122cecb",
      "tree": "c3b9bebef0fe2059182b31b43243289b5c7248e3",
      "parents": [
        "a15cfd16fcdec39588ce2f780671ba7c6de0b919"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "message": "+ initial edition of meta-queue for RIB updates processing (bug #431)\n"
    },
    {
      "commit": "768a27ea7ba25257c79689af83ab37945dc1cc3c",
      "tree": "d3d9b822a29090a8cfee41b4ae3f74248e5950fa",
      "parents": [
        "311064ddc5c52f6859cf1e6e8636c19a2e705147"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:23:08 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:23:08 2008 +0000"
      },
      "message": "[zebra/linux] Use BPF to filter out responses, to try avoid netlink overruns\n\n2008-05-29 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* rt_netlink.c: (netlink_install_filter) BPF filter to catch and\n\t  drop responses to zebra\u0027s own route messages.\n\t  (kernel_init) add BPF filter on the netlink socket.\n"
    },
    {
      "commit": "11486b5265b2e0e2cf8b140018c47bd9a35cba93",
      "tree": "ccc5dfb967b156d43cb6d8ffda1816224dcf118a",
      "parents": [
        "5f56808431778fe8878ea8ea94225cca08884b48"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 23:26:02 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 23:26:02 2008 +0000"
      },
      "message": "[lib] Fix the struct message LOOKUP function to be more robust\n\n2008-02-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* log.c: (mes_lookup) Sowmini Varadhan diagnosed a problem where\n\t  this function can cause a NULL dereference, on lookups for unknown\n\t  indices, or messages with NULL strings. Can occur, e.g., debug\n\t  logging code when processing received messages. Fixed to accept a\n\t  pointer to a default string to be used if there is no match.\n\t* log.h: LOOKUP adjusted to match\n"
    },
    {
      "commit": "5f56808431778fe8878ea8ea94225cca08884b48",
      "tree": "41027ecf7a18a787ea3109a76d5ec83ebf49a45e",
      "parents": [
        "20e5ff0a8893ffad6d31739d68d224931c4a7992"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 00:09:04 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Feb 28 00:09:04 2008 +0000"
      },
      "message": "[lib/linklist] Enforce \"nodes must have data\" invariant more rigorously\n\n2008-02-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* linklist.c: This implementation expects that the data pointer not\n\t  be null, e.g. listgetdata() asserts this. The list add methods\n\t  don\u0027t apply the same sanity check.\n\n\t  Noted by Jim Carlson in bug #437.\n"
    },
    {
      "commit": "dea04441fb51f74dc25f6ab4bd756b4159d961b6",
      "tree": "95a4578d95f20dd0dc168d07a90ea9cf71d6047f",
      "parents": [
        "d38e8d63fdfc0aefb78d0a51ffdf06d8b47993fd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 26 09:16:09 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Feb 26 09:16:09 2008 +0000"
      },
      "message": "[c++] remove/rename some names in headers that clash with C++ reserved words\n\n2008-01-30 Peter Szilagyi \u003csp615@hszk.bme.hu\u003e\n\n\t* lib/stream.h: Remove named \u0027new\u0027 parameter in prototype\n\t  for c++ header compatibility.\n\t* ospfd/ospf_opaque.h: ditto\n\t* ospfd/ospfd.h: Renamed struct export to _export for c++\n\t  header compatibility.\n\t* ospf6d/ospf6_area.h: ditto\n"
    },
    {
      "commit": "55edb0d446a272907715b0825ff008557174d34a",
      "tree": "17d46ab705b0b229b8795d0d809fddd18e1d9078",
      "parents": [
        "c543a1737173fb438f1d8c06f650b2d0d479f45c"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jan 11 15:57:13 2008 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jan 11 15:57:13 2008 +0000"
      },
      "message": "[link-detect] Improve BSD support.\n2008-01-11 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* lib/zebra.h: Revert previous change, no need to include\n\t  \u003cnet/if_media.h\u003e here.\n\t* zebra/ioctl.c: If HAVE_BSD_LINK_DETECT is defined, include\n\t  \u003cnet/if_media.h\u003e\n\t  (if_get_flags) Remove debug messages about BSD link state.\n\t* zebra/kernel_socket.c: (bsd_linkdetect_translate) If link state\n\t  is unknown, we should set the IFF_RUNNING flag.\n"
    },
    {
      "commit": "c543a1737173fb438f1d8c06f650b2d0d479f45c",
      "tree": "ba940242e22f7e6798e6fd24b19864b5702474db",
      "parents": [
        "3f087670efa606021cde2f6a9615ac7e07aec2a5"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Jan 10 15:24:32 2008 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Jan 10 15:24:32 2008 +0000"
      },
      "message": "[link-detect] Try to get BSD link-detect to work properly.\n\n2008-01-10 Ingo Flaschberger \u003cif@xip.at\u003e\n\n\t* configure.ac: Define HAVE_BSD_LINK_DETECT if \u003cnet/if_media.h\u003e is\n\t  present.\n\t* lib/zebra.h: If HAVE_BSD_LINK_DETECT is defined,\n\t  include \u003cnet/if_media.h\u003e.\n\t* zebra/ioctl.c: (if_get_flags) If HAVE_BSD_LINK_DETECT, use the\n\t  SIOCGIFMEDIA ioctl to ascertain link state.\n\t* zebra/kernel_socket.c: (bsd_linkdetect_translate) New function to\n\t  map the ifm_data.ifi_link_state value into the IFF_RUNNING flag.\n\t  (ifm_read) Call bsd_linkdetect_translate to fix the IFF_RUNNING\n\t  flag before calling if_flags_update.\n"
    },
    {
      "commit": "912df1e8ab61962c29eb4faff17a7d75c4905b84",
      "tree": "5c9f8aebdb7fd2b79edb3dd1034ef21ba0b9da4e",
      "parents": [
        "370b64a2ad38e43b4bed028960481bbf4192becd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jan 08 13:50:11 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jan 08 13:50:11 2008 +0000"
      },
      "message": "[lib] add mising UL qualifier to numerical constant\n\n2008-01-08 Pavol Rusnak \u003cprusnak@suse.cz\u003e\n\n\t* memory.c: (mtype_memstr) Fix accidental shift past width of type,\n\t  constant should have been forced to UL, rather than being left to\n\t  default to int.\n"
    },
    {
      "commit": "6ce80bdb2523ad82cef813f6d8a7e0d4daa8cfae",
      "tree": "d0b0fc8725c9f120cdcc16fa7f711d8104051815",
      "parents": [
        "3a02d1f7fb778a1ea4f45d037f13dfcd126e2337"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Nov 12 14:55:01 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Nov 12 14:55:01 2007 +0000"
      },
      "message": "+ fixed bug #418 (changing address on an existing interface doesn\u0027t cause existing static routes to be revalidated)\n"
    },
    {
      "commit": "a56ef88348be9f019631d6bc92801aae647be05b",
      "tree": "12051517321d29fda1116654af59fab501c5b217",
      "parents": [
        "9c1deac7d6f68b14a130ad99d8a7e3329f570f11"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Oct 22 15:53:17 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Oct 22 15:53:17 2007 +0000"
      },
      "message": "[snmp-smux] Fix problems if \u0027smux peer ...\u0027 is issued multiple times\n\n2007-10-22 Lorenzo Colitti \u003clorenzo@colitti.com\u003e\n\n\t* smux.c: (smux_stop) Avoid cancelling a defunct thread pointer\n\t  (smux_start) Stop smux before trying to start it, possibly again.\n"
    },
    {
      "commit": "7593fddfa1558d086e3142ad96cf2790007f5d84",
      "tree": "c0eacd4abe36cfe0e62c2a8faf5ac300b9d661e7",
      "parents": [
        "a3aaf5b0ceb8c5b3821793333b4057df872fbedd"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Thu Oct 04 15:09:19 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Thu Oct 04 15:09:19 2007 +0000"
      },
      "message": "+ pidfiles are now always created with 0644 perms instead if LOGFILE_MASK (0600)\n"
    },
    {
      "commit": "6b148faa291f68dd43bba37fbc0e6b75a2e1e078",
      "tree": "7e9f1d21114da9be1587047adef75a373aeae6a8",
      "parents": [
        "e08286bcf8a73d1922b0464bef52c1b27eda7c43"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Sep 18 18:07:18 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Sep 18 18:07:18 2007 +0000"
      },
      "message": "[privs/Solaris] Quagga should work in zones with IP instances\n\n2007-09-18  Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* privs.c: definition of ZCAP_NET_ADMIN on Solaris should\n\t  be PRIV_SYS_IP_CONFIG, when that\u0027s available. Thus allowing\n\t  Quagga to work with in Solaris zones with exclusive IP\n\t  instances.\n"
    },
    {
      "commit": "b7fe4141123c6fc26fffec68d0db62ecf474c074",
      "tree": "78f2cde951e92198b00dea6ed048d41a499f71fb",
      "parents": [
        "1ba27564f3852083839bfa1f91889cb46c780f2f"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Aug 21 16:32:56 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Tue Aug 21 16:32:56 2007 +0000"
      },
      "message": "Bug #362 is fixed now.\n"
    },
    {
      "commit": "dc95824ae13d65156dd873a6e784d9a0eed2f39f",
      "tree": "fa53aa99e517d9cfe5c56474051afdaa1bc9a666",
      "parents": [
        "068fd77cff0ce09b6390641abd84fc09a89c49db"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Aug 13 16:03:06 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Aug 13 16:03:06 2007 +0000"
      },
      "message": "Merged own patch for the bug #391 (debugging and comments mostly).\n"
    },
    {
      "commit": "7591d8b862439dfae8b4b16d148ce567b6ff8cb7",
      "tree": "b9d24293663be04e4c80bcd78f8d1f5e86c2c3f1",
      "parents": [
        "fc787e873dff0091069742b34fb3631ac529c92a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 18:52:45 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 18:52:45 2007 +0000"
      },
      "message": "[ospfd] Fix bad SPF calculation on some topologies - incorrect sorting\n\n2007-08-07 Atis Elsts \u003catis@mikrotik.com\u003e\n\n\t* ospf_spf.c: (ospf_spf_next) Sort heap in correct direction\n\t  after vertex cost is changed, thus fixing incorrect SPF\n\t  calculation on certain topologies.\n\t* lib/pqueue.{c,h}: Export trickle_up\n"
    },
    {
      "commit": "6d58272b4cf96f0daa846210dd2104877900f921",
      "tree": "a97f2c9c797bd96b298aa64f03ed69115d63e78b",
      "parents": [
        "dfdb8f18c008e7ad306588c86b12fbef337427ca"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:21:45 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon Aug 06 15:21:45 2007 +0000"
      },
      "message": "[bgpd] cleanup, compact and consolidate capability parsing code\n\n2007-07-26 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Clean up and compact capability parsing slightly.\n\t  Consolidate validation of length and logging of generic TLV, and\n\t  memcpy of capability data, thus removing such from cap specifc\n\t  code (not always present or correct).\n\t* bgp_open.h: Add structures for the generic capability TLV header\n\t  and for the data formats of the various specific capabilities we\n\t  support.  Hence remove the badly named, or else misdefined, struct\n\t  capability.\n\t* bgp_open.c: (bgp_capability_vty_out) Use struct capability_mp_data.\n\t  Do the length checks *before* memcpy()\u0027ing based on that length\n\t  (stored capability - should have been validated anyway on input,\n\t  but..).\n\t  (bgp_afi_safi_valid_indices) new function to validate (afi,safi)\n\t  which is about to be used as index into arrays, consolidates\n\t  several instances of same, at least one of which appeared to be\n\t  incomplete..\n\t  (bgp_capability_mp) Much condensed.\n\t  (bgp_capability_orf_entry) New, process one ORF entry\n\t  (bgp_capability_orf) Condensed. Fixed to process all ORF entries.\n\t  (bgp_capability_restart) Condensed, and fixed to use a\n\t  cap-specific type, rather than abusing capability_mp.\n\t  (struct message capcode_str) added to aid generic logging.\n\t  (size_t cap_minsizes[]) added to aid generic validation of\n\t  capability length field.\n\t  (bgp_capability_parse) Generic logging and validation of TLV\n\t  consolidated here. Code compacted as much as possible.\n\t* bgp_packet.c: (bgp_open_receive) Capability parsers now use\n\t  streams, so no more need here to manually fudge the input stream\n\t  getp.\n\t  (bgp_capability_msg_parse) use struct capability_mp_data. Validate\n\t  lengths /before/ memcpy. Use bgp_afi_safi_valid_indices.\n\t  (bgp_capability_receive) Exported for use by test harness.\n\t* bgp_vty.c: (bgp_show_summary) fix conversion warning\n\t  (bgp_show_peer) ditto\n\t* bgp_debug.h: Fix storage \u0027extern\u0027 after type \u0027const\u0027.\n        * lib/log.c: (mes_lookup) warning about code not being in\n          same-number array slot should be debug, not warning. E.g. BGP\n          has several discontigious number spaces, allocating from\n          different parts of a space is not uncommon (e.g. IANA\n          assigned versus vendor-assigned code points in some number\n          space).\n"
    },
    {
      "commit": "97cabcf760b8343512b5646e60cc228b8dc1350a",
      "tree": "4aab9c935540e5eafb6f8fba8c4163e305cb809c",
      "parents": [
        "0b8c4f1d811170224e467b305137ac94861daee6"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jul 06 17:00:24 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jul 06 17:00:24 2007 +0000"
      },
      "message": "[lib] Add comments regarding setsockopt_multicast_ipv4 arguments.\n\n2007-07-06 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* sockopt.{c,h}: (setsockopt_multicast_ipv4) Add some comments about\n\t  the arguments.\n"
    },
    {
      "commit": "0dc0b7080227df8aca6cc2f7961c3c55cb73c509",
      "tree": "6e812cc69de4171c069d341fac39372a2c8259fc",
      "parents": [
        "093033144658c5d914429fad5b0a6cf952f20943"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jun 01 13:21:20 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jun 01 13:21:20 2007 +0000"
      },
      "message": "[linux] Fix strange compilation problem by explicitly including \u003clinux/types.h\u003e\n\n2007-06-01 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: On linux, we seem to need to include \u003clinux/types.h\u003e before\n\t  \u003csys/sysctl.h\u003e, otherwise we get isisd compilation errors about\n\t  __be16 not being defined.\n"
    },
    {
      "commit": "d46d2a24e997883d9e2623b4de36aa4a08ffc89c",
      "tree": "31f05936514cb4125c39fee731631e0571d7cdd6",
      "parents": [
        "6bd1a7bab32b6b077bee687161c43dc0fe82076f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 16:53:04 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 16:53:04 2007 +0000"
      },
      "message": "[autoconf] GNU_SOURCE can be defined twice, through AC_FUNC_STRNLEN\n\n2007-05-10 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: Use AC_GNU_SOURCE to define _GNU_SOURCE, rather\n\t  than having lib/zebra.h do it.\n\t  AC_FUNC_STRNLEN has side-effects with latest autoconf, use\n\t  AC_CHECK_FUNC on strnlen instead.\n\t* lib/zebra.h: Don\u0027t try define _GNU_SOURCE, autoconf should do it.\n"
    },
    {
      "commit": "6f0e3f6e17687eb25b7b77c4fdc8324837d4700f",
      "tree": "8a94d9212060f0f2ee7cbd0079c2687eed7348dc",
      "parents": [
        "08d3d5b398ae81de7659509f159e814d1bbd4375"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 02:38:51 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 02:38:51 2007 +0000"
      },
      "message": "[autoconf] bugs 162,303,178: Fix \u0027present but can not be compiled\u0027 warnings\n\n2007-05-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: sys/conf.h depends on sys/param.h, at least on\n\t  FBSD 6.2.\n\t  (bug #363) Should check for in_pktinfo for IRDP\n\n2006-05-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: General cleanup of header and type checks, introducing\n\t  an internal define, QUAGGA_INCLUDES, to build up a list of\n\t  stuff to include so as to avoid \u0027present but cant be compiled\u0027\n\t  warnings.\n\t  Misc additional checks of things missing according to autoscan.\n\t  Add LIBM, for bgpd\u0027s use of libm, so as to avoid burdening\n\t  LIBS, and all the binaries, with libm linkage.\n\t  Remove the bad practice of using m4 changequote(), just\n\t  quote the []\u0027s in the case statements properly.\n\t  This should fix bugs 162, 303 and 178.\n\t* */*.{c,h}: Update all HAVE_* to the standard autoconf namespaced\n\t  HAVE_* defines. I.e. HAVE_SA_LEN -\u003e HAVE_STRUCT_SOCKADDR_SA_LEN,\n\t* bgpd/Makefile.am: Add LIBM to bgpd\u0027s LDADD, for pow().\n"
    },
    {
      "commit": "fb982c25aa771b7c7425a3c3cce0a2cda0a715de",
      "tree": "74aa4dc86b04365d90a1030682796421b0eff011",
      "parents": [
        "5921ef9aae3b5d6ff8663298f649fb9d76594acd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 04 20:15:47 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri May 04 20:15:47 2007 +0000"
      },
      "message": "[bgpd] Trim memory usage of BGP routes\n\n2007-05-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_route.h: (struct info) Move less frequently used\n\t  fields to a lazily allocated struct info_extra.\n\t  Export bgp_info_extra_get\n\t* bgp_route.c: (bgp_info_extra_new) allocate extra\n\t  (bgp_info_extra_free) Free damp info and the info_extra.\n\t  (bgp_info_extra_get) Retrieve the info_extra of a struct\n\t  info, allocating as required.\n\t  (generally) adjust to use info-\u003eextra\n\t* bgp_damp.c: (generally) use bgp_info_extra_get to access\n\t  dampinfo\n\t* bgp_attr.h: Move rarely allocated attributes from struct attr\n\t  to a struct attr_extra, for a substantial saving in size of\n\t  struct attr.\n\t* bgp_attr.c: (bgp_attr_extra_{new,free}), new, self-explanatory.\n\t  (bgp_attr_extra_get) Get the attr_extra for a given struct\n\t  attr, allocating it if needs be.\n\t  (bgp_attr_dup) Shallow copy the struct attr and its attr_extra.\n\t  (generally) adjust to know about attr-\u003eextra.\n\t* bgp_debug.c: (bgp_dump_attr) ditto\n\t* bgp_vty.c: (show_bgp_memory) print attr and info extra sizes.\n\t* bgp_nexthop.c: (generally) adjust to know about attr-\u003eextra\n\t  and info-\u003eextra.\n\t* bgp_{packet,routemap,snmp,zebra}.c: ditto\n\t* lib/memtypes.c: Add MTYPE_ATTR_EXTRA and MTYPE_BGP_ROUTE_EXTRA\n"
    },
    {
      "commit": "7514fb7739f74311830e9ddd1381d0d228224f61",
      "tree": "4d4b9a4fdfcea4cb6fa496085327f1aae9a9a380",
      "parents": [
        "5fa05099567bbe42aae87a9bef8fd630b3666a4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed May 02 16:05:35 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed May 02 16:05:35 2007 +0000"
      },
      "message": "[zebra] Routemap support on received routes, with \u0027set src\u0027 command (linux)\n\n2007-05-01 David L Stevens \u003cdlstevens@us.ibm.com\u003e\n\n\t* (general) These changes collectively add route-map and\n\t  prefix-list support to zebra and fix a bug in \"show\n\t  route-map\" (with no argument).\n\t* doc/main.texi: added route-map, prefix-list, ip protocol\n\t  and set src documentation\n\t* lib/command.h: added PROTOCOL_NODE type\n\t* lib/log.c: (proto_name2num) new function, protocol name to\n\t  number translation.\n\t* lib/routemap.c: (vty_show_route_map) fixed \"show route-map\"\n\t  without route-map name\n\t* lib/routemap.h: added RMAP_ZEBRA type\n\t* lib/zebra.h: added proto_name2num() prototype\n\t* vtysh/extract.pl.in: added VTYSH_ZEBRA flag for route-map and\n\t  plist\n\t* vtysh/Makefile.am: added zebra_routemap.c\n\t* vtysh/vtysh.h: added VTYSH_ZEBRA flag to VTYSH_RMAP\n\t* zebra/connected.c: (connected_up_ipv4) added src preference argument\n\t  to rib_add_ipv4()\n\t* zebra/kernel_socket.c: (rtm_read) ditto\n\t* zebra/main.c: added prefix list initialization\n\t* zebra/Makefile.am: added zebra_routemap.c source file\n\t* zebra/rib.h: added generic address union \"g_addr\" and use in\n\t  existing places that had an explicit union.\n\t  Added \"src\" to struct nexthop.\n\t  Added preferred src arg to nexthop_ipv4_add and rib_add_ipv4.\n\t* zebra/rt_netlink.c: (netlink_routing_table) set preferred source on\n\t  netlink messages.\n\t  (netlink_route_change) ditto\n\t  (netlink_route_multipath) ditto.\n\t* zebra/rtread_getmsg.c: (handle_route_entry) added (NULL) src to\n\t  rib_add_ipv4() call.\n\t* zebra/rtread_proc.c: (proc_route_read) ditto\n\t* zebra/zebra_rib.c: (nexthop_ipv4_add) add src argument.\n\t  (nexthop_ipv4_ifindex_add) ditto\n\t  (rib_add_ipv4) ditto\n\t  (nexthop_active_check) Add route-map processing.\n\t* zebra/zebra_routemap.c: new file for zebra route-map commands.\n\t* zebra/zebra_vty.c: (ip_protocol_cmd) Apply route-map to protocol\n\t  (vty_show_ip_route_detail) added \"src\" printing\n\t  (vty_show_ip_route) ditto\n\t  (show_ip_protocol_cmd) new command, list routemaps.\n\t  (config_write_protocol) write out routemap protocl config.\n\t  (zebra_vty_init) Install the new routemap protocol commands.\n\t* zebra/zserv.c: (zread_ipv4_add) added (NULL) src arg\n\t  (zebra_init) init zebra route-maps.\n\t* zebra/zserv.h: add zebra_route_map_init\n"
    },
    {
      "commit": "bcdda30bae1fef67d998211c54c06270ba42864c",
      "tree": "e4daad51d00adb3188154d9961f908aa7f204b90",
      "parents": [
        "d3d7e237fdc661d1d1d00a8b43657d1d719410e6"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun Apr 29 15:48:22 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun Apr 29 15:48:22 2007 +0000"
      },
      "message": "[logging] Minor performance tweak\n\n2007-04-29 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c: (quagga_timestamp) Optimize the subsecond timestamp generation.\n"
    },
    {
      "commit": "1ed72e0b3a643fa1be6f1efa904965798a575cd1",
      "tree": "052341ede20e44b6aa23b1cd799d08f9b762c1c2",
      "parents": [
        "eda9ba743c1eb7c32b2ae9b8989d3555f1890758"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sat Apr 28 22:14:10 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sat Apr 28 22:14:10 2007 +0000"
      },
      "message": "[logging] Add new \"log timestamp precision\" command for subsecond timestamps\n\n2007-04-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* command.c: (config_write_host) Save \"log timestamp precision\"\n\t  if not default value.\n\t  (show_logging) Show configured timestamp precision.\n\t  (config_log_timestamp_precision) Enable configuration of timestamp\n\t  precision.\n\t  (no_config_log_timestamp_precision) Restore default timestamp\n\t  precision.\n\t  (cmd_init) Install new timestamp precision commands.\n\t* log.h: (struct zlog) New timestamp_precision field.\n\t  (quagga_timestamp) New function to generate a timestamp with the\n\t  desired precision.\n\t  (struct timestamp_control) Declare a structure for use in avoiding\n\t  repeated duplicate calls to quagga_timestamp.\n\t* log.c: (quagga_timestamp) New function to generate a timestamp\n\t  of the desired precision.\n\t  (time_print) Call quagga_timestamp if the time hasn\u0027t already been\n\t  calculated.\n\t  (vzlog) Initialize a timestamp_control structure and pass it to\n\t  time_print and vty_log.\n\t  (zlog_backtrace) Fix 64-bit problem: cannot print size_t with %u.\n\t* vty.h: Must now include \"log.h\".\n\t  (vty_log) Takes an additional struct timestamp_control argument.\n\t* vty.c: (vty_log_out) Use new struct timestamp_control and new\n\t  quagga_timestamp function to print timestamps of the desired\n\t  precision.\n\t  (vty_time_print) Use new quagga_timestamp function.\n\t  (vty_log) Accept new struct timestamp_control argument and pass it\n\t  down to vty_log_out.\n"
    },
    {
      "commit": "eda9ba743c1eb7c32b2ae9b8989d3555f1890758",
      "tree": "f135b84aff5b76bf82d7fa0f00a1726674661164",
      "parents": [
        "33672eddf14c5b619fc38975d4c1f2888189cbc8"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Apr 27 18:13:15 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Apr 27 18:13:15 2007 +0000"
      },
      "message": "[64-bit] Fix 4 problems with printf formats and 64-bit size_t\n\n2007-04-27 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* lib/smux.c: (smux_trap) Fix printf format to work with 64-bit size_t.\n\t* ospf6d/ospf6_snmp.c: (ospfv3AreaEntry, ospfv3AreaLsdbEntry) Fix some\n\t  zlog_debug printf formats to work with 64-bit size_t.\n"
    },
    {
      "commit": "6dc686a29ecdfa8f8011eee17e4e6276ab175a0d",
      "tree": "bd4a1f7b1c32318584bec6b4f420089aadc81b07",
      "parents": [
        "37a217a59bfd32381034a0ce0adbac1c34cbec37"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:24:45 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Apr 10 19:24:45 2007 +0000"
      },
      "message": "[zebra] Bug #351: Don\u0027t redistribute routes to ipv4 link-local prefixes\n\n2007-04-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/prefix.h: Add define to match IPv4 Link-Local addresses\n\t* zebra/redistribute.c: (zebra_check_addr) Don\u0027t redistribute routes\n\t  to IPv4 link-local prefixes, fixes bug #351.\n\t* zebra/redistribute.h: Export zebra_check_addr.\n\t* zebra/router-id.c: (router_id_bad_address) re-use zebra_check_addr\n\t  rather than implementing similar logic.\n"
    },
    {
      "commit": "afb88a669167358ea2be64aa0d10c8c42fa7509c",
      "tree": "2439441fa56db6ecbae310473af7f1e1808916f2",
      "parents": [
        "ad81f8cc2e77275cdeef1267d1ff4173eb89e093"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Mar 20 20:48:27 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Mar 20 20:48:27 2007 +0000"
      },
      "message": "[lib] Make message lookup function more robust.\n\n2007-03-20 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* log.c: (mes_lookup) Make the function more robust: check for\n\t  cases where the index does not match the key value at that position.\n\t  If so, give a warning and fall back to a linear search.\n\t  And improve the error message in cases where even that fails.\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": "98954844ae56d142e96341d5dff959ec5518111e",
      "tree": "8f411f4fec908605fb4e5ea423874c6a08d82b54",
      "parents": [
        "965b83f9cc287ca36f5a4152c2ac39007c5bc6d8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:33:50 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Oct 15 23:33:50 2006 +0000"
      },
      "message": "[lib] Handle upgrade from SUNWzebra to Quagga for \u0027interface fooX:Y\u0027 commands\n\n2006-10-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* if.c: (general) Handle upgrades from SUNWzebra, which tried\n\t  to track each logical interface as a seperate struct\n\t  interface, to Quagga, which assigns only one struct interface\n\t  per ifindex.\n\t  (if_sunwzebra_get) Try decompose a logical interface name\n          (fooX:Y) to the \u0027primary\u0027 name (fooX), for Solaris.\n          (interface_cmd) Use if_sunwzebra_get on Solaris.\n"
    },
    {
      "commit": "965b83f9cc287ca36f5a4152c2ac39007c5bc6d8",
      "tree": "1cfc447235d86ce273d37078d44da82ead4fd39d",
      "parents": [
        "08c8367197cb847eb88942e5d7273cf3352d967f"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Sep 26 15:30:43 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Sep 26 15:30:43 2006 +0000"
      },
      "message": "[snmp] Fix asn_build calls to pass correct variable sizes (fixes 64-bit issues)\n\n2006-09-26 Pierre-Yves Ritschard \u003cpierre-yves@spootnik.org\u003e\n\n\t* smux.c: (smux_open,smux_trap,smux_register) Fix various\n\t  asn_build_* calls to pass the proper length in the final\n\t  argument: use sizeof(\u003cvariable\u003e) instead of sizeof(\u003ctype\u003e),\n\t  since there were several inconsistencies between the actual\n\t  variable type and the size that was passed.  This should\n\t  fix some problems on 64-bit architectures where sizeof(int)\n\t  !\u003d sizeof(long).\n"
    },
    {
      "commit": "db9c0df934e62835bc09604a7ae7932693b4254a",
      "tree": "7e382d6012701e345492756f7716d4f62030e9f8",
      "parents": [
        "f0894cf8c323a25053e1f5e82be3ea5d88c2aacb"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 27 06:44:02 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Aug 27 06:44:02 2006 +0000"
      },
      "message": "[lib] Bug #134: threads should be more robust against backward time jumps\n\n2006-08-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* thread.c: (general) Add support for monotonic clock, it may still\n\t  jump forward by huge amounts, but should be immune to going\n\t  backwards. Fixes bug #134.\n\t  (quagga_gettimeofday_relative_adjust) helper, does what name\n\t  says - adjusts gettimeofday based relative timer.\n\t  (quagga_gettimeofday) helper to keep recent_time up to date.\n\t  (quagga_get_relative) helper, update and getch the relative\n\t  timer using gettimeofday(). POSIX CLOCK_MONOTONIC is also\n\t  supported, but the code is not enabled yet nor tested.\n\t  (quagga_real_stabilised) helper, retrieve absolute time but\n\t  stabilised so as to never decrease.\n\t  (quagga_gettime) Exported interface, analogous to POSIX\n\t  clock_gettime() in interface, supporting several clocks.\n\t  (quagga_time) Exported interface, analogous to traditional\n\t  time(), will never decrease.\n\t  (recent_relative_time) Convenience function to retrieve\n\t  relative_time timeval, similar to existing recent_time absolute\n\t  timeval, for when an approximately recent value will do.\n\t  (remainder) Update to use above helpers.\n\t  (thread_getrusage) Previously was a macro, but needs to be\n\t  a function to twiddle with thread.c private stuff.\n\t* thread.c: Point the GETRUSAGE macro at previous function.\n\t  Export quagga_gettime, quagga_time and recent_relative_time for\n\t  general use.\n"
    },
    {
      "commit": "fbcba805143038af0ae0318b7ec4905708fb0949",
      "tree": "bc3cf8a5c69c17d2eb8ea35edca3598856092a33",
      "parents": [
        "1670008b5401eca13456f914bba7331c3b7b2893"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 22:52:17 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jul 27 22:52:17 2006 +0000"
      },
      "message": "[lib] remove autogenerated file, update .cvsignore\n"
    },
    {
      "commit": "cc8b13a00bfe7083ae68755e547a39cd762f2963",
      "tree": "9729858115e6862a6bc65a5454f41ce01e059306",
      "parents": [
        "90c33177f53ae36a8765f5f27bf34a90663806d3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 25 20:40:40 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 25 20:40:40 2006 +0000"
      },
      "message": "[lib] Optimise thread_call by caching pointer to thread history in the thread\n\n2006-07-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* thread.h: (struct thread) Add a cache pointer to the struct\n\t  cpu_thread_history, if it is known - saving hash lookup on\n\t  each thread_call.\n\t* thread.c: (thread_call) Cache the pointer to the\n          cpu_thread_history, so that future thread_calls of same\n          thread can avoid the hash_lookup.\n"
    },
    {
      "commit": "9d0a3260b2d1b57b7edfd3f72885d861883d4621",
      "tree": "019901060c5b0b34154b084e9ae551af33319a6d",
      "parents": [
        "74542d730198a37a872b7114643e29e99c551bcf"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Jul 11 00:06:49 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Jul 11 00:06:49 2006 +0000"
      },
      "message": "[lib] Do not call vty_close in vty_log_out to avoid possible free memory access\n\n2006-07-10 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* vty.c: (vty_log_out) Do not call vty_close, because this could\n\t  result in a parent function\u0027s accessing the freed memory.\n\t  Instead, set status VTY_CLOSE and call shutdown(vty-\u003efd, SHUT_RDWR).\n\t  And add a comment on vty_close.\n"
    },
    {
      "commit": "74542d730198a37a872b7114643e29e99c551bcf",
      "tree": "0b224588a9579f45cda632ac9e33c783405824a3",
      "parents": [
        "1f2c2743ac188b909114a1bf054a9a41a0cd5635"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Mon Jul 10 18:09:42 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Mon Jul 10 18:09:42 2006 +0000"
      },
      "message": "[lib] Fix infinite recursion for errors on vtys with terminal monitor enabled\n\n2006-07-10 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* vty.c: (vty_log_out, vty_read, vty_flush, vtysh_flush, vtysh_read)\n\t  After an I/O error, must set vty-\u003emonitor to 0 before calling\n\t  zlog_warn, otherwise an infinite recursion could occur\n\t  (since zlog_warn triggers a message to be written to the vty,\n\t  and that in turn triggers another error message when it fails, etc.).\n"
    },
    {
      "commit": "08942da588b78f41916ebd6c75fa668b18160ee7",
      "tree": "bca0de6933e8146751a88870e3b0798983837b4e",
      "parents": [
        "27b472533bc8bb0fdb37dcda7596c385d3b9f414"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Mon Jul 03 20:58:29 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Mon Jul 03 20:58:29 2006 +0000"
      },
      "message": "[debug] Debug messages to terminal vty sessions should include timestamps\n\n2006-07-03 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* vty.c: (vty_log_out) Debug messages to terminal vty sessions\n\t  should include timestamps.\n"
    },
    {
      "commit": "adf6221437073f4d427c9c973e4c95381b13fc73",
      "tree": "bd51d5f5bc649068c9082e5569421995a3984ab1",
      "parents": [
        "1c066bfe62951fa1e2f90f02b528342d60fcd6f9"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 30 16:55:41 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 30 16:55:41 2006 +0000"
      },
      "message": "[lib] Fix merge error in ChangeLog\n\n- entry was left in wrong order, according to date.\n"
    },
    {
      "commit": "74176d220ba6fb019a18ebea3e3245a46f33dce1",
      "tree": "3cd34e04c9574900973006eaac13994e3d76386a",
      "parents": [
        "7694787c190e3737d6fc3e15b7e098ce76ed61a2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 30 16:49:02 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Jun 30 16:49:02 2006 +0000"
      },
      "message": "[lib] Fix typo in cpp conditional for malloc.h include\n\n2006-06-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memory.c: Fix typo in cpp conditional around malloc.h, from\n\t  comment in bug #269.\n"
    },
    {
      "commit": "5f41e90e49b8ced6b5adac3933736067d2b24584",
      "tree": "4fab3a3596e75f5ec3959c614f921de5773bdc4a",
      "parents": [
        "95509e64e3d0fc8b01045b497b7077225d9997f0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 10:42:18 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 10:42:18 2006 +0000"
      },
      "message": "[lib] Remove bare routes in route_types: fix mistake in commmit\n\n2006-06-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* route_types.awk: Fix previous commit. Forgot to remove the\n\t  printf of the bare/numeric route-type help string (empty string)\n"
    },
    {
      "commit": "95509e64e3d0fc8b01045b497b7077225d9997f0",
      "tree": "844c81daf0c0ff9d6d3c3169fa84aaaab75cbe93",
      "parents": [
        "d1c65c211ce6259b95ec8922f3f3127dc74e118f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 08:26:07 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 08:26:07 2006 +0000"
      },
      "message": "[lib] Remove numeric route-type argument in redistribute arg strings\n\n2006-06-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* route_types.awk: Remove setting the \u0027bare\u0027 numeric route type\n\t  in redist strings.\n"
    },
    {
      "commit": "9c42a6ebbc103a0a4be6af782388ad26e6c03556",
      "tree": "fcbdec3f26cb36539b9d66e1b8f4e63cfe1c3799",
      "parents": [
        "466c96562c6e39596dc441c30420b335f83f01ea"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 07:52:03 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jun 27 07:52:03 2006 +0000"
      },
      "message": "[lib] Centralise Zserv route type information, auto-generate redist strings\n\n2006-05-23 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* route_types.txt: New file, table of ZEBRA_ROUTE definitions.\n\t* route_types.awk: New script, to parse previous and generate\n\t  (for now) redistribute string defines.\n\t* Makefile.am: build route_types.h using previous two, ala\n\t  memtypes.h, include the script and table file in EXTRA_DIST.\n\t* command.h: pull in route_types.h, add a REDIST_STR define.\n"
    },
    {
      "commit": "630c97ce0f87a719f678a24bd84945d4f145fdc5",
      "tree": "1b87b2247617af51556f24a45b6735674d7f948d",
      "parents": [
        "c024fd0c76bc305cd6b6bab0989226bd9ec5e763"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:48:17 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:48:17 2006 +0000"
      },
      "message": "[zebra] remove internal if_flag_dump, use libzebras version.\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/if.c: (if_flag_dump) remove the whitespace indentation, callers\n\t  should provide.\n\t* zebra/interface.c: (if_flag_dump_vty) redundant code, remove.\n\t  (if_dump_vty) use libzebra if_flag_dump.\n"
    },
    {
      "commit": "c024fd0c76bc305cd6b6bab0989226bd9ec5e763",
      "tree": "fabd937784fd330d046244a8febb418ca8663b5c",
      "parents": [
        "8ce5cfd13eb7f8474b3129a57c160273889c2573"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:43:09 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:43:09 2006 +0000"
      },
      "message": "[lib] list_delete shouldn\u0027t duplicate list_delete_all_node\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* linklist.c: (list_delete) call list_delete_all_node, don\u0027t\n\t  duplicate it.\n"
    },
    {
      "commit": "8ce5cfd13eb7f8474b3129a57c160273889c2573",
      "tree": "314dba4d94fe3a47fe188a700adbb73fee0ab4d8",
      "parents": [
        "e5cd706c1a4b8138e9b78933e03460f0b032c77e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:41:02 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:41:02 2006 +0000"
      },
      "message": "[lib] Experimental: have XFREE NULL out the freed pointer\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memory.h: Experimental, have XFREE macro NULL out the freed\n\t  pointer.\n"
    },
    {
      "commit": "e5cd706c1a4b8138e9b78933e03460f0b032c77e",
      "tree": "4233e178ed021ff69f035f0ed1c1a989a4bbf9e9",
      "parents": [
        "ac904dec03ce6b1bbd1bab1718085a366d485bd8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:25:55 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Jun 15 12:25:55 2006 +0000"
      },
      "message": "[lib] Fix vector leak in error path in command.c, CID #38\n\n2006-06-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* command.c: (cmd_describe_command_real) Fix leak, CID #38.\n"
    },
    {
      "commit": "fb66b29c6701129f0222275eaa206f7ac8ab30cc",
      "tree": "b9a3d53d867ead2e9f8dbb8c1add9c2eb63b1943",
      "parents": [
        "a4b303038363185f60dfef7023cb02715a9a4315"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:26:15 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:26:15 2006 +0000"
      },
      "message": "[lib] Add support for Sun libc printstack to zlog_backtrace_sigsafe\n\n2006-05-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac:\n\t  Check for Sun libc printstack(), add a general HAVE_STACK_TRACE\n\t  define for lib/log.c, if any supported stack symbol dumping\n\t  function is found (glibc backtrace/sun libc printstack).\n\t* log.c: (general) Add support for Sun libc printstack().\n\t  (hex_append) make the cpp conditional on general HAVE_STACK_TRACE\n\t  define.\n\t  (zlog_backtrace_sigsafe) Ditto. Add printstack() version of the\n\t  the DUMP macro in this function.\n"
    },
    {
      "commit": "a4b303038363185f60dfef7023cb02715a9a4315",
      "tree": "1eea12d93c580da94af435666428a7a02e67da8e",
      "parents": [
        "d09552d0c7d389f83c3833bf82f7a97da37007da"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:18:38 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:18:38 2006 +0000"
      },
      "message": "[lib] vty_log shouldn\u0027t crash if called when vty isn\u0027t initiliased\n\n2006-05-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* vty.c: (vty_log/vty_log_fixed) dont crash if called when vty\n\t  hasn\u0027t been initiliased.\n"
    },
    {
      "commit": "d09552d0c7d389f83c3833bf82f7a97da37007da",
      "tree": "0e6d58e813515d408b5f04099f0b5f7e12e2aedd",
      "parents": [
        "35cfc90cce32b19c71d2f40aab06d36eb6bfdc44"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:15:46 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:15:46 2006 +0000"
      },
      "message": "[lib] malloc.h is deprecated, try not to include it anymore\n\n2006-05-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* memory.c: malloc.h is deprecated in favour of stdlib.h, however\n\t  we still need it on GNU Libc for mallinfo().\n"
    },
    {
      "commit": "35cfc90cce32b19c71d2f40aab06d36eb6bfdc44",
      "tree": "91b9e00379fb444b98f62f04632809996d2a8186",
      "parents": [
        "105b8239f1d98156c82900d636391f94b787e541"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:08:24 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:08:24 2006 +0000"
      },
      "message": "[lib] include inttypes.h rather than stdint.h, provide defines where missing\n\n2006-05-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra.h: Include inttypes.h rather than stdint.h, best practice\n\t  according to the autoconf manual.\n\t  Add UINT*_MAX defines for older platforms lacking these (FBSD 4)\n"
    },
    {
      "commit": "9c37851eac4e75cda515761cae7c63309add30ea",
      "tree": "3fcf98573c83f117f1e0219fcab8e160af70e56a",
      "parents": [
        "0f38dc4d4729b562551f8f53e7343f5a53b2dbf5"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun May 21 04:04:49 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Sun May 21 04:04:49 2006 +0000"
      },
      "message": "[interface configuration] Try to avoid losing address info after shutdown.\n2006-05-21 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (struct connected) Document the meaning of the\n\t  ZEBRA_IFC_REAL and ZEBRA_IFC_CONFIGURED flags.\n\t* connected.c: (connected_withdraw) Do not delete the connected\n\t  address if the ZEBRA_IFC_CONFIGURED flag is set.\n\t  (connected_add_ipv4,connected_add_ipv6) Before calling\n\t  connected_withdraw, unset the ZEBRA_IFC_CONFIGURED flag\n\t  on the superseded connected structure.\n"
    }
  ],
  "next": "d6d672aaf930661f502a623d18d7a4abb4f184f2"
}
