)]}'
{
  "log": [
    {
      "commit": "a50c107e3fbdaaea78a12a868a3865fd25136ad2",
      "tree": "cdc78feecf243768780ef784608f68386d41fef0",
      "parents": [
        "80b2a9418f0ee70318c677778d63f860f0f397c3"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Thu Dec 03 15:34:39 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 03 15:34:39 2009 +0300"
      },
      "message": "zebra: fix RIB debug message for IPv6\n\nApply changes from commit f304cb48f0d7d0ff8f36e7aca8293141a9fa9e60\nto rib_queue_add.\n\nAlso includes spelling fixes.\n"
    },
    {
      "commit": "80b2a9418f0ee70318c677778d63f860f0f397c3",
      "tree": "d8d6c3190b68a51e1058459709416b1b8c0c93dd",
      "parents": [
        "16c1c4872b29bb22c0ff77bd1ef1018c63ca25fa"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Thu Dec 03 14:53:15 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Dec 03 14:53:15 2009 +0300"
      },
      "message": "zebra: make declaration const in rtm_flag_dump()\n\n* kernel_socket.c: (rtm_flag_dump) Use a const message pointer to be\nin sync with commit ce0db9cb11c0bc2e7f89a7d042e50afa495556b4.\n"
    },
    {
      "commit": "16c1c4872b29bb22c0ff77bd1ef1018c63ca25fa",
      "tree": "06813f6d1b703649757f3eedf829e7afddfe5c42",
      "parents": [
        "9964fcfc2282c8f3468b3b7355c5dea3089f0f14"
      ],
      "author": {
        "name": "Tom Goff",
        "email": "thomas.goff@boeing.com",
        "time": "Tue Dec 01 21:12:38 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 01 21:12:38 2009 +0300"
      },
      "message": "ospf6d: fix LSA locking in ospf6_new_ls_id()\n\n* ospf6_lsdb.c: (ospf6_new_ls_id) Unlock the current LSA when breaking\nout of the ospf6_lsdb_*_head() / ospf6_lsdb_*_next() loop early. No\nexplicit unlocking is needed when all LSAs are looped through\nbecause ospf6_lsdb_*_next() manages everything in that case.\n"
    },
    {
      "commit": "9964fcfc2282c8f3468b3b7355c5dea3089f0f14",
      "tree": "872e983e1e05b9544b5689408df1041046082d37",
      "parents": [
        "827341b797f602f4cd7932a777f819b530521b05"
      ],
      "author": {
        "name": "Dmitry Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Thu Nov 05 16:50:36 2009 +0300"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Thu Nov 05 16:50:36 2009 +0300"
      },
      "message": "configure: fix HAVE_CLOCK_MONOTONIC spelling\n"
    },
    {
      "commit": "827341b797f602f4cd7932a777f819b530521b05",
      "tree": "e1eb4c1f91c11f56cdc7daa41fc2082b64a522bf",
      "parents": [
        "50adf7832004191cdaf5a908bd9a9c0b2373e993"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Mon Sep 28 19:34:59 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Mon Sep 28 19:34:59 2009 +0400"
      },
      "message": "[ospfd] enable more OSPF cost command aliases\n\nThe following syntax forms were not historically supported\nby Quagga, although IOS accepted them w/o a problem:\n\nno ip ospf cost \u003c1-65535\u003e\nno ospf cost \u003c1-65535\u003e\nno ip ospf cost \u003c1-65535\u003e A.B.C.D\nno ospf cost \u003c1-65535\u003e A.B.C.D\n\nFrom now on Quagga also supports these variants.\n"
    },
    {
      "commit": "50adf7832004191cdaf5a908bd9a9c0b2373e993",
      "tree": "726d32636baa6c718e3fdab5a48ffae870c7b048",
      "parents": [
        "3849ce4e25281d11537ebd0db5e2fa2a7c356b33"
      ],
      "author": {
        "name": "David Ward",
        "email": "david.ward@ll.mit.edu",
        "time": "Mon Aug 31 10:42:06 2009 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 01 19:03:01 2009 +0100"
      },
      "message": "zebra: Fix router advertisements for non-Ethernet link layer addresses\n\n* rtadv.c: round up when calculating the link-layer address option length;\n  add padding to the option if needed to end on an octet boundary\n"
    },
    {
      "commit": "3849ce4e25281d11537ebd0db5e2fa2a7c356b33",
      "tree": "db31182d611dcc325a007755cbc091bc0789d212",
      "parents": [
        "aabbb1ae358a3fd9af011cddc1a67dfa0b3df2d2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 19:16:31 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 19:16:31 2009 +0100"
      },
      "message": "release: 0.99.15\n\n* configure.ac: Bump to 0.99.15\n"
    },
    {
      "commit": "aabbb1ae358a3fd9af011cddc1a67dfa0b3df2d2",
      "tree": "04ce8d205c0242f93037873f92e8a6f8dc24927a",
      "parents": [
        "d1c21cabdbeeb4d12049f39579c602686eb94927"
      ],
      "author": {
        "name": "Tom Henderson",
        "email": "tomh@tomh.org",
        "time": "Fri Aug 28 15:10:00 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 15:10:00 2009 +0100"
      },
      "message": "ospf6d: bug #529, fix endianness problem in earlier commit \n\n* ospf6_lsa.c: (ospf6_lsa_age_current) arithmetical compares make no sense\n  in non-host order..\n\n"
    },
    {
      "commit": "d1c21cabdbeeb4d12049f39579c602686eb94927",
      "tree": "aaaee477b15999c34175c80f6b3b1e99d2887150",
      "parents": [
        "c4cf095e95ae66c1a7b87bca95e61e50fec746ee"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Aug 25 10:18:15 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 14:53:42 2009 +0100"
      },
      "message": "bgpd: fix md5 set on listen sockets\n\n* bgp_network.c: (bgp_md5_set) Missing piece from earlier listener change\n  did not get ported from Vyatta code into upstream.  The list\n  listener_sockets changed from (int *) to (struct bgp_listener *).\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": "fab7f89dcfe77cf06806e7f8a33314d3b4857a69",
      "tree": "8679d4cf30957577bc48425bbf7a99994cf93ce8",
      "parents": [
        "302d53f791031c15590f59944313381dfb4200c6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 06 12:12:12 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 14:51:37 2009 +0100"
      },
      "message": "zebra: Add an example config file for testzebra\n\n* testrib.conf: Example config file for testzebra\n"
    },
    {
      "commit": "302d53f791031c15590f59944313381dfb4200c6",
      "tree": "dbadd21327e5445860193e1511863f2fa11b6185",
      "parents": [
        "3e4ee9591aa2d84f01ae478afd273ac55add0a1c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 06 11:48:48 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 14:51:27 2009 +0100"
      },
      "message": "zebra: test_main.c should be a bit more helpful about its usage\n\n* test_main.c: If required arguments are missing, say that.\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": "27f5dc8120e1c6902e29d86cf0d77b82cf3848c0",
      "tree": "a9058ac54bf22840409d52aa761fa215cc7abb31",
      "parents": [
        "5d8de93a84b2afc4202d3284eb9e57672e2551b3"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sat Aug 22 14:57:54 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 13:03:49 2009 +0100"
      },
      "message": "ospfd: Make sure priority is respected.\n\n* ospf_ism.c (ospf_dr_eligible_routers) should test for priority \u003e 0 instead\n  of !\u003d 0 as ospf_nbr_new () initially sets prio to -1\n"
    },
    {
      "commit": "5d8de93a84b2afc4202d3284eb9e57672e2551b3",
      "tree": "9a17c616907cd000efc46873994464409c575099",
      "parents": [
        "065de90380c88d9fcc116627f714bed9984c2723"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Fri Aug 07 13:48:15 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 28 12:29:38 2009 +0100"
      },
      "message": "ospfd: Tighten up the connected check for redistribution\n\n* ospf_zebra.c: (ospf_distribute_check_connected) check to make filter out\n  routes matching connected routes was matching against OSPF networks, which\n  can be far more general than the actual connected interfaces. Fix.\n"
    },
    {
      "commit": "065de90380c88d9fcc116627f714bed9984c2723",
      "tree": "79061a2699e0dc3e87c218b3b57c2f0577d5a69a",
      "parents": [
        "5bd5881838c22e075c3d0c245a8952a55e9dca38"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Aug 07 11:13:49 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 13 10:21:13 2009 +0100"
      },
      "message": "all: check return value from daemon() call\n\n* */*main.c: (main) Current versions of Gcc warn if the return value for\n  daemon() is not checked.  So add a simple test and exit on failure.\n\n"
    },
    {
      "commit": "5bd5881838c22e075c3d0c245a8952a55e9dca38",
      "tree": "b0f011eef51409e492ef107aace3fefca4530f77",
      "parents": [
        "62bed38d2f2c7317b5c97285d9fb935c5fe681e1"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 06 21:05:47 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 13 10:19:24 2009 +0100"
      },
      "message": "bgp: missing pieces from listener patch\n\n* bgp_network.c: (bgp_accept) The code in current git will crash as part of\n  the revised listener code is missing.  The new listener thread code passes\n  a pointer to a bgp_listener structure, not the bgp pointer.  The old code\n  always got a NULL for bgp pointer, so that is now hard coded.\n"
    },
    {
      "commit": "62bed38d2f2c7317b5c97285d9fb935c5fe681e1",
      "tree": "8fd4189ed9927b258cfc2fdbb20fcd48cbd08e9b",
      "parents": [
        "3106a03215f5f09c2c0d427fa706fff52ef3cb37"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 06 21:07:23 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 13 09:59:58 2009 +0100"
      },
      "message": "bgp: compiler warning fix\n\n* bgp_filter.h: Gcc complains the function prototype is not correct because\n  the function argument is using old K\u0026R style.\n"
    },
    {
      "commit": "3106a03215f5f09c2c0d427fa706fff52ef3cb37",
      "tree": "378e2b80de22275e91157fd0b9db5248b5681eea",
      "parents": [
        "5996e0df2eb325445114517209cd24f37d91774a"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Thu Aug 06 12:58:05 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Aug 13 09:58:46 2009 +0100"
      },
      "message": "ospfd: fix performance problem with redistribute delete\n\nDoing redistribute delete with full BGP table was taking\n30 minutes, this drops it down to less than a second.\n\n* ospf_lsa.c: (ospf_lsa_maxage) When flushing lots of entries the\n  performance is terrible because it looks up each LSA entry through\n  ospf_lsa_maxage_exist before deleting causing O(N^2) performance.  Use a\n  new OSPF_LSA_MAXAGE flag instead of scan - and maintain it.\n  (ospf_lsa_maxage_exist) removed\n  (ospf_lsa_maxage_delete) maintain OSPF_LSA_MAXAGE flag\n"
    },
    {
      "commit": "5996e0df2eb325445114517209cd24f37d91774a",
      "tree": "56bee1d2ab48d4b7a5e163747b54d7537f4df9a3",
      "parents": [
        "11637435b2d74702296b0522500d03b0395554a2"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jul 27 12:42:35 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 11 17:33:27 2009 +0100"
      },
      "message": "ospfd: Make sure route table is recalculated.\n\nIn some cases ospfd does not recalc the route table. This\nhappens when ospfd receives an old LSA which will trigger\nrecalc but the this recalc will fail because all interfaces\nisn\u0027t up yet. Next LSA that is originated matches the old one\nso no recalc will be performed. This problem has been observed\nwhen there are only 2 ppp I/Fs in an area, both go down at the\nsame time, then they come up again with a few seconds apart.\n\n* ospf_lsa.c: (ospf_{router,network}_lsa_install) avoid a needless scheduling\n  of SPF.\n  (ospf_lsa_different) fix bug in LSA comparison that would lead to the\n  described failure to schedule SPF.\n"
    },
    {
      "commit": "11637435b2d74702296b0522500d03b0395554a2",
      "tree": "c9e5fd2cc9188f7a0702eebc7f6a24c3d4dc495d",
      "parents": [
        "9d878775ff5c05afea522b60f014b88822d19e1b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 11 12:25:42 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Aug 11 12:25:42 2009 +0100"
      },
      "message": "ospfd: Make \"Packet ... received on wrong link\" conditional on debug\n\n* ospf_packet.c: make this message conditional on \u0027debug ospf event\u0027, as it\n  be easily triggered with, e.g., multiple subnets sharing same physical\n  network. E.g, see bug #532.\n"
    },
    {
      "commit": "9d878775ff5c05afea522b60f014b88822d19e1b",
      "tree": "f1c7c45de602e2ac7ccd2c3c309e6568beff3af7",
      "parents": [
        "5372510d109d87b94d6094d095dd4e0e02eaf32a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Aug 05 16:25:16 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Aug 05 16:25:16 2009 +0100"
      },
      "message": "bgpd: Fix mistakes in applying \u0027allow inbound connections to non-default view\u0027\n\n* bgpd.c: (peer_lookup_with_open) Bodged application of previous patch\n  meant the second loop around bgp-\u003epeer wasn\u0027t included in the loop\n  around bm-\u003ebgp as it was supposed to be. Fix..\n"
    },
    {
      "commit": "5372510d109d87b94d6094d095dd4e0e02eaf32a",
      "tree": "9c112ea23db64e3d2f2978e8c7df575cbd3a14a3",
      "parents": [
        "4ca15d4a658dca9663b7dea2475edfe6814ef847"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 03 16:34:16 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 03 16:52:38 2009 +0100"
      },
      "message": "ospfd: neuter some compiler warnings\n\n* ospf_lsa.c: (link_info_set) Use %zd for size_t - C99 is old enough now.\n  Lots of similar warnings all over the code.\n  (ospf_lsa_translated_nssa_compare) Unused func - delete.\n"
    },
    {
      "commit": "4ca15d4a658dca9663b7dea2475edfe6814ef847",
      "tree": "a756f68b118cf641f8f91966e771345d4a177b76",
      "parents": [
        "a8ba847ff96b41e06770d4987b15707890ed5807"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 03 15:16:41 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 03 16:52:38 2009 +0100"
      },
      "message": "ospfd: update some comments\n\n* ospf_{spf,lsa}.c: remove out of date comment; add comment on some\n  non-obvious code; Make note of a possible scaling problem.\n"
    },
    {
      "commit": "a8ba847ff96b41e06770d4987b15707890ed5807",
      "tree": "07864eb958853e5ad7b2616c9b7bc5259a8ae503",
      "parents": [
        "bd5403778b0d96258730050e4526c7c72903e60b"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jul 27 12:42:34 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Aug 03 16:52:30 2009 +0100"
      },
      "message": "ospfd: Change struct ospf_path *oi to ifindex.\n\n* global: In struct ospf_path, change struct ospf_interface *oi to int\n  ifindex.  It is unsafe to reference *oi as an ospf interface can be\n  deleted under your feet. Use a weak reference instead.\n"
    },
    {
      "commit": "bd5403778b0d96258730050e4526c7c72903e60b",
      "tree": "bcd21a0f78175f0693857bc7eaadef30d8b3c4a6",
      "parents": [
        "4a5f432fa07f33da5ad05d18e4ba81d57b44af8e"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jul 27 12:42:31 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 30 16:18:30 2009 +0100"
      },
      "message": "ospfd: Discriminate better when selecting links between vertices in SPF\n\n* ospf_spf.c: (ospf_get_next_link) One must check the vertex type, Router or\n  Network, to select type link to match against.  Link type 1 has neighbour\n  router ID in link_id and link type 2 has IP address of DR.  Since router\n  id may have same value as an existing IP address one risks matching a\n  router ID against a DR.\n"
    },
    {
      "commit": "4a5f432fa07f33da5ad05d18e4ba81d57b44af8e",
      "tree": "d8728f36ff64a1ba39d83de6aabfd3d4dc661447",
      "parents": [
        "66bed4f4f0235c1eb6edb0a2f6bd4aaf47e5a7f8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 30 15:55:24 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 30 15:55:24 2009 +0100"
      },
      "message": "[bgpd] delete erroneous extra brace..\n"
    },
    {
      "commit": "66bed4f4f0235c1eb6edb0a2f6bd4aaf47e5a7f8",
      "tree": "17488e5dc6eb4cc575f2aa006bfd87ec9c815222",
      "parents": [
        "3de4277ba9b25ff03710d7c004bf708accffd5c7"
      ],
      "author": {
        "name": "Michael Lambert",
        "email": "lambert@psc.edu",
        "time": "Tue Jul 28 11:26:14 2009 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 30 15:55:14 2009 +0100"
      },
      "message": "bgpd: Workaround for invalid MBGP next hop\n\n* bgp_attr.c: (bgp_mp_reach_parse) There are some interoperability issues\n  for MBGP (particularly IPv4 multicast NLRI) between different\n  implementations.  In order to get some next hops to install correctly in\n  the BGP tables, it appears to be necessary to copy the multiprotocol next\n  hop into the base next hop field.  This is related to differences in RFC\n  2283 and RFC 2858.\n"
    },
    {
      "commit": "3de4277ba9b25ff03710d7c004bf708accffd5c7",
      "tree": "df5d9125635c6101cf6e1224f5b8b1af25fe91e4",
      "parents": [
        "05cf46badbad99b76c4e974c7306c14494d1000e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 16:04:35 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 30 15:51:45 2009 +0100"
      },
      "message": "[doc] Update HACKING\n\n* HACKING: Update to reflect git stripping []\u0027s, and to allow for more\n  discretion to avoid redundancy in commit messages.\n"
    },
    {
      "commit": "05cf46badbad99b76c4e974c7306c14494d1000e",
      "tree": "dd1fd18afc3d7ef6f92281c1c6fb0bc8ebd6a58b",
      "parents": [
        "f0f63841582ed97362619a53fb711747f09d961b"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jul 27 12:42:30 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:47:43 2009 +0100"
      },
      "message": "ospfd: Make ospf_if_lookup_recv_if() find the right unnumbered i/f\n\nThis function will return the interface for the first matching\nremote address for PtP i/f\u0027s. That won\u0027t work for multiple\nunnumbered i/f\u0027s as these may all have the same address.\n\nPass in the struct interface pointer, ifp, to find the\ncorrect set of oi\u0027s to search in. This also reduces the\nsize of the search list, making it faster.\n\n* ospfd/ospf_interface.c: Add struct interface * param to\n  ospf_if_lookup_recv_if() to select the right list to search in.\n* ospfd/ospf_interface.h: ditto.\n* ospfd/ospf_packet.c: Pass new ifp argument to ospf_if_lookup_recv_if()\n"
    },
    {
      "commit": "f0f63841582ed97362619a53fb711747f09d961b",
      "tree": "bb663103d3b25064143685a4f3f40cd008b3cc0f",
      "parents": [
        "2158ad2359a370dd349f4543a2d5d535bb5a8770"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jul 27 12:42:29 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:40:47 2009 +0100"
      },
      "message": "ospfd: export ospf_if_table_lookup() and use it in ospf_network_run_interface()\n\nMakes it possible to run OSPF on multiple PtP interfaces\nwith the same remote address.\n\n* ospfd/ospf_interface.c: Export ospf_if_table_lookup().\n* ospfd/ospf_interface.h: ditto.\n* ospfd/ospfd.c: (ospf_network_run_interface) Use ospf_if_table_lookup() to\n  determine whether OSPF is already configured for a subnet and interface.\n\n"
    },
    {
      "commit": "2158ad2359a370dd349f4543a2d5d535bb5a8770",
      "tree": "afaf6922eecc2f155016e229d516b4e2487c7dbe",
      "parents": [
        "fc4dc59d08589a887ac33a70d946eb7905541f5f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:10:55 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:10:55 2009 +0100"
      },
      "message": "bgpd/trivial: Fix indentation in previous\n"
    },
    {
      "commit": "fc4dc59d08589a887ac33a70d946eb7905541f5f",
      "tree": "b142a18a28ebf915757aafe6bf5a139ec0f112bb",
      "parents": [
        "3117b5c47df044f8b2197fff60641075394fdce5"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jul 28 17:54:35 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 18:06:39 2009 +0100"
      },
      "message": "bgpd: Allow inbound connections to non-default view\n\n* bgpd.c: (peer_lookup) Search through all BGP instances for matches, not just\n  the default instance, if no specific instance is given.\n  (peer_lookup_with_open) same.\n"
    },
    {
      "commit": "3117b5c47df044f8b2197fff60641075394fdce5",
      "tree": "0a25f9376ab96e21d9e161f9c9e156fbd5641d53",
      "parents": [
        "cb9e0ceec988a059dd2269ebc54722c01afb7cca"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jul 28 17:50:00 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 17:50:00 2009 +0100"
      },
      "message": "bgpd: fd leak in bgpd\n\n* bgp_fsm.c: I have found an fd leak in bgpd that is caused by the \u0027new\u0027\n  Clearing state.  I\u0027ve been seeing it from hold timer failures, but it can\n  also be triggered by other things.\n\n  When Hold_Timer_expired fires in Established state, a notify is sent and\n  BGP_Stop event queued.  The fsm then transitions into Clearing state.\n  That is the problem; When the BGP_Stop event is serviced, the state table\n  says to ignore it while in Clearing.  Thus bgp_stop is not called and the\n  fd leaks.  Previously the peer would be in Idle state, which correctly\n  handles the BGP_Stop event.\n\n  Fix by making bgp_stop safe to call from Clearing state, without losing\n  ClearingCompleted events, and then ensuring it is called prior to\n  transition from Clearing-\u003eIdle.\n"
    },
    {
      "commit": "cb9e0ceec988a059dd2269ebc54722c01afb7cca",
      "tree": "c558e706ffca27dd4568f729a48b6f8c83a64c9a",
      "parents": [
        "9afabaf048af74a370dfc71411b6963641f713b2"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Apr 20 00:31:57 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 16:24:19 2009 +0100"
      },
      "message": "[zebra] Fix crash in test_zebra\n\n* kernel_null.c: we\u0027re pretending to add an address, so\n  set IFC_REAL. If this isn\u0027t done, calling into the \u0027got address\n  from kernel\u0027 half of zebra will implicitly-withdraw the ifc, which\n  could cause a crash in test_zebra.c.\n"
    },
    {
      "commit": "9afabaf048af74a370dfc71411b6963641f713b2",
      "tree": "81bea7f7655fe04d6e9c7d2b053dabae9e2ce242",
      "parents": [
        "736d440845c8c0cfdb56b86254887bab5fc7f3f5",
        "97be79f9d38b07214d5ad9b437e1a852c594a985"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 16:06:45 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 16:06:45 2009 +0100"
      },
      "message": "Merge remote branch \u0027origin/master\u0027\n"
    },
    {
      "commit": "736d440845c8c0cfdb56b86254887bab5fc7f3f5",
      "tree": "e1b7f27c18b03494509e9b9ef0a694b726630418",
      "parents": [
        "ca87e1d37b3c30648e9bacb476a3c89729512f6d"
      ],
      "author": {
        "name": "Vasilis Tsiligiannis",
        "email": "b_tsiligiannis@silverton.gr",
        "time": "Mon Jul 20 01:59:10 2009 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 15:02:07 2009 +0100"
      },
      "message": "bgpd: Delete AS_CONFED_SEQUENCE when prepending an AS_SEQUENCE type segment\n\nAS_CONFED_SEQUENCE segment should always be deleted when prepending\n(e.g. with a route-map) an AS_SEQUENCE segment to an AS path. Otherwise,\nAS_CONFED_SEQUENCE will not be deleted later when updating EBGP peers (since\nit is not the leftmost segment) and will leak outside the confederation.\n"
    },
    {
      "commit": "ca87e1d37b3c30648e9bacb476a3c89729512f6d",
      "tree": "d0911b72e7d4c3c94c88a65233ee8a7fa8a4c950",
      "parents": [
        "30d205909c5a81cc306b161c16abff0fd7f566a7"
      ],
      "author": {
        "name": "Vasilis Tsiligiannis",
        "email": "b_tsiligiannis@silverton.gr",
        "time": "Mon Jul 20 01:28:35 2009 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 14:49:33 2009 +0100"
      },
      "message": "bgpd: Implement BGP confederation error handling (RFC5065, Par. 5)\n\nThis patch implements BGP confederation error handling in Quagga as described\nin RFC5065, paragraph 5.\n\n* bgp_aspath.c: (aspath_confed_check, aspath_left_confed_check) new functions\n* bgp_attr.c: (bgp_attr_aspath_check) apply previous and NOTIFY if there\u0027s\n  a problem.\n"
    },
    {
      "commit": "30d205909c5a81cc306b161c16abff0fd7f566a7",
      "tree": "6f7532a4336cf601bbeab07d2669639a05409dfd",
      "parents": [
        "d023aec49f70156d2ed894a8fba65bcfa221ff02"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Jul 28 11:58:51 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 11:58:51 2009 +0100"
      },
      "message": "[global] interface flags format warnings\n\n*/*: ifp-\u003eflags is 64 bit unsigned which can not be handled by %l on 32\n     bit architectures - requires %ll and the appropriate cast.\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": "03621955d8ab0ea30024bd8fc83afda8e48db712",
      "tree": "0df6f032806430fdd7d70b5317779d146e9d6f58",
      "parents": [
        "78b31d5cf511c400d7f09158a3d8863f1bf63c2a"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Jul 21 16:27:20 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 28 10:04:38 2009 +0100"
      },
      "message": "bgpd: peer action table static/const\n\nbgpd.c: (various tables) only used in one place and are immutable.\n"
    },
    {
      "commit": "78b31d5cf511c400d7f09158a3d8863f1bf63c2a",
      "tree": "b47a513278c23f7034c5ffa885facc1963d3a52a",
      "parents": [
        "9a1a331d63ae9db1912a1edb48c5c176454562f8"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Jul 21 16:27:26 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jul 27 12:37:26 2009 +0100"
      },
      "message": "ripd: set IP TOS for control socket\n\n* ripd.c: (rip_create_socket) RIP packets should go out with Type Of Service\n  (DSCP) set to Internet control (like OSPF and BGP).\n"
    },
    {
      "commit": "9a1a331d63ae9db1912a1edb48c5c176454562f8",
      "tree": "d6da5f9ce7e6760f59a7fda7ceeb89877a3148c5",
      "parents": [
        "5b40b1b57e1fad1caf579e032adf4e111128e486"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jul 27 12:27:55 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jul 27 12:27:55 2009 +0100"
      },
      "message": "[bgpd] Restore ability of \u0027neighbor ... update-source\u0027 to take interface name\n\n* bgp_vty.c: (BGP_UPDATE_SOURCE_STR) Restore ability to accept arbitrary\n  interface names for the \u0027neighbor ... update-source\u0027 command - shouldn\u0027t\n  have been deleted.\n  (BGP_UPDATE_SOURCE_STR) Add help for same.\n"
    },
    {
      "commit": "97be79f9d38b07214d5ad9b437e1a852c594a985",
      "tree": "dbc8513b7f58c4f603ea1eed87efe9dbf4d7897e",
      "parents": [
        "5b40b1b57e1fad1caf579e032adf4e111128e486"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Fri Jul 24 20:45:31 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Fri Jul 24 20:45:31 2009 +0400"
      },
      "message": "[zebra] do not touch socket before pidfile locking\n\nMove zserv socket creation code into zebra_zserv_socket_init() and\ncall it only after pidfile lock has been acquired exclusively. This\nkeeps subsequent zebra daemons from deleting the working socket of\nan already running process (bug #403).\n"
    },
    {
      "commit": "5b40b1b57e1fad1caf579e032adf4e111128e486",
      "tree": "87cc68288b5ba178ba0e25fea64f17e8d4b2658c",
      "parents": [
        "998274cd7c559bd04d7b7f6e615ad120af915d86"
      ],
      "author": {
        "name": "Thijs Kinkhorst",
        "email": "thijs@debian.org",
        "time": "Tue Jul 21 19:24:29 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jul 21 19:24:29 2009 +0400"
      },
      "message": "[doc] zebra.8 via Christian Hammers (#531)\n\nThe man page for zebra(8) mentions as port number to connect to 2602,\nbut it\u0027s acutally 2601 (as shown in /etc/services). 2602 belongs to ripd.\nAttached patch fixes this typo.\n"
    },
    {
      "commit": "998274cd7c559bd04d7b7f6e615ad120af915d86",
      "tree": "6869195b82a9349165a32d6c80c7960984cb2a92",
      "parents": [
        "638b70ba9893705bb3268aa00c25b8cb0e060b32"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 15:21:20 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 15:21:20 2009 +0100"
      },
      "message": "[build] Bump release to 0.99.14\n"
    },
    {
      "commit": "638b70ba9893705bb3268aa00c25b8cb0e060b32",
      "tree": "51eaabdcfba4bfd4b5aa54c7a1b20298c9e2fc2a",
      "parents": [
        "a294365797da8b72e51507cbf92dbc6940e5103b"
      ],
      "author": {
        "name": "Vasilis Tsiligiannis",
        "email": "b_tsiligiannis@silverton.gr",
        "time": "Mon Jul 20 01:25:16 2009 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 14:44:41 2009 +0100"
      },
      "message": "[bgp] Fix nexthop reachability check on confederations\n\n* bgp_route.c: (bgp_update_main) Nexthop reachability should be checked for\n  confederations too in case a prefix is received from more than one\n  confederation peers.\n"
    },
    {
      "commit": "a294365797da8b72e51507cbf92dbc6940e5103b",
      "tree": "618569bcf8a1a5d4f7a0a8192692c5d3e27bbb02",
      "parents": [
        "e8eb000e15e2bbe63467d7c056f2b21b72ba7bd6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 14:02:04 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 14:02:04 2009 +0100"
      },
      "message": "[bgpd] fix typo made by paul in previous commit\n"
    },
    {
      "commit": "e8eb000e15e2bbe63467d7c056f2b21b72ba7bd6",
      "tree": "3e21cb6d66b0e1b8caaacc687ad30b83607d33a3",
      "parents": [
        "e7cc3b383e5e9190aa7784554c605a3a661ebe2b"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Feb 17 12:14:23 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 13:15:32 2009 +0100"
      },
      "message": "[bgpd] Avoid zombie accepted peer entries\n\nCurrently, when accepting the connection, it can be left as zombie, when the\npeer just initiates a connection, but never sends data (and the TCP\nconnection end packets are lost).  This happens because for accepted\nconnections a temporary new peer entry is created until OPEN message is\nexchanged, and this temporary peer entry does not get the hold time\nparameter set at all.\n\n* bgp_network.c: (bgp_accept) Set hold time and keepalive values for ACCEPT\n  peers.\n"
    },
    {
      "commit": "e7cc3b383e5e9190aa7784554c605a3a661ebe2b",
      "tree": "3f7b254d2e47805d4a39c43bd0c6f459e512732a",
      "parents": [
        "67b9467f6cad5097a3e4c6e49348be4d6c17a5bb"
      ],
      "author": {
        "name": "Nick Hilliard",
        "email": "nick@inex.ie",
        "time": "Tue Mar 17 22:14:25 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 11:34:27 2009 +0100"
      },
      "message": "[bgpd] Small buffer overrun in bgp_clear_node_queue_init\n\n* bgp_route.c: (bgp_clear_node_queue_init) fix buffer\n  overrun.\n"
    },
    {
      "commit": "67b9467f6cad5097a3e4c6e49348be4d6c17a5bb",
      "tree": "a4c14d2d2ad51f367c3e2a511942e8945bc22a16",
      "parents": [
        "228da42898c4f7bd72d9c1ee4135108e8d40d860"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sat Jul 18 04:02:26 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jul 21 10:13:11 2009 +0100"
      },
      "message": "[zebra] Silence noisy process_subq\n\nzebra_rib.c: process_subq(): #ifdef out debug code.\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": "54a15182e05ca757db3bb90a4135e9f8fd3c84f2",
      "tree": "1d29ccce46cb362ae3b2b28b2a46a3dc017d5bf1",
      "parents": [
        "62c9f504bdd4b09df6cf677e96367f3b31ef9dea"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sat Jul 18 05:42:34 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jul 19 17:36:59 2009 +0100"
      },
      "message": "[bgpd] Fix compiler warnings related to MD5\n\nThis patch fixes:\n\nbgp_network.c: In function \u0027bgp_md5_set\u0027:\nbgp_network.c:107: warning: cast from pointer to integer of different size\nbgp_network.c: In function \u0027bgp_socket\u0027:\nbgp_network.c:447: warning: cast to pointer from integer of different size\n"
    },
    {
      "commit": "62c9f504bdd4b09df6cf677e96367f3b31ef9dea",
      "tree": "25804d84010397a352b384d10d5cfab1d41ff42e",
      "parents": [
        "fd35b948dbb35674cd9ded431f94b59aeced40cc"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jul 19 17:33:21 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jul 19 17:33:21 2009 +0100"
      },
      "message": "[build] fix default CFLAGS and squish warning\n\n* configure.ac: Move down the AC_SYS_LARGEFILE test - it was setting CFLAGS\n  and so disabling the default CFLAGS setting section.\n  Squish warning by adding AC_CONFIG_MACRO_DIR on the reccommendation of\n  autoreconf.\n"
    },
    {
      "commit": "fd35b948dbb35674cd9ded431f94b59aeced40cc",
      "tree": "c236a99b492b19943916e0c117b0a2461333b422",
      "parents": [
        "3fa3f957e70f594cc2c1cac03644ddf48554c178"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 16 19:27:32 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jul 17 11:19:46 2009 +0100"
      },
      "message": "[bgpd] Bug #533: Fix crash with copy/pasted commands, inc \u0027no bgp ...\u0027\n\n* bgpd.c: Removal of (struct bgp *) from the master list was being left to\n  bgp_free time.  This meant there was a window of time between bgp_delete\n  and refcounts hitting 0 (e.g.  routes to be processed) where bgp_lookup\u0027s\n  could return a deleted (struct bgp *).\n\n  (bgp_delete) This is the logical place where a (struct bgp *) should lose\n  its visibility, so move the deletion from the bgp-master list to here,\n  from bgp_free.\n\n  Many thanks to Fritz Reichmann for his thorough debugging of the problem\n  and testing of fixes and Chris Caputo for his further analysis.\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": "9b4ef258a9d9c5f1052afe0e19ebaef9f6740fa2",
      "tree": "7deb3abfbddadc9c15300c1a6702549e918db5dc",
      "parents": [
        "41b2373cece77f0cc9a06fba076c99a7be653593"
      ],
      "author": {
        "name": "Tom Henderson",
        "email": "tomh@tomh.org",
        "time": "Thu Jul 16 17:20:37 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jul 16 17:20:37 2009 +0100"
      },
      "message": "[ospf6d] Fix regression in monotonic time patch - LSA max-aging broke\n\n* ospf6_lsa.c: (ospf6_lsa_premature_aging) set age to MAX_AGE - don\u0027t\n  rely on 0 magically meaning same.\n  (ospf6_lsa_age_current) handle MAXAGE.\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": "bd2462425205a681d75e04c94a94bf4cea5da58b",
      "tree": "326c2dde485eded444cde3db284aeb7a348892bf",
      "parents": [
        "650f76c2e1b0b12e1c46fdd3be22c5f505245d83"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Jan 05 17:44:46 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 26 16:12:19 2009 +0100"
      },
      "message": "[ospfd] Do not use stale Network/Router LSAs\n\nShould a self originated Network/Router LSA with higher\nLS seq. nr. be received we should flood and install it in\nthe LSDB but we cannot use it for our internal calculations\nas it is stale.\nReorginate an new LSA to replace the stale one as soon\nas possible.\n"
    },
    {
      "commit": "650f76c2e1b0b12e1c46fdd3be22c5f505245d83",
      "tree": "43322ab134a9e79ee65ca0300f2106f690b5c925",
      "parents": [
        "439c52f19007badffc6707673121f5a76784e728"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 25 18:06:31 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 26 16:12:19 2009 +0100"
      },
      "message": "[bgpd] Log a debug/update warning if filters are configured but don\u0027t exist\n\n* bgp_route.c: (bgp_{input,output}_filter) Log a debug warning if a route is\n  received or sent and a filter name is configured for a prefix, as or\n  distribute list but none is found - guaranteed configuration mistake.\n"
    },
    {
      "commit": "439c52f19007badffc6707673121f5a76784e728",
      "tree": "2e16cabd2f63de4bfd5eddc24c08b1e1a593f95b",
      "parents": [
        "77a1c4e05ca5a7d7bf07456758f7c934ee867884"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Dec 01 16:25:06 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 25 15:36:39 2009 +0100"
      },
      "message": "Add test for Internet checksum.\n\nAdd 2 impl. of the Internet Checksum. One new optimized nad\none form RFC 1071. Turns out that the current Quagga in_cksum()\nis buggy. On Big Endian routers it miscalculates odd sized buffers.\n"
    },
    {
      "commit": "77a1c4e05ca5a7d7bf07456758f7c934ee867884",
      "tree": "47553373b16dd033a0866624dd54b8b851cbdb09",
      "parents": [
        "cbcd9bfc503f08b99f5360b1aae3a5362d25a665"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Sun Feb 01 11:12:11 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 25 15:36:08 2009 +0100"
      },
      "message": "[ospfd] compare ifIndex too when matching paths\n\nospf_path_lookup(), ospf_route_match_same() and\nospf_ase_route_match_same() needs to\ncompare if the interface matches too.\n"
    },
    {
      "commit": "cbcd9bfc503f08b99f5360b1aae3a5362d25a665",
      "tree": "58814eea77d86ddbca739dd005c9adb802611864",
      "parents": [
        "3d8617b853af511ca5f019b2f51c7902e2689212"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Mon Feb 16 09:40:39 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 25 14:01:19 2009 +0100"
      },
      "message": "[doc] Add \"--disable-doc\" to configure\n\nConfigure option \"--disable-doc\" will prevent building\nthe documents under doc. Saves build time and the need to\nhave document building tools installed. Useful when your build\nmachine is different from your development machine.\n"
    },
    {
      "commit": "3d8617b853af511ca5f019b2f51c7902e2689212",
      "tree": "bb366c8a716653d315f64457a9ea642a370170d3",
      "parents": [
        "f65431380428c3cb8eb5c0a0ac93debc30717a3f"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Wed Feb 04 15:05:19 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 25 14:00:40 2009 +0100"
      },
      "message": "[ospfd] external LSA route_unlock_node() fixes\n\nA few route_unlock_node() calls was missing.\n"
    },
    {
      "commit": "f65431380428c3cb8eb5c0a0ac93debc30717a3f",
      "tree": "343c4b39fa516c0fc3a0640c9a8f9536c5b21d5f",
      "parents": [
        "dc26699a80eb7b40fb1c9026496cde2b80bf1335"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Tue Nov 04 13:37:29 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 25 12:23:27 2009 +0100"
      },
      "message": "[ospfd] Fix a few LSA performance \"bugs\"\n\nospf_lsa_install() will calculate LSA checksum so no\nneed to do it before calling ospf_lsa_install().\n\nSet the OSPF_LSA_SELF_CHECKED flag on own LSA\u0027s to\nsave ospf_lsa_is_self_originated() some work.\n\nDo not memset() memory that is about to overwritten\nwith memcpy().\n"
    },
    {
      "commit": "dc26699a80eb7b40fb1c9026496cde2b80bf1335",
      "tree": "0b760da30cbf246882af85b9e47ccb46628fba17",
      "parents": [
        "c3a5606302777cdd33d4025fc30bed723fc84d79",
        "c9035ccd13078b6a5d53566979a66c1ac892b47a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 24 22:52:43 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 24 22:52:43 2009 +0100"
      },
      "message": "Merge remote branch \u0027origin/master\u0027\n"
    },
    {
      "commit": "c3a5606302777cdd33d4025fc30bed723fc84d79",
      "tree": "afa5d20dd20d6a05f99107655ce68d8788f847cc",
      "parents": [
        "3f4ab7f9e9ffaee7c448744f45d6e5e2176cce89"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "Joakim.Tjernlund@transmode.se",
        "time": "Wed Jun 24 19:15:36 2009 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 24 22:43:58 2009 +0100"
      },
      "message": "zebra: Static route does not reach kernel.\n\nA static route like below: ip route 172.16.1.0/30 192.168.101.162 11\ndoes not move properly to a new interface when the\ninterface used goes down. Zebra reports that it have\nmoved but kernel isn\u0027t informed so the route is lost.\n\n* zebra_rib.c: (nexthop_active_update) if ifindex has changed, then the\n  route should be considered to have changed.\n\nSigned-off-by: Joakim Tjernlund \u003cJoakim.Tjernlund@transmode.se\u003e\n"
    },
    {
      "commit": "3f4ab7f9e9ffaee7c448744f45d6e5e2176cce89",
      "tree": "150f78b31c7b0edae8b5ebfe4f6f8b4176a52dd5",
      "parents": [
        "80abd9fe37d8aa5d929686f3d4a717b72bfacb3c"
      ],
      "author": {
        "name": "Tomasz Pala",
        "email": "gotar@pld-linux.org",
        "time": "Wed Jun 24 22:23:11 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 24 22:26:38 2009 +0100"
      },
      "message": "[vtysh] Save vtysh history to a file\n\nvtsh_main.c: save 1000 last lines of history to $HOME/.history_quagga (the\nfile must be created by hand first, this is intended behaviour)\n"
    },
    {
      "commit": "80abd9fe37d8aa5d929686f3d4a717b72bfacb3c",
      "tree": "6c1e85c0ab807883a4ba630620f5765b2a7dbcc4",
      "parents": [
        "3fc1eca92a7022f1c5b567505a7d86aab0d3cbd4"
      ],
      "author": {
        "name": "Tomasz Pala",
        "email": "gotar@pld-linux.org",
        "time": "Wed Jun 24 22:09:46 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 24 22:11:34 2009 +0100"
      },
      "message": "[configure] Allow for large-file support, e.g. for log files \u003e2GB\n"
    },
    {
      "commit": "3fc1eca92a7022f1c5b567505a7d86aab0d3cbd4",
      "tree": "38e59f306aab80e67321b600a17c6a9bf7d71931",
      "parents": [
        "2a71e9ce89c6f76c099dea67dddbe8da454d9de7"
      ],
      "author": {
        "name": "Tomasz Pala",
        "email": "gotar@pld-linux.org",
        "time": "Wed Jun 24 21:48:22 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 24 21:49:53 2009 +0100"
      },
      "message": "[cleanup] Add log.h includes\n"
    },
    {
      "commit": "2a71e9ce89c6f76c099dea67dddbe8da454d9de7",
      "tree": "8c53b6694e72751330fab48c02a793d67f2df24c",
      "parents": [
        "014b670e02cc1f38e8e4e786269fc1787412f9b7"
      ],
      "author": {
        "name": "Tomasz Pala",
        "email": "gotar@pld-linux.org",
        "time": "Wed Jun 24 21:36:50 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 24 21:36:50 2009 +0100"
      },
      "message": "[bgpd] Add \u0027show ip bgp view WORD neighbors IP (advertised|received)-routes\u0027\n\n* bgp_route.c: Was missing these commands.\n"
    },
    {
      "commit": "c9035ccd13078b6a5d53566979a66c1ac892b47a",
      "tree": "d144006c697fdf5aa06535cee1d89cdb9a359ec9",
      "parents": [
        "014b670e02cc1f38e8e4e786269fc1787412f9b7"
      ],
      "author": {
        "name": "Dmitry Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Wed Jun 24 20:14:30 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Wed Jun 24 20:14:30 2009 +0400"
      },
      "message": "[ospfd] discount IP header size from a new LSA pkt\n"
    },
    {
      "commit": "014b670e02cc1f38e8e4e786269fc1787412f9b7",
      "tree": "f0fa74e181d556d2d83d8db480fab097da72bafa",
      "parents": [
        "d13c3b4fcf802f904ef47ad82fdc9763fc704fdf"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jun 23 21:10:45 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jun 23 21:10:45 2009 +0400"
      },
      "message": "[bgpd] review 32-bit AS-path hotfix for 0.99.12\n\nThe patch by Chris Caputo, which was used to prepare 0.99.12\nrelease, consists of three parts:\n\n1. memory allocation fix itself\n2. fix for warnings about constant variables\n3. fix for printf format specs (%d was used instead of %u)\n\nIt was confirmed later, that:\na. a much simpler bugfix was available for memory allocation\nb. committed version of the bugfix wasn\u0027t optimal CPU-wise\n\nAt this point I consider reasonable to revert the allocation\nportion of that patch and to replace it with the shorter\nversion, which is:\n\n-#define ASN_STR_LEN (5 + 1)\n+#define ASN_STR_LEN (10 + 1)\n\nOther two parts of Mr. Caputo\u0027s patch remain intact.\n"
    },
    {
      "commit": "d13c3b4fcf802f904ef47ad82fdc9763fc704fdf",
      "tree": "b95426a542d8b931b731d8138b296c22ec9ac05e",
      "parents": [
        "ba803bd51cdf3decfc740b3d7287fe51228f78fb"
      ],
      "author": {
        "name": "Mathieu Goessens",
        "email": "gebura@poolp.org",
        "time": "Tue Jun 23 15:59:45 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 15:59:45 2009 +0100"
      },
      "message": "[zebra] linux policy routing support with ipv6\n\nQuagga support linux policy routing (ip route ... table $X) with zebra.conf\ntable $X option.  It works fine on ipv4.  On ipv6 the parameter is ignored\n(table 0 is used).\n\n* zebra/...: Pass appropriate table arg to rib_{add,delete}_ipv6\n"
    },
    {
      "commit": "ba803bd51cdf3decfc740b3d7287fe51228f78fb",
      "tree": "69396dbcdc22d42df6356265c7998bd92e503e8c",
      "parents": [
        "50aef6f3b0e36b56cfa9f3d374be0c1d25c30c45",
        "3523bea8cbe98c83e3d1bdeb60180c8e59622773"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:30:52 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:30:52 2009 +0100"
      },
      "message": "Merge remote branch \u0027origin/master\u0027\n"
    },
    {
      "commit": "3523bea8cbe98c83e3d1bdeb60180c8e59622773",
      "tree": "5e869ae87daaee6e55c0e22f7822a3c0af4bdd14",
      "parents": [
        "774eb1524c3a1e0a9567e6aff3315b4686ab3e75"
      ],
      "author": {
        "name": "Jingjing Duan",
        "email": "jingjing.duan@sun.com",
        "time": "Tue Jun 23 17:28:23 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jun 23 17:28:23 2009 +0400"
      },
      "message": "[trivia] work around ksh93 builtin name (#451)\n\nksh93 script cannot have \u0027stop\u0027 functions w/o cancelling\nexisting definition first. Fixed.\n"
    },
    {
      "commit": "50aef6f3b0e36b56cfa9f3d374be0c1d25c30c45",
      "tree": "5dce97de6229713c6c209cbb72abc1093fa1be58",
      "parents": [
        "6e79f8bba438823d84b7464a9acc1e6fc9126a27"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 23 06:06:49 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:25:20 2009 +0100"
      },
      "message": "Fix \"show ip bgp dampened-paths\" garbage output.\n\n* bgpd/bgp_damp.c: Make bgp_damp_reuse_time_vty() accept a buffer and\n  length, rather than returning a local var buffer whose contents can get\n  trounced.  Remove duplicate BGP_UPTIME_LEN define.\n* bgpd/bgp_damp.h: bgp_damp_reuse_time_vty() prototype change.\n* bgpd/bgp_route.c: Provide bgp_damp_reuse_time_vty() with a buffer and\n  length.  Remove duplicate BGP_UPTIME_LEN define.\n\nThis problem was noticed in 2005...\n\n  http://hibernia.jakma.org/~paul/patches/quagga-test.diff\n\n...but the fix didn\u0027t make it into the code.\n\nSigned-off-by: Chris Caputo \u003cccaputo@alt.net\u003e\n"
    },
    {
      "commit": "6e79f8bba438823d84b7464a9acc1e6fc9126a27",
      "tree": "5f9e004a78b0fddc59baf4e2666728837328fb52",
      "parents": [
        "2b35ae41c2c5d39801c943fa740c72fc15613141"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Tue Jun 23 05:55:57 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:23:26 2009 +0100"
      },
      "message": "Fix vtysh based \"write term\" output.\n\n* vtysh/vtysh.c: \"end\" should be printed at the bottom, not the top.\n* vtysh/vtysh_config.c: PROTOCOL_NODE was not being handled, and thus was\n  being displayed at the top of a config, rather than in its rightful\n  place near the bottom.\n\nSigned-off-by: Chris Caputo \u003cccaputo@alt.net\u003e\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": "774eb1524c3a1e0a9567e6aff3315b4686ab3e75",
      "tree": "56cb71fbc9ec910e079b7bc7bbee47fafeb2d11c",
      "parents": [
        "5bc52c76c2816a3be9a033c3e5bf4fea1908e3cd"
      ],
      "author": {
        "name": "Dmitry Tejblum",
        "email": "tejblum@yandex-team.ru",
        "time": "Tue Jun 23 17:16:32 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Tue Jun 23 17:16:32 2009 +0400"
      },
      "message": "[ospfd] cancel OSPF timer hack in nsm_change_state\n\nThis piece of code causes all Quagga routers on a broadcast link to\nsend a HELLO packet simultaneously if they see a new neighbor. It also\nresets the HELLO timer, so all the quagga routers will continue to\nsend HELLO packets simultaneously in the future. This is not good\n(especially on networks with a lot of Quagga routers connected), and\nis explicitly discouraged by the OSPF standard, RFC 2328 (chapter\n4.4.Timers).\n\nI suggest to remove the code snippet, it does not provide much benefit\nanyway.\n"
    },
    {
      "commit": "b60668d092f1778395b6c10b406059b8cbf235b8",
      "tree": "7869d81a4a8d440f8cb41ddb0e66c8279e2b9636",
      "parents": [
        "5bc52c76c2816a3be9a033c3e5bf4fea1908e3cd"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sun May 03 04:40:57 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 14:15:57 2009 +0100"
      },
      "message": "RFC 4191 Default Router Preference support for router advertisements\n\nAdds \"ipv6 nd router-preference (high|medium|low)\" and\n\"no ipv6 nd router-preference\" interface commands.\n\nFiles modified:\n\n   doc/ipv6.texi\n   zebra/interface.c\n   zebra/interface.h\n   zebra/rtadv.c\n   zebra/rtadv.h\n\nSigned-off-by: Chris Caputo \u003cccaputo@alt.net\u003e\n"
    },
    {
      "commit": "5bc52c76c2816a3be9a033c3e5bf4fea1908e3cd",
      "tree": "5a833111c34420fc8a4f7cf126c14dc1cc493a20",
      "parents": [
        "86f72dcba35f055b5344deeb5f057c2f1d9a291f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jun 22 16:11:06 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jun 22 16:11:06 2009 +0100"
      },
      "message": "[doc] remove -dither arg to imagemagick, in building PDFs\n\n* doc/Makefile.am: arguments for the \u0027convert\u0027 programme seem to have\n  changed incompatibly at some stage - just remove the problematic -dither.\n"
    },
    {
      "commit": "86f72dcba35f055b5344deeb5f057c2f1d9a291f",
      "tree": "b128af27119cf27a709423814709a5a0bde98bae",
      "parents": [
        "f7e0db80693aea7f5fd3d8d4f00e97347c8d0ba5"
      ],
      "author": {
        "name": "Takashi Sogabe",
        "email": "sogabe@iij.ad.jp",
        "time": "Mon Jun 22 13:07:02 2009 +0900"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jun 22 12:21:22 2009 +0100"
      },
      "message": "Convert ospf6d over to quagga_gettime() wrappers.\n"
    },
    {
      "commit": "f7e0db80693aea7f5fd3d8d4f00e97347c8d0ba5",
      "tree": "b920d5309513724158ea477ae2c8b33190287e53",
      "parents": [
        "c514adc61d56c3fb6fe5119a7b4b55c79a9c065d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jun 22 11:30:47 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jun 22 11:30:47 2009 +0100"
      },
      "message": "[bgpd] Fix \u0027update-source\u0027 command: It doesn\u0027t accept interface names\n\n* bgp_vty.c: BGP_UPDATE_SOURCE_STR define should only specify IP addresses,\n  the underlying mechanisms won\u0027t do anything useful with interface names.\n  Fix bug #527.\n"
    },
    {
      "commit": "c514adc61d56c3fb6fe5119a7b4b55c79a9c065d",
      "tree": "6b1ac86d90846505c6273ea1509172fb49c4944b",
      "parents": [
        "7ec573661ff046f6fa97d694de7a68dede2532fd"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Fri Jan 23 15:48:10 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:03:31 2009 +0100"
      },
      "message": "[ospfd/BSD] add missing UINT16_MAX - picked up from FreeBSD ports patch\n\nShould probably have AC_TYPE_UINT16_T in configure.ac to make it really\nclean...  and a fresh import of gnulib, the existing copy of gnulib seems to\nbe manually put some stuff in zebra.h.  I\u0027m leaving that alone for now,\nsince a fresh import will probably clean up a lot of cruft and it would be a\nduplicated effort to fix some things now.\n\nThe FreeBSD port 0.99.11_1 files/patch-ospfd-ospfd.h can probably go away\nafter this is applied.\n"
    },
    {
      "commit": "7ec573661ff046f6fa97d694de7a68dede2532fd",
      "tree": "af1fd3206ed90ad0dec7844abf18deac579af846",
      "parents": [
        "ec5e42b3c50e3a8e95963161319fa1a56466b2ae"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Wed Jan 21 22:10:40 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:03:31 2009 +0100"
      },
      "message": "[configure] fix check for GNU awk/gawk to abort ./configure if missing\n\nIt also prints what were comments explaining why gawk is necessary, and\nnot-in-PATH to help user figure out why it\u0027s not found.\n\nBuild was mysteriously failing with the old version of this check when gawk\nwasn\u0027t installed.\n"
    },
    {
      "commit": "ec5e42b3c50e3a8e95963161319fa1a56466b2ae",
      "tree": "4eba2580aca51f386ce2f879f32f8616279a1ba3",
      "parents": [
        "e84999d93afd0f727f7325431c055cc26c988c68"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Wed Jan 21 20:51:57 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:03:31 2009 +0100"
      },
      "message": "[cleanup] convert bzero() deprecated by POSIX to memset()\n\nautoscan 2.62 complains about bzero(), so a good fix\nnowadays is to just replace it.\n"
    },
    {
      "commit": "e84999d93afd0f727f7325431c055cc26c988c68",
      "tree": "68bc98d88a07c0dcdd6a0eba644515e8f6247111",
      "parents": [
        "5589ffa7dd6846a83e1d312f3dc3f2aa47e40f92"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Wed Jan 21 20:29:39 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:03:31 2009 +0100"
      },
      "message": "[configure] remove unused/broken autoconf cache variable ac_statedir\n\nIt wasn\u0027t used, and the code wasn\u0027t printing progress or the result in some\ncases.  the test uses minimal resources, so it\u0027s probably better to not\ncache so as to avoid inconsistencies if --with-prefix or directory variables\nare changed between ./configure runs.\n"
    },
    {
      "commit": "5589ffa7dd6846a83e1d312f3dc3f2aa47e40f92",
      "tree": "036a1285f5de7c5daee1caa0d3e9fddba8841630",
      "parents": [
        "7f177ee8df0437ba0d002c1226201150639dcd09"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Wed Jan 21 18:27:37 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:03:31 2009 +0100"
      },
      "message": "[configure/cleanup] fix broken autoconf cache variables\n\nFix zebra_rtread and zebra_ipforward_path.\n\nIt looks like someone tried to make this cached, but it was being ignored at\nleast on autoconf 2.6.1.  2.6.2 now gives a warning about the situation,\nhence this fix.\n\nAlthough they are just warnings, it\u0027s dangerous to leave them as-is, because\nsomeone not diligent in reading the autoconf manual might just stick _cv_ in\nthe name, with the effect that running a ./configure --config-cache would\nfail horribly, since variables are being set inside the AC_CACHE_CHECK()\nblock that would not be seen when the variable\u0027s value was read from cache.\n\nAlso added m4 quotes [] to macro arguments as autoconf manual\nsuggests.\n"
    },
    {
      "commit": "7f177ee8df0437ba0d002c1226201150639dcd09",
      "tree": "cc6e4c8226999a3f82057d4dbd83d1810d48f609",
      "parents": [
        "4bf6461e0f6cc6dcb8ca54314bc6c1865a366e70"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Wed Jan 21 16:35:51 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:03:31 2009 +0100"
      },
      "message": "[configure] remote support for AIX, it conflicts on newer autoconf\n\nAC_AIX and AC_GNU_SOURCE conflict \u003e autoconf 2.53 or so,\nbut the replacement AC_USE_SYSTEM_EXTENSIONS isn\u0027t available\nuntil later versions.  So either we narrow the supported\nautconf version range, or disable AIX (if it has any effect),\nor determin that AC_AIX doesn\u0027t do anything useful anyhow.\n"
    },
    {
      "commit": "4bf6461e0f6cc6dcb8ca54314bc6c1865a366e70",
      "tree": "209afa18250f7e02949bfcad503556818ca0aae3",
      "parents": [
        "25f45887abf320401745dd433c4e82bfd6db5d4d"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Wed Jan 21 14:15:44 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:03:30 2009 +0100"
      },
      "message": "[build] cleanup low-hanging autoreconf warnings\n\nSome uses of GNU make extensions were not necessary.  There are still some,\nbut they might exist as workarounds for older versions of autoconf that have\nsince been solved.\n\nLesson learned: implicit target rules have opposite order to pattern target\nrules.\n"
    },
    {
      "commit": "25f45887abf320401745dd433c4e82bfd6db5d4d",
      "tree": "a52835a9976899d1bef9ec7bff9eaa4972a6fa45",
      "parents": [
        "c77cffdd69bf08ed54e390a3485cbd5024836a9a"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Mon Jan 12 16:06:12 2009 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 19 15:01:16 2009 +0100"
      },
      "message": "[configure] add configure support for PCRE Posix library\n\nDebian tried unsuccessfully to build with libpcreposix.  This adds proper\nsupport to autoconf/configure.ac for it.\n\nBased on the patch by C.J.  Adams-Collier in bug #483.\n\nbgpd/bgp_{regex,routemap}.h: Pull in PCRE POSIX header if available.\n"
    },
    {
      "commit": "c77cffdd69bf08ed54e390a3485cbd5024836a9a",
      "tree": "42225904923a4b3457edd13a0eb84f0ea8581441",
      "parents": [
        "c546afaed229106c2fcb54b57906414b9503dcc9"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Sun Dec 28 12:57:42 2008 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 22:11:41 2009 +0100"
      },
      "message": "[daemons/cleanup] Remove disabled log_mode argument support.\n\n* */*main.c: Seems that the actual code was removed previously, but the\n  argument processing code remained.\n"
    },
    {
      "commit": "c546afaed229106c2fcb54b57906414b9503dcc9",
      "tree": "7eb70bd1b8ee9a769cfb7a265d4073b03e5ecbe0",
      "parents": [
        "6511cab26728453d1b5e572bbbc3775f70c10c0e"
      ],
      "author": {
        "name": "Jeremy Jackson",
        "email": "jerj@coplanar.net",
        "time": "Sun Dec 28 12:40:06 2008 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 22:11:32 2009 +0100"
      },
      "message": "[doc] Removes documentation of nonexistant option.\n\nExpansion of Ubuntu quagga-0.99.11-1 30_doc__ospfd.8__nolog.dpatch\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": "c4376c9d28f1282f502ed5279ee80ec5c4cb810d",
      "tree": "162d6a64033db3702a82a9470549570f1fac4080",
      "parents": [
        "8f5abac1c3f5ad18561cad560bd42b50d2419d94"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu May 28 15:29:10 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:31 2009 +0100"
      },
      "message": "[configure] Detect support for monotonic clock\n\nQuagga has code to support monotonic clock to avoid issues where\ntime of day changes. The support was incomplete since it was not being\ndetected by autoconf.\n"
    },
    {
      "commit": "8f5abac1c3f5ad18561cad560bd42b50d2419d94",
      "tree": "5d126bdeed0e115b53c4cd23a992a5355797d663",
      "parents": [
        "730394d9a33dceb0699c5268afd1049aa225c5c7"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:16:34 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:31 2009 +0100"
      },
      "message": "[BGP/cleanup] make message list in bgp_open const\n"
    },
    {
      "commit": "730394d9a33dceb0699c5268afd1049aa225c5c7",
      "tree": "e4dae4fb06d63bf3008154303d32e70eb8c0a88c",
      "parents": [
        "e9dc9f247a668ece1b983cc964fec852c737bedd"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:17:09 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:31 2009 +0100"
      },
      "message": "[BGP/cleanup] make community hash table static\n"
    },
    {
      "commit": "e9dc9f247a668ece1b983cc964fec852c737bedd",
      "tree": "e8b865d140f9942655cd6d1190a87f3bade807ca",
      "parents": [
        "ffa4e2c4712ddcb5085971aaf001f030723ee307"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:19:31 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:30 2009 +0100"
      },
      "message": "[BGP/cleanup] make some damp function static\n"
    },
    {
      "commit": "ffa4e2c4712ddcb5085971aaf001f030723ee307",
      "tree": "c678f391c427079ec667413f63bc26d5b422c4d7",
      "parents": [
        "372b3c70a090359fe401dbb5e7c34ff8ae09f757"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:28:11 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:30 2009 +0100"
      },
      "message": "[BGP/cleanup] make ecommunity variables/functions local\n"
    }
  ],
  "next": "372b3c70a090359fe401dbb5e7c34ff8ae09f757"
}
