)]}'
{
  "log": [
    {
      "commit": "0edba8b6ad9c83fa0a3cc58765fe9f123f4109ac",
      "tree": "52e0410279dc9b20ba0bc8453e0e0c1f72e081cb",
      "parents": [
        "983525e8b560fc44d2214ca3f6d72af809b6ebd9"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Oct 22 11:35:17 2015 +0300"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:18 2015 -0500"
      },
      "message": "bgpd: check rtt later after the real peer is known\n\nOPEN message handler moves the connection from the temporary\n\"struct peer\" (used to accept it) to the real \"struct peer\" based\non the configuration. RTT needs to be updated only to the real\nstruct peer, and this patch moves the RTT query to point where\nrealpeer is known.\n\nFixes: ef757700d0 \"bgpd: allow using rtt in route-map\u0027s set metric\"\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "bf99b420a57b7c5bf44c8ab528d0a2e416b66d81",
      "tree": "1e44abc69995f5210cc7ddb1cfb8f6f29406db87",
      "parents": [
        "c8af680df5beb613fd50c265773a6beb0f1768c9"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Oct 21 10:00:47 2015 -0400"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:18 2015 -0500"
      },
      "message": "bgpd: Fix bgp_btoa to compile\n\nbgp_btoa was abandoned at some point in time in the past.\nThis commit gets it to compile and to be added to /usr/bin.\n\nAt this point in time no work has done for \u0027correctness\u0027 of execution\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "363c903435b154e989f0544d12d4ac8d50174c0b",
      "tree": "3efcda7bc9e934ea17f2787a9f0ea9d59738ebea",
      "parents": [
        "92e62e06ba9e03c4603538b3138298b274e3c167"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:54 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:10 2015 -0500"
      },
      "message": "bgpd: crash from not NULLing freed pointers\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n\nThere was a crash from not NULLing out peer-\u003ehostname but I cleaned\nup a bunch of other suspect ones as well.\n"
    },
    {
      "commit": "f89b09be92bed03b1e5add55dc14ef92e94c52e1",
      "tree": "a9662e2a506a8377b53864d2ea99c5c71978e5e0",
      "parents": [
        "8e644534b4d20dde07306700be0503d09d30a16e"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:52 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:11:01 2015 -0500"
      },
      "message": "bgpd: Lower BGP\u0027s default keepalive/holdtime to 3s/9s\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "8e644534b4d20dde07306700be0503d09d30a16e",
      "tree": "ad52e0dd0c99f32f6d04f32eaee017794f1b711d",
      "parents": [
        "c37b9bccdcc1266f52e50fa3e5a8dc81086c3fe7"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:51 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:58 2015 -0500"
      },
      "message": "bgpd: Remove BGP_ERROR_START_TIMER, it was no longer used\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "c37b9bccdcc1266f52e50fa3e5a8dc81086c3fe7",
      "tree": "e1aa8b92d71d434c4b4ca45eebe2089028ce7098",
      "parents": [
        "57fcfda56ad091a6850e190f5788361bf921699e"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:50 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:53 2015 -0500"
      },
      "message": "bgpd: Enable \"bgp log-neighbor-changes\" by default\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "57fcfda56ad091a6850e190f5788361bf921699e",
      "tree": "ff31b969ae0565268ff15b71b6e0083dc6d28873",
      "parents": [
        "3ff77fe62ecdabc01f576de8c4e5d78d16e3e436"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:49 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:45 2015 -0500"
      },
      "message": "bgpd: Do not allow a timers connect of 0, this can hammer the CPU\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "3ff77fe62ecdabc01f576de8c4e5d78d16e3e436",
      "tree": "597e8e707b0ce9d1f919741f868d15a560548527",
      "parents": [
        "f822ad4326e8b279e028b8b2ca2282475b5e27de"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:48 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:42 2015 -0500"
      },
      "message": "bgpd: Remove BGP\u0027s asorig timer, it is no longer used\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "f822ad4326e8b279e028b8b2ca2282475b5e27de",
      "tree": "c8ffb4dd4af36d59d8e0f8901f5b11f81844c3c1",
      "parents": [
        "e56aab94a615a2b676473fbd09145b444a348029"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Wed Oct 21 06:42:47 2015 -0700"
      },
      "committer": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Dec 08 14:10:29 2015 -0500"
      },
      "message": "bgpd: Lower the default \u0027timers connect\u0027 in BGP to 10 seconds\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by:   Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "283596fd6d49a5b2861a6923db9a88628ef0eca4",
      "tree": "1b461a1fea8840efaafd1250f729831be91fea9f",
      "parents": [
        "be62b17c736ea06181f2788e3011066830555610",
        "fc1c114aab24fe47bc6a1976c1c602d507fa4e69"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Oct 28 14:25:06 2015 +0000"
      },
      "message": "Merge \u0027patch-tracking/4/proposed/netdef-solaris\u0027 into accepted\n"
    },
    {
      "commit": "056f3760cd311faf088d6f5fe06498960788c8c7",
      "tree": "6098f68402cefc8dbf0b832636390c453802a245",
      "parents": [
        "5c1791f28e2e831e4e9b92c3c2f7d8ed832cb968"
      ],
      "author": {
        "name": "Lou Berger",
        "email": "lberger@labn.net",
        "time": "Wed Apr 10 12:30:04 2013 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 11:00:29 2015 +0000"
      },
      "message": "bgpd, lib: memory cleanups for valgrind, plus debug changes\n\nDescription:\n    We use valgrind memcheck quite a bit to spot leaks in\n    our work with bgpd. In order to eliminate false positives,\n    we added code in the exit path to release the remaining\n    allocated memory.\n\n    Bgpd startup log message now includes pid.\n\nSome little tweaks by Paul Jakma \u003cpaul.jakma@hpe.com\u003e:\n\n* bgp_mplsvpn.c: (str2prefix_rd) do the cleanup in common code at the end\n  and goto it.\n"
    },
    {
      "commit": "774914f4223532256051bd6dd61cac20e8f9649f",
      "tree": "c6cecfa4c6c1eaff07638d2903e195571baa39b0",
      "parents": [
        "eeef0db2e9260fe76acb328a339025c432eb7c22"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Oct 14 08:50:39 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:22 2015 +0000"
      },
      "message": "bgpd: fix using of two pointers for struct thread_master *\n\nbgp is using both bm-\u003emaster and master pointers interchangebly\nfor thread manipulation.  Since they are the same thing consolidate\nto one pointer.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "26a18eb223d26011ac4f1d608f6775ed7ebf8efb",
      "tree": "116460f0d57e4e0e7f2cfa20ea6a9b30be19a16f",
      "parents": [
        "d8aa4beab72cdd2c2d78f9e624fd4b704eec488f"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Sep 29 09:25:10 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:21 2015 +0000"
      },
      "message": "quagga: Additional centos 6 -enable-werror fixes\n\nThis commit fixes these warnings:\n\n1) bgpd/bgp_nexthop.c - dereferencing pointer \u0027X\u0027 does break strict-aliasing rules\n2) pimd/pim_igmp_join.c - dereferencing pointer \u0027X\u0027 does break strict-aliasing rules\n3) ripd/ripd.c - \u0027ifaddr.prefixlen\u0027 may be used uninitialized in this function\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7125293d65d73a451ec203c8c1630c236171f5a3",
      "tree": "f9d118c9a8f8374d69fb9c75c87531a2ca478fb2",
      "parents": [
        "fd1c1a133af47ae5533a5ed41b73ff62e7aa1058"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Sep 24 09:25:19 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:21 2015 +0000"
      },
      "message": "lib: zclient.c remove extern struct thread_master *\n\nzclient.c depended upon link time inclusion of a\nextern struct thread_master *master.  This is a violation of the\nnamespace of the calling daemon.  If a library needs the pointer\npass it in and save it for future use.\n\nThis code change also makes the zclient code consistent with\nthe other lib functions that need to schedule work on your behalf\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "5181a0296687a6004dd00c7c0874886c9ff0bf60",
      "tree": "f7c4fb6596af18dabc52513e17febf2e2e213c22",
      "parents": [
        "6d9362274e8ba2d57ffe17aa735eb941ac3d5fbc"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Sep 15 03:00:09 2015 -0700"
      },
      "committer": {
        "name": "Martin Winter",
        "email": "mwinter@opensourcerouting.org",
        "time": "Fri Oct 16 23:50:46 2015 -0700"
      },
      "message": "*: fix in_addr initialisers\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d3ac733b41b69826ac4b5a86b881f33f3d383941",
      "tree": "fc994220633cbc366d1d15fc8ea2619250efe582",
      "parents": [
        "1994dc81458d646120659b543ad7ffc023cd8579"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Mon Aug 24 10:19:10 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:46 2015 +0100"
      },
      "message": "bgpd: \u0027set comm-list delete\u0027 stops as soon as it hits a community-list entry with a deny\n\n\u0027set comm-list delete\u0027 stops as soon as it hits a community-list entry with\na deny\n\nReviewed By: sharpd@cumulusnetworks.com\nTesting Done:\n\n\u0027set comm-list FOO delete\u0027 stops evaluating the community-list as soon as\nwe hit\nthe first \"delete\" statement. This makes it impossible to use\ncommunity-lists\nwhere you deny some subset of communities to delete and then permit all of\nthe\nothers.\n\nThis patch changes the behavior so that we no longer exit the\ncommunity-list at\nthe first delete statement. Here is our baseline, we are receiving multiple\ncommunities from 10.1.1.2 for the 10.1.3.0/24 prefix.\n\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3 20:1 20:2 20:3 99:1\n    Last update: Wed Mar 4 13:50:36 2015\n\nqct-ly6-04#\n\nWe apply the following FOO route-map inbound to this peer and soft clear\nthe peer\n!\nip community-list expanded BAD_COMMS permit 99:.*\nip community-list expanded BAD_COMMS deny 1:.*\nip community-list expanded BAD_COMMS permit 20.*\n!\nroute-map FOO permit 10\nset comm-list BAD_COMMS delete\n!\nrouter bgp 10\nneighbor 10.1.1.2 route-map FOO in\n!\n\nqct-ly6-04# clear ip bgp * soft in\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3\n    Last update: Wed Mar 4 13:51:12 2015\n\nqct-ly6-04#\nqct-ly6-04#\n\nWe deleted all communities flagged as \"permit\" by the BAD_COMMS\ncommunity-list\nwhile leaving the ones matched by \"deny 1:.*\" alone.\n\n #endif /* _QUAGGA_BGP_COMMUNITY_H */\n\n\u0027set comm-list delete\u0027 stops as soon as it hits a community-list entry with a deny\n\nTicket: CM-3513\nReviewed By: sharpd@cumulusnetworks.com\nTesting Done:\n\n\u0027set comm-list FOO delete\u0027 stops evaluating the community-list as soon as we hit\nthe first \"delete\" statement. This makes it impossible to use community-lists\nwhere you deny some subset of communities to delete and then permit all of the\nothers.\n\nThis patch changes the behavior so that we no longer exit the community-list at\nthe first delete statement. Here is our baseline, we are receiving multiple\ncommunities from 10.1.1.2 for the 10.1.3.0/24 prefix.\n\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3 20:1 20:2 20:3 99:1\n    Last update: Wed Mar 4 13:50:36 2015\n\nqct-ly6-04#\n\nWe apply the following FOO route-map inbound to this peer and soft clear the peer\n!\nip community-list expanded BAD_COMMS permit 99:.*\nip community-list expanded BAD_COMMS deny 1:.*\nip community-list expanded BAD_COMMS permit 20.*\n!\nroute-map FOO permit 10\nset comm-list BAD_COMMS delete\n!\nrouter bgp 10\nneighbor 10.1.1.2 route-map FOO in\n!\n\nqct-ly6-04# clear ip bgp * soft in\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3\n    Last update: Wed Mar 4 13:51:12 2015\n\nqct-ly6-04#\nqct-ly6-04#\n\nWe deleted all communities flagged as \"permit\" by the BAD_COMMS community-list\nwhile leaving the ones matched by \"deny 1:.*\" alone.\n"
    },
    {
      "commit": "1994dc81458d646120659b543ad7ffc023cd8579",
      "tree": "ee6179d70112a20038568a95dfa7e526dd7de8c9",
      "parents": [
        "c8394ace7081ef0e71f3d162067c83c2629fc088"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Thu Sep 17 10:15:59 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:46 2015 +0100"
      },
      "message": "bgpd: If route-map does not exist DENY for redistribute statements\n\nUpon usage of a route-map statement in bgp, if the route-map does not exist\nit turns into a implicit ALLOW, this causes issues in a wide variety\nof scenarios.\n\nWithout this fix:\n!\nrouter bgp 100\n bgp router-id 10.0.2.15\n redistribute static route-map FOOEY\n!\nip route 33.33.33.33/32 eth1\nip route 44.44.44.44/32 eth1\n!\n\nNow look at show ip bgp:\nshow ip bgp:\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003e 33.33.33.33/32   0.0.0.0                  0         32768 ?\n*\u003e 44.44.44.44/32   0.0.0.0                  0         32768 ?\n\nWith this fix:\n\nshow ip bgp:\n   Network          Next Hop            Metric LocPrf Weight Path\n\nSigned-off-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\nReviewed-by: Donald Sharp \u003csharpd@cumulusnetworks.com\n"
    },
    {
      "commit": "a9d4cb33faa6af622240190a80f41c4672374925",
      "tree": "9590bb1715d7418b50a742a3c83363d4e4b67755",
      "parents": [
        "f733280419f18b1a0e3b06ec3681781689d57053"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Sep 17 10:54:25 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "lib/zclient: Consolidate error reporting for zclient_read_header\n\nAll functions that call zclient_read_header immediately turn around\nand check to ensure that the version and marker fields are correct\nMove this code into zclient_read_header\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "b3eeabee657df14509ce50d5f64262b672e87d62",
      "tree": "81b2a1382e84f4c0754c6c3814222b90106f04b5",
      "parents": [
        "104576dcafe356985326b2950bfc50962702b4fb"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Sep 16 13:17:56 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "bgpd: Fix \u0027struct peer\u0027 memory leaks\n\npeer_delete has been written to handle the peer-\u003egroup pointer and\nto remove the peer from the peer group if it exists upon deletion being\ncalled.  Shutdown/deletion Code was intentionally setting the peer-group\nto NULL prior to calling peer_delete.  This leaked the memory associated\nwith the peer-\u003egroup because of refcnt accounting.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "104576dcafe356985326b2950bfc50962702b4fb",
      "tree": "6aac83534a8bfb991dfa5fd35a83dec044072d20",
      "parents": [
        "58a83f2f5dc24da3194bfa8255499029315e8649"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Sep 16 13:17:55 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "bgpd: Add some peer_lock/unlock debug code\n\nFinding memory leaks associated with the peer data structure\nis incredibly hard, add some code to allow you to find this\nleaked code when needed.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "58a83f2f5dc24da3194bfa8255499029315e8649",
      "tree": "7dc5143fac70d71814a448ed3116e389d17fe8fa",
      "parents": [
        "79969960aae4adbae1eac6caebc289fe09ddc1d6"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Sep 11 10:11:42 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Warn user that bgp is setting maximum-paths larger than MULTIPATH_NUM\n\nIn cases where a distribution has compiled zebra with a MULTIPATH_NUM\nthat is less than what the user is setting the maximum-paths in bgp,\nwarn them that some of the nexthops will not make it into zebra and\nby extension the kernel for routing.  The command is still accepted.\n\ndell-s6000-02(config)# router bgp 100\ndell-s6000-02(config-router)# maximum-paths 3\n% Warning: maximum-paths set to 3 is greater than 2 that zebra is compiled to support\ndell-s6000-02(config-router)# maximum-paths ibgp 44\n% Warning: maximum-paths set to 44 is greater than 2 that zebra is compiled to support\ndell-s6000-02(config-router)#\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "79969960aae4adbae1eac6caebc289fe09ddc1d6",
      "tree": "a915a98d648f6a8ff0aab2754e46e2398be23d15",
      "parents": [
        "a752c3be8c2436941311788f2e7b644a2af0fd65"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Aug 19 21:27:24 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Fix small memory leak in str2prefix_rd\n\nstr2prefix_rd has a memory leak.  This commit fixes that issue\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "a752c3be8c2436941311788f2e7b644a2af0fd65",
      "tree": "78637b4cbf2f1dbb98d0d30207ad8c252493496a",
      "parents": [
        "e2a9258c16bce1b3797efb9be354d20d68236194"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Tue Aug 18 08:48:53 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Remove unnecessary stream_dup calls\n\nBGP packet handling creates a stream to handle data for an outgoing packet.\nIn some cases the code would create a new stream, add data, then duplicate\nthe stream and then free the original stream.  This change removes\nthe unnecessary duplication, which entails a malloc and memcpy.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "e2a9258c16bce1b3797efb9be354d20d68236194",
      "tree": "f08790964b068afe0724518774dfe315a75200ca",
      "parents": [
        "57cd5e7a2623258e1a095d63e0faaad2cddf61e8"
      ],
      "author": {
        "name": "Denil Vira",
        "email": "denil@cumulusnetworks.com",
        "time": "Tue Aug 11 13:34:59 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Fix memory leak in bgpd/bgp_route.c\n\nIn function bgp_aggregate_add, variables \u0027aspath\u0027 and \u0027community\u0027\nare malloced but not guaranteed to be freed before the function\nreturns.\n\nSigned-off-by: Denil Vira \u003cdenil@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "57cd5e7a2623258e1a095d63e0faaad2cddf61e8",
      "tree": "ef9652852d52217f032f69708a33de4dce384010",
      "parents": [
        "7053d8176ce502aabe39bf167f01354654bde5df"
      ],
      "author": {
        "name": "Denil Vira",
        "email": "denil@cumulusnetworks.com",
        "time": "Mon Aug 10 12:46:14 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Variable reuse in bgpd/bgpd.c\n\nIn bgp_delete(), variables \u0027node\u0027 and \u0027next\u0027 are overwritten in\nthe nested for loop.\n\nSigned-off-by: Denil Vira \u003cdenil@cumulusnetworks.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7053d8176ce502aabe39bf167f01354654bde5df",
      "tree": "95c7398ecd35ea875111cf896a78ed5038b62755",
      "parents": [
        "3921cc54445417aa1ca22668063701a626e93098"
      ],
      "author": {
        "name": "Denil Vira",
        "email": "denil@cumulusnetworks.com",
        "time": "Thu Jul 23 06:52:18 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Fix useless call in bgpd/bgp_mplsvpn.c\n\nCoverity scan ID : 1302528. Calling \"decode_label(pnt)\" is only useful for its return value, which is\nignored. Removed the call.\n\nSigned-off-by: Denil Vira \u003cdenil@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "3921cc54445417aa1ca22668063701a626e93098",
      "tree": "700432e3eb6802c56ae3fd823505c04ef659dad3",
      "parents": [
        "2820a01eed1c616d490ddbfd17793c19597459d1"
      ],
      "author": {
        "name": "Balaji",
        "email": "balajig81@gmail.com",
        "time": "Sat May 16 23:12:17 2015 +0530"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:43 2015 +0100"
      },
      "message": "bgpd: Addition of \"show ip bgp dampening\" command tree\n\nThis patch addresses David\u0027s comments and contains:\n\n1.Addition of show ip bgp dampening command tree\n2.Addition of show ip bgp dampening parameters to display BGP dampening\n  parameters.\n\nSigned-off-by: Balaji.G \u003cbalajig81@gmail.com\u003e\n"
    },
    {
      "commit": "2820a01eed1c616d490ddbfd17793c19597459d1",
      "tree": "6a0e418ca25166bd2edcc23a070b4c23d6f99a81",
      "parents": [
        "782fb0770080d0e2970fc63af8645e82543aa4d0"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 24 15:27:21 2015 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "bgpd: Make bgp_info_cmp robust to paths that do not have su_remote info\n\nMy original su_remote \u003d\u003d NULL check is not correct. It seems that\n\n* bgp_route.c: (bgp_info_cmp) Some bgp_info is compared with su_remote\u003dNULL\n  and it\u0027s supposed to be perfectly legal.  E.g.  configured subnet announces\n  (\"network a.b.c.d/n\"). Ensure bgp_info_cmp is robust if such a path gets\n  as far as the neighbour address comparison step.\n"
    },
    {
      "commit": "782fb0770080d0e2970fc63af8645e82543aa4d0",
      "tree": "ee4c4f3d0f30fc694865c57484d8b453f2775bd9",
      "parents": [
        "13c2a3db503fde67f647fa58fd4e1077517ebb5c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Sep 15 16:17:22 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "bgpd: Compile fix for clearing-completion FSM fix, using workqueue helper.\n"
    },
    {
      "commit": "7ef4221c3f85121edb68a6a54ebd6bb167408e47",
      "tree": "fc347b5fa1935a8ef801c3af4b75167af0716934",
      "parents": [
        "234e5c8d5a35339fb319affb952581bf5abb48a7"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Mon Mar 30 06:32:52 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "bgpd: Fix race in clearing completion\n\nWhen a peer that is Established goes down, it is moved into the Clearing\nstate to facilitate clearing of the routes received from the peer - remove\nfrom the RIB, reselect best path, update/delete from Zebra and to other\npeers etc. At the end of this, a Clearing_Completed event is generated to\nthe FSM which will allow the peer to move out of Clearing to Idle.\n\nThe issue in the code is that there is a possibility of multiple Clearing\nCompleted events being generated for a peer, one per AFI/SAFI. Upon the\nfirst such event, the peer would move to Idle. If other events happened\n(e.g., new connection got established) before the last Clearing_Completed\nevent is received, bad things can happen.\n\nFix to ensure only one Clearing_Completed event is generated.\n\nSigned-off-by: Vivek Venkataraman \u003cvivek@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "234e5c8d5a35339fb319affb952581bf5abb48a7",
      "tree": "1d7c03380a8a9a34e71f52e841bed2a81bece36b",
      "parents": [
        "bd4b7f1559ab5cb52bbe9dc2db9e50a032ccdbb7"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Sun Feb 01 00:56:12 2015 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "bgpd: Only use routes from Established peers for best path selection\n\nEnsure that routes from a peer are not considered for best path\ncomparison if the peer is not in an Established state. There can\nbe a window between a peer being deleted and the background\nthread that actually clears the routes (marks them as \"removed\")\nruns during which best path may run. If this path selection\ncompared two prefixes all the way down to peer IP addresses and\none of these two peers had just been deleted, that peer would\nnot have its sockunion structures, especially su_remote, resulting\nin a BGPD exception.\n\nSigned-off-by: Vivek Venkatraman \u003cvivek@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "bd4b7f1559ab5cb52bbe9dc2db9e50a032ccdbb7",
      "tree": "158439c616739d81afa59a1b1954cc5ef9e29c02",
      "parents": [
        "b6404390a713144252b62f49a328315d1952c6d8"
      ],
      "author": {
        "name": "vivek",
        "email": "vivek@cumulusnetworks.com",
        "time": "Tue Sep 30 15:54:45 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "bgpd: Ignore stale entry candidates during bestpath selection.\n\nDuring best path selection, if one of the candidates is a stale entry, do not\nperform the neighbor address comparison as that information is invalid for\nthe stale entry. Attempting to perform the comparison results in a bgpd\nexception.\n\nSigned-off-by: Vivek Venkataraman \u003cvivek@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "794c4735f81289d9fc603b5fd5e4a5d39dbb5ca5",
      "tree": "b81f6a549fe0916bdf25b5a5a88745c34a4e816d",
      "parents": [
        "a29c8a23a35b3f94c6aea5b3b7578b5dbf81ad71"
      ],
      "author": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Sep 16 09:42:36 2015 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "bgpd/pimd: fix zAPI parsing\n\nCommit c99f3481a598 has changed the API. Now, the vrfid has been added in\nthe header, thus we must read it before parsing the rest of the message.\n\nTo ease code maintenance, let\u0027s add a new function to read a zAPI header.\n\nFixes: c99f3481a598 (\"*: add VRF ID in the API message header\")\nReported-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "52c0bc739b1184621525e64720b944268d6b0eeb",
      "tree": "a556a51ef56f6ccaa63c942c9880c684fc4b3bae",
      "parents": [
        "c8ee940cc695cbcf9c0156ee6f72730f1fff9814"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Thu Aug 20 21:30:17 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 03 16:44:48 2015 +0100"
      },
      "message": "build: Remove the old PIC/PIE patch, let libtool sort it out\n\n* Remove the old change from \u002708 to add in PIE arguments at automake level.\n  Versions of libtool since then know how to deal with -fpie and do the right\n  thing according to whether its building shared or executable objects.\n  So just pass \u0027-fpie\u0027 as CFLAG and let libtool do its thing.\n"
    },
    {
      "commit": "f31bab4fbf367a4417784ba9873e524d42242036",
      "tree": "c624feca43613e738e4756ad6b3b555c1402e465",
      "parents": [
        "771626860adfc30c00f70d993ccb8f4d7c0c0c63"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Jun 19 19:26:19 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 14:39:26 2015 +0100"
      },
      "message": "Quagga: Fix code to use srandom/random\n\nQuagga was using a mix of srand/rand and srandom/random.\nConsolidate to use srandom/random which are the POSIX\nversions of random number generators\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "84c3840c7157438b5cb2e324d184ca08ac07fb41",
      "tree": "1022dc746e3c2f6498ebc94a632ce3f4f2f0c32e",
      "parents": [
        "55cfa2f190620f7c711944637659bc208970324d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue May 26 15:19:38 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 12:31:53 2015 +0100"
      },
      "message": "bgpd: peer_uptime overflows after 1 year\n\n* bgpd.c: (peer_uptime) Wraps after 1 year, and doesn\u0027t indicate years.\n  Fix. Assume a year is 365 days, for an easy life.\n\nFixes: Bug #836\nReported-by: Rolf Hanßen\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "c99f3481a598e9cadd1de96714f6b5df9ad85c4a",
      "tree": "aac6df566f28c13fce5c9f02275f159fab73a24d",
      "parents": [
        "758fb8f99a7bfac3d31c419fd1a5694fc5f33f6a"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Oct 16 09:52:36 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 10:24:12 2015 +0200"
      },
      "message": "*: add VRF ID in the API message header\n\nThe API messages are used by zebra to exchange the interfaces, addresses,\nroutes and router-id information with its clients. To distinguish which\nVRF the information belongs to, a new field \"VRF ID\" is added in the\nmessage header. And hence the message version is increased to 3.\n\n* The new field \"VRF ID\" in the message header:\n\n    Length    (2 bytes)\n    Marker    (1 byte)\n    Version   (1 byte)\n    VRF ID    (2 bytes, newly added)\n    Command   (2 bytes)\n\n  - Client side:\n\n    - zclient_create_header() adds the VRF ID in the message header.\n    - zclient_read() extracts and validates the VRF ID from the header,\n      and passes the VRF ID to the callback functions registered to\n      the API messages.\n    - All relative functions are appended with a new parameter \"vrf_id\",\n      including all the callback functions.\n    - \"vrf_id\" is also added to \"struct zapi_ipv4\" and \"struct zapi_ipv6\".\n      Clients need to correctly set the VRF ID when using the API\n      functions zapi_ipv4_route() and zapi_ipv6_route().\n    - Till now all messages sent from a client have the default VRF ID\n      \"0\" in the header.\n    - The HELLO message is special, which is used as the heart-beat of\n      a client, and has no relation with VRF. The VRF ID in the HELLO\n      message header will always be 0 and ignored by zebra.\n\n  - Zebra side:\n\n    - zserv_create_header() adds the VRF ID in the message header.\n    - zebra_client_read() extracts and validates the VRF ID from the\n      header, and passes the VRF ID to the functions which process\n      the received messages.\n    - All relative functions are appended with a new parameter \"vrf_id\".\n\n* Suppress the messages in a VRF which a client does not care:\n\n  Some clients may not care about the information in the VRF X, and\n  zebra should not send the messages in the VRF X to those clients.\n\n  Extra flags are used to indicate which VRF is registered by a client,\n  and a new message ZEBRA_VRF_UNREGISTER is introduced to let a client\n  can unregister a VRF when it does not need any information in that\n  VRF.\n\n  A client sends any message other than ZEBRA_VRF_UNREGISTER in a VRF\n  will automatically register to that VRF.\n\n  - lib/vrf:\n\n    A new utility \"VRF bit-map\" is provided to manage the flags for\n    VRFs, one bit per VRF ID.\n\n    - Use vrf_bitmap_init()/vrf_bitmap_free() to initialize/free a\n      bit-map;\n    - Use vrf_bitmap_set()/vrf_bitmap_unset() to set/unset a flag\n      in the given bit-map, corresponding to the given VRF ID;\n    - Use vrf_bitmap_check() to test whether the flag, in the given\n      bit-map and for the given VRF ID, is set.\n\n  - Client side:\n\n    - In \"struct zclient\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          default_information\n      These flags are extended for each VRF, and controlled by the\n      clients themselves (or with the help of zclient_redistribute()\n      and zclient_redistribute_default()).\n\n  - Zebra side:\n\n    - In \"struct zserv\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          redist_default\n          ifinfo\n          ridinfo\n\n      These flags are extended for each VRF, as the VRF registration\n      flags. They are maintained on receiving a ZEBRA_XXX_ADD or\n      ZEBRA_XXX_DELETE message.\n\n      When sending an interface/address/route/router-id message in\n      a VRF to a client, if the corresponding VRF registration flag\n      is not set, this message will not be dropped by zebra.\n\n    - A new function zread_vrf_unregister() is introduced to process\n      the new command ZEBRA_VRF_UNREGISTER. All the VRF registration\n      flags are cleared for the requested VRF.\n\n  Those clients, who support only the default VRF, will never receive\n  a message in a non-default VRF, thanks to the filter in zebra.\n\n* New callback for the event of successful connection to zebra:\n\n  - zclient_start() is splitted, keeping only the code of connecting\n    to zebra.\n\n  - Now zclient_init()\u003d\u003ezclient_connect()\u003d\u003ezclient_start() operations\n    are purely dealing with the connection to zbera.\n\n  - Once zebra is successfully connected, at the end of zclient_start(),\n    a new callback is used to inform the client about connection.\n\n  - Till now, in the callback of connect-to-zebra event, all clients\n    send messages to zebra to request the router-id/interface/routes\n    information in the default VRF.\n\n    Of corse in future the client can do anything it wants in this\n    callback. For example, it may send requests for both default VRF\n    and some non-default VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "126215c1238eb42cc92d23aefbe1fac3b204438f",
      "tree": "22910b50f39003e297efc6236711581cbf3b2ada",
      "parents": [
        "2fc97f6335dd5d7df2c285b363c6ef56bb98dcf8"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:58 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "*: call if_init()/if_terminate() from vrf_init()/vrf_terminate()\n\nLater, an interface will belong to a specific VRF, and the interface\ninitialization will be a part of the VRF initialization. So now call\nif_init() from vrf_init(), and if_terminate() from vrf_terminate().\n\nDaemons have the according changes:\n- if if_init() was called or \"iflist\" was initialized, now call\n  vrf_init() instead;\n- if if_terminate() was called or \"iflist\" was destroyed, now call\n  vrf_terminate() instead.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "395828eea809e8b2b8c5824d3639cefedd7aa9f0",
      "tree": "61341d0667a67d8645455fad7029cc916eb9a3e2",
      "parents": [
        "be6335d682c5ee1b6930345193eda875705fbab2"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:55 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "ospf6d, bgpd: avoid calling if_nametoindex\n\nAs the comments in if.h, it is better to call ifname2ifindex()\ninstead of if_nametoindex().\n\nAnd ifname2ifindex() can work for VRF by appending a parameter\nwhile if_nametoindex() can not.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c1c69e43cda64122b599746df4d1c6c5d8b52e37",
      "tree": "cccc035647931b79657438087f92bc6a387aae96",
      "parents": [
        "80c9354835bb924983d12b0efad957e78f219287"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri May 22 13:40:57 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri May 29 07:30:44 2015 +0200"
      },
      "message": "lib: allow caller to provide prefix storage in sockunion2hostprefix\n\nAvoids a dynamic allocation which is usually freed immediate afterwards.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ef757700d0fd51dc0b46df9d3631208919f9b779",
      "tree": "722b3898fc1793cda897fa685df7128df4dfbc56",
      "parents": [
        "6b2672f3c9493aef3495192e113f95a7db4b65bc"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:43:04 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 20 18:52:22 2015 +0200"
      },
      "message": "bgpd: allow using rtt in route-map\u0027s set metric\n\nUseful when the BGP neighbors are over tunnels that have large\ndifferences in geographic distances and RTTs. Especially useful\nfor DMVPN setups to allow preferring closes hub.\n\nThe parameter is added as new alias command as otherwise it seems\nthe command parser is not able to match it properly (it seems\nmerging is done for the various \u0027set metric\u0027 route-map objects in\ndifferent routing engines). For same reason also they are listed\nas three separate options: optional +/- seems not possibly easily.\n\nRelated research papers:\nhttp://www.pps.univ-paris-diderot.fr/~jch/research/delay-based.pdf\nhttp://arxiv.org/pdf/1309.0632.pdf\n\nPaper on similar extension to Babel:\nhttp://www.pps.univ-paris-diderot.fr/~jch/research/rapport-jonglez-2013.pdf\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "38f22ab07c8e1f0f12e23c2e2d0a3e1f71bef695",
      "tree": "fdb9d52bea1f2105885182aef92691a5bf01e47a",
      "parents": [
        "5460baef7f0014f2d0c3459aa9c4180da19d6850"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:43:02 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 20 18:50:21 2015 +0200"
      },
      "message": "bgpd: refactor route-map objects modifying integer values\n\nUse common code to parse, validate and adjust the route-map\nobjects that contain a simple integer value. This also allows\ncompiling the add/sub format metric object.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c9c06d0d8cbc766374c43328e91b7a87f93e9c62",
      "tree": "7079c5e07ab0941949373d901bbd672066b9e4c6",
      "parents": [
        "e66cbd10d52a79fd61acab9d615683eebdbf1df5"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Apr 13 10:21:35 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 15:07:45 2015 +0200"
      },
      "message": "lib: straighten out ORF prefix list support\n\nBGP ORF prefix lists are in a separate namespace; this was previously\nhooked up with a special-purpose AFI value.  This is a little kludgy for\nextension, hence this splits it off.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "4584c239201037648abf1a6615186f9cdeb86b23",
      "tree": "1af059ebcc0b9229aa78c9e775120ae8ae4a8c2f",
      "parents": [
        "e30677a5537f67e37938954cf7347e9a9c0b922d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Apr 13 09:50:00 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 15:05:34 2015 +0200"
      },
      "message": "bgpd: speed up \"no-hit\" withdraws for routeservers\n\nThis accelerates handling of incoming Withdraw messages for routes that\ndon\u0027t exist in the table to begin with.  Cisco IOS 12.4(24)T4 has a bug\nin this regard - it sends withdraws instead of doing nothing for\nprefixes that are filtered.\n\nPulling up the adj_in removal in Quagga should have no ill effect, but\nwe can avoid the costly iteration over all rsclients if there was no\nadj_in entry.\n\nPerformance impact of this change on routeserver with 3 buggy peers,\nstartup/sync time:\n\nbefore patch:  143.12 seconds (user cpu)\nafter patch:     7.01 seconds (user cpu)\n\nMany thanks to Nick Hilliard \u0026 INEX for providing real-world test data!\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "dc684eb9976f8a1170312be42d142effce26b568",
      "tree": "1d1354118bc0b063e7048c86154339aa2f141d1c",
      "parents": [
        "06bd420d4646333bc7ed9964e348f19a942fcfe2",
        "e691c3bb972c0baf610d9e210ce20ea6546e1de0"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Apr 23 13:31:17 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Apr 23 13:36:08 2015 +0200"
      },
      "message": "Merge branch \u0027volatile/fix_warnings\u0027\n\nThanks to Donald Sharp and Greg Troxel for providing feedback!\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6ed810d986df5d843c89166fee6b73a71222b7bd",
      "tree": "86ac070fc69ae3e62fc6bf5d8750990bf0fa6c3e",
      "parents": [
        "c313895dec3c176584d99f7b8684ddc3f9141d88"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:13:07 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:44:56 2015 +0200"
      },
      "message": "*: fix more initialisers (for BSD)\n\nFreeBSD and NetBSD spew a few more warnings about variable initialisers.\nFound with OSR\u0027s/NetDEF\u0027s fancy new CI system.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c0bedebfe9ca1a1ded02f1f481762dd41defa63e",
      "tree": "9c040f71733fb7509c03457bc146373e65e95536",
      "parents": [
        "3a7e83c2387885075c9ecf1912dd6c9399c6947a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 10:00:43 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:33 2015 +0200"
      },
      "message": "build: add --enable-werror\n\nThis allows enabling -Werror in a consistent way.  Note that this is\ndifferent from just specifiying it in CFLAGS, since that would either\nbreak configure tests (if done on ./configure), or would override\nconfigure\u0027s CFLAGS (if done on make).\n\nUsing --enable-werror instead provides a new WERROR variable that is\nadditionally used during make with a consistent set of warning flags.\n\nThe tests/ directory is exempt.  (Rationale being, better to have more\ntests than pedantically complain about them.)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "53780e30c90ae393467afaf3ccff9e3791df5133",
      "tree": "a02c36b3e1740c457bd3a5a6fd93847d8aaead9f",
      "parents": [
        "d689d1a0c69726330d69b2dd412fdb8dcb23394b"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:07:09 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:19 2015 +0200"
      },
      "message": "bgpd: drop unused static variable\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d689d1a0c69726330d69b2dd412fdb8dcb23394b",
      "tree": "ff0d7e24363df5021d9a51bd79c04728398c82c6",
      "parents": [
        "dfee58f1d41a2e36c7f5f38a3ef5712224131824"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 13:54:30 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:14 2015 +0200"
      },
      "message": "bgpd: fix SNMP write support\n\nThis code - dating back to the initial import in 2002 - probably never\nworked.  Calling asn_parse_int seems to always have been wrong, and in\nthe meantime, there no longer is a \"struct variable *\" argument for\nwrite_method.  If anyone tried to use it, it\u0027d probably have crashed.\n(I didn\u0027t try.)\n\nFix this up so it actually works.  It\u0027s the only place in Quagga where a\nSNMP write is actually supported, so it\u0027s an odd one out anyway, but\nheh.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c9cd85631b77fac0bc30ffb9f23b29c466d31c4",
      "tree": "73c0687a1306f4a274ba3a057f4913a5d77734fb",
      "parents": [
        "94bad67cd8fe7ad023a40547a1153a414d70fa0a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Apr 19 14:40:02 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:04 2015 +0200"
      },
      "message": "bgpd: random() returns long\n\nbgpd was using unsigned to store a probability value to be used with\nrandom().  That, however, returns long, running into some warnings (and\nworst case, if RAND_MAX \u003e UINT_MAX, won\u0027t work correctly.\n\nJust use long to shuffle the value around.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "94bad67cd8fe7ad023a40547a1153a414d70fa0a",
      "tree": "548a50421210ac372b2183f372cda2ff5e6928bc",
      "parents": [
        "d43f8b39b075fe60e0c8fdb33b07b284d3fae503"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:52:22 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:02 2015 +0200"
      },
      "message": "bgpd: don\u0027t use #ifdef inside macro args\n\nUsing #ifdef inside preprocessor macro argument lists is not guaranteed\nto work.  In reality it mostly does, but we don\u0027t need these ifdefs for\nHAVE_IPV6 anymore, so let\u0027s get rid of the warning nonetheless.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d43f8b39b075fe60e0c8fdb33b07b284d3fae503",
      "tree": "8c98dce915aaaabd0707a12c2c08199d0bfdec2e",
      "parents": [
        "b1672ce858cc9c16fd7cc67b673aa241d9583a59"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:54:54 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "bgpd, zebra: fix struct/pointer sizeof mixups\n\nTwo places were taking sizeof(pointer) instead of the sizeof(struct),\nwhile performing operations on the struct.  Both are initialisation\nfunctions;  I guess we haven\u0027t seen fallout since they weren\u0027t critical.\nFix anyway.\n\n[v2: fix mistake that actually broke bgpd RS workqueue init]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b1672ce858cc9c16fd7cc67b673aa241d9583a59",
      "tree": "bf7a76931a2dac5cb741f456f808f7d8ef012c01",
      "parents": [
        "ab90fc04a57b7b1d93ccddb8c9fbbf339a7ffc4c"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Apr 19 15:17:02 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "bgpd: fix ecommunity_token initialiser\n\nThis pulls up ecommunity_token_unknown to be the first enum value (at\n0), and uses that as initialiser to get rid of the uninitialised use\nwarning.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ab90fc04a57b7b1d93ccddb8c9fbbf339a7ffc4c",
      "tree": "7c75add9b86f59da16d636e963402494dfbf6ecd",
      "parents": [
        "388f8857eb81ef75014060976776523a58a99389"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:07:25 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "*: add/cleanup initialisers\n\nThere were some (inconsequential) warnings about uninitialised use of\nvariables.  Also, in one case, sub-structs were mixed in initialisation,\nwhich doesn\u0027t quite work as intended.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "21401f3215be26dcb0f787105f5907745498e966",
      "tree": "c99c59e06f3fddad44cbd977f8fadad2dc9e76a7",
      "parents": [
        "b7d5021bfa161f797cbfb1e92bf5b94327fb1b71"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:55:26 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:57 2015 +0200"
      },
      "message": "*: fix signedness mix-ups\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b7d5021bfa161f797cbfb1e92bf5b94327fb1b71",
      "tree": "37f3c702812e7fe9dec6ef33925df331d64e02c7",
      "parents": [
        "eed3c48d3a7d2dae2cae2f2f250deffb843754a6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:53:18 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:47 2015 +0200"
      },
      "message": "*: remove stray extra semicolons\n\nSome places had extra semicolons where none belong.  Remove them.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "eed3c48d3a7d2dae2cae2f2f250deffb843754a6",
      "tree": "07b2252438225065024d4a534eddf0e86c9b87a4",
      "parents": [
        "ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:51:53 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:31 2015 +0200"
      },
      "message": "*: use void * for printing pointers\n\nOn higher warning levels, compilers expect %p printf arguments to be\nvoid *.  Since format string / argument warnings can be useful\notherwise, let\u0027s get rid of this noise by sprinkling casts to void *\nover printf calls.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242",
      "tree": "036d3b4c7bc0071f045bc1cb3a54c422dffc1806",
      "parents": [
        "ec62e1438ece9af0546f9028aa1403f2c84bf177"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:48:11 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Apr 19 20:40:19 2015 +0200"
      },
      "message": "*: use long long to print time_t\n\nSince we can\u0027t assume time_t to be long, int, or even long long, this\nconsistently uses %lld/long long (or %llu/unsigned long long in a few\ncases) to print time_t/susecond_t values.  This should fix a bunch of\nwarnings, on NetBSD in particular.\n\n(Unfortunately, there seems to be no \"PRId64\" style printing macro for\ntime_t...)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "06bd420d4646333bc7ed9964e348f19a942fcfe2",
      "tree": "d7d2ee186e7ed8e856da3b6d39bef86839d5040f",
      "parents": [
        "aa7dbb1067b7d02e1354fe1e5664ccb7d259d649"
      ],
      "author": {
        "name": "Balaji",
        "email": "balajig81@gmail.com",
        "time": "Mon Mar 16 16:55:29 2015 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 14 12:31:42 2015 +0200"
      },
      "message": "bgpd: Display of configured dampening parameters\n\nFunction to display configured bgp dampening parameters.\n\nSigned-off-by: Balaji.G \u003cbalajig81@gmail.com\u003e\n[DL: formatting adjustments]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "aa7dbb1067b7d02e1354fe1e5664ccb7d259d649",
      "tree": "43cc4818319a53e49a26f330952b37b417d44af9",
      "parents": [
        "941789e470199df4f612368f669ecc0fd096fb9a"
      ],
      "author": {
        "name": "Balaji",
        "email": "balajig81@gmail.com",
        "time": "Mon Mar 16 16:55:26 2015 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 14 12:04:29 2015 +0200"
      },
      "message": "bgpd: Configured suppress value cannot be less than the reuse value in bgp dampening\n\nRFC 2439, Section 4.2; the values pair up for hysteresis.\n\nSigned-off-by: Balaji.G \u003cbalajig81@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "237aac56960575f6ad2451ba2796d94bd5ae4b33",
      "tree": "f23c49fa32bc6b706bd5f37a9a3a45ce27adf15d",
      "parents": [
        "b6fa76098d127f5641a7dda0dee21f06ca167edb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 22:23:10 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:14 2015 +0100"
      },
      "message": "build: get rid of INCLUDES, use AM_CPPFLAGS\n\nINCLUDES in configure.ac was not used at all, and INCLUDES in\nMakefile.am is supposed to be AM_CPPFLAGS these days.\n\nReduces warnings spewed during bootstrap/autoreconf.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "6d6df30386423518b5daef93c2f047b4140f85f4",
      "tree": "7da3226d3276e019c49a4b4a673911a85297ecc7",
      "parents": [
        "0f048b90b5d6e4bd185913945b68dd254126eb9f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:12:37 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:18:49 2015 +0100"
      },
      "message": "build: remove INRIA, NRL and MUSICA IPv6 quirks\n\nValar dohaeris.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "cb4fc59c8a0f9df81109d38acbeaab5627e361f5",
      "tree": "a82f0bd7bf0d1fd11cdcd52d2dfa7562a64dabcb",
      "parents": [
        "143637198e333f0c822766b38f9d8cfe75c04e21"
      ],
      "author": {
        "name": "Milan Kocian",
        "email": "milon@wq.cz",
        "time": "Mon Dec 01 12:48:25 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 06 21:53:53 2015 +0100"
      },
      "message": "bgpd: fix negative values in output\n\nNegative value in output of ecommunities (and as numbers)\nseems odd :-). This patch fixes it. And add minor formating\nmodification, better for big as numbers.\n\nSigned-off-by: Milan Kocian \u003cmilon@wq.cz\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "daefeb8755e194dd19a5f1910bc78d13c8147efb",
      "tree": "5e00bccf96a80388e7160aca7a9623c40f874b07",
      "parents": [
        "cffe7807c03b7edea005869086720e2f1fb070c6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Dec 08 17:42:12 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Dec 08 17:46:07 2014 +0100"
      },
      "message": "bgpd: set BGP_ATTR_MP_[UN]REACH_NLRI (fixes 1a211cb)\n\nUnfortunately, the attribute present bits for MP_REACH and MP_UNREACH\nwhich 1a211cb (\"bgpd: one more fix\"...) tests for are never set in their\ncorresponding attribute parsing functions.\n\nReported-by: Martin Winter \u003cmwinter@netdef.org\u003e\nFixes: 1a211cb \"bgpd: one more fix for tightening of check for missing well-known attributes\"\nCc: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cffe7807c03b7edea005869086720e2f1fb070c6",
      "tree": "ba2106f3124a31e5cc3107ac75dc6aa16eab6970",
      "parents": [
        "273b1bd341afff86ba571e0be296d88dba627136"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Dec 07 03:27:13 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Dec 07 22:53:20 2014 +0100"
      },
      "message": "bgpd: stop startup timer on stopping BGP (fixes dd49eb1)\n\nbgp_delete() really needs to kill t_startup, otherwise after creating\nand quickly destroying a BGP instance it may fire on a deallocated\nstruct bgp, overwriting memory.\n\nReported-by: Martin Winter \u003cmwinter@netdef.org\u003e\nFixes: dd49eb1 (\"Fix BGP\u0027s use of restart bit.\")\nCc: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\n"
    },
    {
      "commit": "85c854aa720c02a56b1ecbbf12a763a326d11a63",
      "tree": "23928a702774512c806782e98f9c1aab3eb2f5c5",
      "parents": [
        "1a211cb369dc865a4e7e9f58a100c041af457262"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Sep 30 11:31:53 2014 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 25 15:57:12 2014 +0000"
      },
      "message": "bgpd: implement route-map set as-path prepend last-as\n\nIt picks up the AS to add from the aspath, or uses the peers\nAS number. Useful mostly in iBGP setups.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1a211cb369dc865a4e7e9f58a100c041af457262",
      "tree": "2f9bc481464ea27c46a0389134ee2e31df7e9c7a",
      "parents": [
        "ec98d90767b341877fb7f1547f025b946955899a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Sat Nov 01 17:21:47 2014 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 25 15:57:12 2014 +0000"
      },
      "message": "bgpd: one more fix for tightening of check for missing well-known attributes\n\n* bgp_attr.c: (bgp_attr_check) The check for missing NEXT_HOP has the right\n  spirit, but wrong where it counts, on the logic.  It wouldn\u0027t catch a\n  missing NEXT_HOP on a v4-only UPDATE.  It would though have incorrectly\n  flagged next-hop as missing on multi-protocol-only UPDATEs.\n\n  Caught by Martin Winter with a test-suite.\n"
    },
    {
      "commit": "ec98d90767b341877fb7f1547f025b946955899a",
      "tree": "3a467ac8a7457c55d8c77ea2549d4eb721d8cc61",
      "parents": [
        "dd49eb1f0232cd0600a3565b44b5c066a8d7872d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Oct 14 11:14:06 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:16 2014 +0000"
      },
      "message": "bgpd: trivial, remove unneeded extra variable in bgp_capability_restart\n"
    },
    {
      "commit": "dd49eb1f0232cd0600a3565b44b5c066a8d7872d",
      "tree": "58598aae7dfc1c0ec2686314bf58b7e30d5e31a1",
      "parents": [
        "443010383e2c8e5dc1bc722d9e22a97c513b4647"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Tue Sep 30 14:36:38 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:10 2014 +0000"
      },
      "message": "Fix BGP\u0027s use of restart bit.\n\nbgpd-restart-bit-fix.patch\n\nISSUE:\n\nQuagga BGP doesn\u0027t send or use the restart-bit via the Graceful-Restart(GR)\ncapability. GR capability implementation isn\u0027t complete as per the RFC.\n\nPATCH:\n\nPatch uses BGP instance creation as the beginning of the startup period,\nand \u0027restart_time\u0027 is taken as the startup period. As a result, BGP will\nset the restart bit in the GR capability of the OPEN messages during the\nstartup period.\n\nAs an indication of quagga implementation\u0027s capability of sending End-Of-RIB,\nhelping a restarting neighbor, quagga BGP will now send global GR capability\nirrespective of the graceful-restart config in BGP and the address-family\nspecific GR capability will be sent only if the GR config is present.\nForwarding bit is not set assuming its not preserved.\n\nIncorporated feedback from David Lamparter via the quagga-dev mailing list.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "443010383e2c8e5dc1bc722d9e22a97c513b4647",
      "tree": "567e65b01392dcc8183ee92648d2d56709035c43",
      "parents": [
        "4bab6806914dbb4b43f376ebf966a034a0ea72cd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 18:14:54 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:10 2014 +0000"
      },
      "message": "bgpd: remove unused variables\n"
    },
    {
      "commit": "ad5233a1bcdd7124992300673ad9c1035336eadd",
      "tree": "bde5fc3a4e11d7b66cada6edbcd0c4c04ef988b0",
      "parents": [
        "8306be211f1bcd5a19e74d08cde399e1b518ed25"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 14:19:57 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:51 2014 +0000"
      },
      "message": "Add set ipv6 next-hop peer-address command.\n\nIPv4 has the ability to specify the peer address with the keyword peer-address.\nIPv6 mandates the use of a specific global or local address only in setting the\nnext-hop in routemaps. This makes it cumbersome to configure some large networks\nwith BGP and IPv6. This patch fixes that deficiency.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "aed1b556cf2f55680ae09d7ad1a1f22729dea8c5",
      "tree": "26f9f14848768bd7bc77fc28c1469b970c41e84a",
      "parents": [
        "9562a7774b76df050d3e01632c6203796dc72c87"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Oct 21 16:59:01 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 28 10:46:24 2014 +0000"
      },
      "message": "bgpd: Fixes for recent well-known-attr check patch.\n\n* bgp_attr.c: Recent patch to tighten well-known attr checks and apply that\n  to all AFIs has some breakage with MP-extensions and GR, which needs to be\n  fixed.\n  (bgp_attr_check) Graceful Restart EoR can be an empty UPDATE for IPv4/uni.\n  MP-Ext allow UPDATE with just MP_UNREACH_NLRI. Check for these and return\n  proceed.\n  NEXT_HOP becomes optional, if MP_REACH_NLRI is present and there\u0027s no\n  v4 NLTI, update NEXT_HOP check accordingly.\n  Print the missing attr in string form in the log message.\n  (bgp_attr_parse) AS_PATH need not be there, so\n  bgp_attr_munge_as4_attrs call needs to be conditional on that.\n"
    },
    {
      "commit": "055086f70febc30fdfd94bb4406e9075d6934cd8",
      "tree": "2f511a8b1aca7b3e67e895321bbfef7d02f074b1",
      "parents": [
        "b166ea2dda9f04a8b75e0bf5adb7064580695f22"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Sep 23 15:23:01 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "bgpd: well-known attr check only run for v4/uni, which could cause a crash.\n\n* ANVL testing by Martin Winter threw up a crash in bgpd in aspath_dup\n  called from bgp_packet_attribute, if attr-\u003easpath was NULL, on an IPv6\n  UPDATE.\n\n  This root cause is that the checks for well-known, mandatory attributes\n  were being applied only if an UPDATE contained the IPv4 NLRI and the\n  peer was configured for v4/unicast (i.e. not deconfigured). This is\n  something inherited from GNU Zebra, and never noticed before.\n\n* bgp_attr.c: (bgp_attr_parse) Move the well-known mandatory attribute\n  check to here, so that it can be run immediately after all attributes\n  are parsed, and before any further processing of attributes that might\n  assume the existence of WK/M attributes (e.g. AS4-Path).\n  (bgp_attr_munge_as4_attrs) Missing AS_PATH shouldn\u0027t happen here anymore,\n  but retain a check anyway for robustness - it\u0027s definitely a hard error\n  though.\n* bgp_attr.h: (bgp_attr_check) No longer needs to be exported, make static.\n* bgp_packet.c: (bgp_update_receive) Responsibility for well-known check\n  now in bgp_attr_parse.\n"
    },
    {
      "commit": "b2dd59ee0e74926278e128846624f5c93288223b",
      "tree": "d54b3798315a2b0b46f8730747584eff75b5e370",
      "parents": [
        "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 15:34:48 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:33:20 2014 +0100"
      },
      "message": "bgpd.c: Remove unused store to variable\n"
    },
    {
      "commit": "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49",
      "tree": "bd4a8d881336a1551146725d7ae06b3e68553e4d",
      "parents": [
        "010ebbbca6396f272cc2d50d147dd922dda68213"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 14:42:23 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:32:34 2014 +0100"
      },
      "message": "Fix most compiler warnings in default GCC build.\n\nFix lots of warnings. Some const and type-pun breaks strict-aliasing\nwarnings left but much reduced.\n\n* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to\n  (struct fifo), so just use that.  Makes it clearer the beginning of\n  (struct bgp_advertise) is compatible with with (struct fifo), which seems\n  to be enough for gcc.\n  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up\n  type-punning breaks strict aliasing warnings.\n* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.\n  (bgp_route_refresh_receive) fix an interesting logic error in\n  (!ok || (ret !\u003d BLAH)) where ret is only well-defined if ok.\n* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.\n* jhash.{c,h}: Can take const on * args without adding issues \u0026 fix warnings.\n* libospf.h: LSA sequence numbers use the unsigned range of values, and\n  constants need to be set to unsigned, or it causes warnings in ospf6d.\n* md5.h: signedness of caddr_t is implementation specific, change to an\n  explicit (uint_8 *), fix sign/unsigned comparison warnings.\n* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going\n  to fly given iov_base.\n* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always\n  true for address of static variable.  Correct but pointless warning in\n  this case, but use a 2nd pointer to shut it up.\n* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2\n  different 32 bit IDs into in (struct ospf6_route), and the resulting\n  type-pun strict-alias breakage warnings this causes.  Need to use 2\n  different fields to fix that warning?\n\ngeneral:\n\n* remove unused variables, other than a few cases where they serve a\n  sufficiently useful documentary purpose (e.g.  for code that needs\n  fixing), or they\u0027re required dummies.  In those cases, try mark them as\n  unused.\n* Remove dead code that can\u0027t be reached.\n* Quite a few \u0027no ...\u0027 forms of vty commands take arguments, but do not\n  check the argument matches the command being negated.  E.g., should\n  \u0027distance X \u003cprefix\u003e\u0027 succeed if previously \u0027distance Y \u003cprefix\u003e\u0027 was set?\n  Or should it be required that the distance match the previously configured\n  distance for the prefix?\n  Ultimately, probably better to be strict about this.  However, changing\n  from slack to strict might expose problems in command aliases and tools.\n* Fix uninitialised use of variables.\n* Fix sign/unsigned comparison warnings by making signedness of types consistent.\n* Mark functions as static where their use is restricted to the same compilation\n  unit.\n* Add required headers\n* Move constants defined in headers into code.\n* remove dead, unused functions that have no debug purpose.\n"
    },
    {
      "commit": "1520e4748129c4eb97ac3090bcc97149a1900611",
      "tree": "f4501a77bcb9e3ecabfd9dd5f80ee3e71cb35119",
      "parents": [
        "342a31bfda21616209366679ac522471e5772a2f",
        "90444ca35e3037ed43ec695428f0ef6d82f9a320"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 19 18:15:40 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 19 18:15:40 2014 +0200"
      },
      "message": "*: merge branch stable/0.99.23\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4c005e3f65a1f5b4592b1ebbac392cbb1a710998",
      "tree": "ec2feadf6fe20841a179d31714a053863919ae1e",
      "parents": [
        "3ef0b877f08344aa52367794aa4ec32b12becd6d"
      ],
      "author": {
        "name": "John Glotzer",
        "email": "glotzer@amazon.com",
        "time": "Mon Aug 04 19:39:23 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:52:26 2014 +0200"
      },
      "message": "bgpd: memmove needed in community_del_val\n\nIn bgpd/bgp_community_del_val memcpy is used for potentially overlapping\nregions which is *not* safe. It may \"work\" in some cases but is not\nguaranteed to work in all cases. The case that I saw fail was on an\nx86_64 architecture with the number of bytes being moved/copied equal to\n8.\n\nThe way the code is written the uint32_t pointers will always differ by\n1, which is equivalent to a memcpy/memmove of regions that are 4 bytes\naway from one another. So the code failed while copying an 8 byte region\nto an address that is 4 bytes lower i.e. overlapping regions.\n\nInterestingly, the same architecture had no problems with a 12 byte\ncopy.\n\nWhen the code failed the communities were [200,300,400] and a call was\nmade to delete the 200 community. The result of this was an array that\nlooked like [400,400] which was uniquified to [400]. Of course the\nexpected result should have been [300, 400].\n\nOne additional point - in our production environment memmove would not\n*link* without including \u003cstring.h\u003e but in an isolated quagga git repo\nthis #include does not seem to be required and I see memmove is used in\nvtysh.c without this #include either.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "052573ee2319b21657a79e1b76a5c801701fa38c",
      "tree": "32a731414c3b0a70516461befd9c22baf77b0587",
      "parents": [
        "0ff692ed59696c534e6bfd0f9d6e83706fbbec4a",
        "f57000c0dbdd0e30e71b6651022392f284201e19"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:52:52 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:52:52 2014 +0200"
      },
      "message": "*: merge branch stable/0.99.23\n\nbgp extcommunity fixes from stable branch\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f57000c0dbdd0e30e71b6651022392f284201e19",
      "tree": "9a00b90323fa93de9ecb10c65f9f82824fda99b8",
      "parents": [
        "bb02b82354a80f74706efc5e4c914b3f89fb033e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:01:10 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: don\u0027t send NOTIFY twice for malformed attrs\n\nMost of the attribute parsing functions were already sending a notify,\nlet\u0027s clean up the code to make it happen only once.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "bb02b82354a80f74706efc5e4c914b3f89fb033e",
      "tree": "d7662f309686113478121b54859e048f44ee6ac2",
      "parents": [
        "f80f838b2f54738937ef1281b237710132195c44"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:01:00 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix IP endianness in debug message\n\ninet_ntop expects network byte order.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f80f838b2f54738937ef1281b237710132195c44",
      "tree": "e5dbb9062560ac02ad2e5baf62c8d820560c75d2",
      "parents": [
        "27bf90a14670283a899b96c56dd23f8413e0973e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:00:51 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix memory leak on malformed attribute\n\nWhen bgp_attr_parse returns BGP_ATTR_PARSE_ERROR, it may already have\nparsed and allocated some attributes before hitting that error.  Free\nthe attr\u0027s data before returning.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "27bf90a14670283a899b96c56dd23f8413e0973e",
      "tree": "e52498c5d70f6efef4d9a827b6974a2f597b2e30",
      "parents": [
        "73d78ea0153fd36a300be5fec2ef0fca34a67477"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:59:01 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix double free after extcommunity set (BZ#799)\n\nThe route-map extcommunity set code was incorrectly assuming that it\nowns the intern\u0027d struct ecommunity reference.  In reality, the intern\u0027d\nreference belongs to bgp_update_receive() and we\u0027re not supposed to\ntouch it in the route-map code.\n\nInstead, like all the other set commands, we use a on-heap but\nnon-intern\u0027d ecommunity to set the new value.  This is then either\nintern\u0027d in bgp_update_main/_rsclient() through bgp_attr_intern(), or\nfree\u0027d through bgp_attr_flush().\n\nThis fixes Bugzilla #799, which is that bgpd otherwise crashes with a\ndouble free.  The ecommunity got unintern\u0027d first in the route-map set\ncommand, then in bgp_update_receive().\n\nDebugged-by: Milan Kocian \u003cmilon@wq.cz\u003e\nReported-by: Florian S \u003cflorian@herrenlohe.de\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "73d78ea0153fd36a300be5fec2ef0fca34a67477",
      "tree": "a56383725b587c60c584db85cb1757588d3ea2ed",
      "parents": [
        "c460e5720c1101a6da53e5b753b736ac2c7981af"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:58:47 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: remove duplicate route-map extcommunity code\n\nroute_set_ecommunity_rt and _soo share almost all of their code.\nLet\u0027s remove one of the redundant copies.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c460e5720c1101a6da53e5b753b736ac2c7981af",
      "tree": "a60baf501e16e92a472e50bc2383bfd937ba0bfd",
      "parents": [
        "a4b5665f76d9e907a547c85c9c4a7a656c568b9d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:54:58 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix some bgp_update_main() attribute leaks\n\nbgp_update_main() wasn\u0027t doing anything to release attribute values\nset from route maps for two of its error paths.  To fix, pull up the\nappropriate cleanup from further down and apply it here.\n\nbgp_update_rsclient() doesn\u0027t have the issue since it immediately\ndoes bgp_attr_intern() on the results from bgp_{export,import}_modifier.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b304dcb8abc4e5b93f86a4024990980746e730be",
      "tree": "04ce8991a879b756c389370b5b7a9329fa13bb7b",
      "parents": [
        "9e7a53c179f6897128b24435452b5d3d0f8c715a"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue May 20 09:04:49 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:21:52 2014 +0300"
      },
      "message": "bgpd: route-map: share aspath object compilation code where possible\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "9e7a53c179f6897128b24435452b5d3d0f8c715a",
      "tree": "80a5cc6e9e6dc411587764d865a2bf5f489000ba",
      "parents": [
        "2aa640bd78b64821bde9a53ecdd1e96e91b20ae4"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Apr 24 10:22:37 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:20:20 2014 +0300"
      },
      "message": "bgpd: implement \"next-hop-self all\"\n\nAs specified in:\nhttp://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/command/irg-cr-book/bgp-m1.html#wp4972925610\n\nThis allows overriding next-hop for ibgp learned routes on an\nRR for reflected routes.\n\nEspecially useful for using iBGP in DMVPN setups. See:\nhttp://blog.ipspace.net/2014/04/changes-in-ibgp-next-hop-processing.html\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "2aa640bd78b64821bde9a53ecdd1e96e91b20ae4",
      "tree": "419c61e63e6484031512e69435cdeaa6695d9aca",
      "parents": [
        "a4b5665f76d9e907a547c85c9c4a7a656c568b9d"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue May 20 08:57:26 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:20:20 2014 +0300"
      },
      "message": "bgpd: fix route-map comments\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "6b0655a25194c7c0331154edaa6124cf783e5e5e",
      "tree": "c0c7d479f2684531249668210da27a60322ba395",
      "parents": [
        "fdb913aedb5a9807ad60715e8badb4f25d57acea"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:53:35 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:58:02 2014 +0200"
      },
      "message": "*: nuke ^L (page feed)\n\nQuagga sources have inherited a slew of Page Feed (^L, \\xC) characters\nfrom ancient history.  Among other things, these break patchwork\u0027s\nXML-RPC API because \\xC is not a valid character in XML documents.\n\nNuke them from high orbit.\n\nPatches can be adapted simply by:\n\tsed -e \u0027s%^L%%\u0027 -i filename.patch\n(you can type page feeds in some environments with Ctrl-V Ctrl-L)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d9d4ae5157207b9b8bdb167983519a7ffb860f2c",
      "tree": "8919a83dcb99aac5fa0141f873525517d5e3b7ac",
      "parents": [
        "8c71e481dae11b7ae3f1ef561a989624b2ae84b6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org",
        "time": "Wed Jan 13 00:32:39 2010 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:30:22 2014 +0200"
      },
      "message": "bgpd: fix crash when allowas-in is done on inactive peer\n\nWhen allowas-in is changed on a peer that is not up, BGP would crash\ntrying to do route_refresh.  If peer is not up, there is no need\nto do notification or send.\n\nSigned-off-by: Stephen Hemminger \u003cstephen@networkplumber.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c71e481dae11b7ae3f1ef561a989624b2ae84b6",
      "tree": "4c13b76e1b9aedc45ad9b086be972ba4999ada03",
      "parents": [
        "2c13299a05e5544a5e79c2a970256a21f488a3fa"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Jan 15 06:57:57 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:32 2014 +0200"
      },
      "message": "bgpd: efficient NLRI packing for AFs !\u003d ipv4-unicast\n\nISSUE:\n\n  Currently, for non-ipv4-unicast address families where prefixes are\n  encoded in MP_REACH/MP_UNREACH attributes, BGP ends up sending one\n  prefix per UPDATE message. This is quite inefficient. The patch\n  addresses the issue.\n\nPATCH:\n\n  We introduce a scratch buffer in the peer structure that stores the\n  MP_REACH/MP_UNREACH attributes for non-ipv4-unicast families. This\n  enables us to encode multiple prefixes. In the end, the two buffers\n  are merged to create the UPDATE packet.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n[DL: removed no longer existing bgp_packet_withdraw prototype]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2c13299a05e5544a5e79c2a970256a21f488a3fa",
      "tree": "1d277afb9b346388e1aa244484c3af41dcd6a72e",
      "parents": [
        "66d2ead7df2db9144605c973fcd80b88df33f81b"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:07:20 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:08 2014 +0200"
      },
      "message": "bgpd: don\u0027t compare next-hop to router-id\n\nWhile announcing a path to a peer, the code currently compares the path\u0027s\nnext-hop with the peer\u0027s router-id. This can lead to problems as the router\nIDs are unique only within an AS. Suppose AS 1 sends route with next-hop\n10.1.1.1. It is possible that the speaker has an established BGP peering\nwith a router in AS 2 with router ID 10.1.1.1. The route will not be\nadvertised to that peer in AS 2.\n\nThe patch removes this check.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "000e157c852653288c5a1e6d0dee821c1765d315",
      "tree": "28a654105d50b5f55c9e865a223ba93366fe3839",
      "parents": [
        "5d804b439a4138c77f81de30c64f923e2b5c1340"
      ],
      "author": {
        "name": "Milan Kocian",
        "email": "milon@wq.cz",
        "time": "Fri Oct 18 07:59:38 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:51:19 2014 +0200"
      },
      "message": "bgpd: Fix condition allowas-in in rsclient code\n\nCurrently when you set neighbour\u0027s \u0027allowas-in\u0027 option on route server side\nyou get redistribution of the prefixes from this neighbour\u0027s table into all\nneighbour\u0027s tables which have the same AS number. I think that wanted behaviour\nis to allow import prefixes from neighbour\u0027s tables with the same AS num\ninto neighbour which has \u0027allowas-in\u0027 option set.\n\nSigned-off-by: Milan Kocian \u003cmilon@wq.cz\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5d804b439a4138c77f81de30c64f923e2b5c1340",
      "tree": "b63e3dc3a266d42311392e57c37e2b0a9855ff0b",
      "parents": [
        "5f9adb5d26d3af31b00c02084468e9f92b461b01"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Thu Sep 12 03:37:07 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: support TTL-security with iBGP\n\nTraditionally, ttl-security feature has been associated with EBGP\nsessions as those identify directly connected external peers. The\nGTSM RFC (rfc 5082) does not make any restrictions on type of\npeering. In fact, it is beneficial to support ttl-security for both\nEBGP and IBGP sessions. Specifically, in data centers, there are\ndirectly connected IBGP peerings that will benefit from the protection\nttl-security provides.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\n[DL: function refactoring split out into previous 2 patches.  changes:\n     - bgp_set_socket_ttl(): ret type int -\u003e void\n     - is_ebgp_multihop_configured(): stripped peer \u003d\u003d NULL check\n     - comments/whitespace]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5f9adb5d26d3af31b00c02084468e9f92b461b01",
      "tree": "640a6c4e855697777f672c384c37fffd5ae72d07",
      "parents": [
        "ef0b0c3e95a1f30d6f338100c689feef8ad5cd6e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:15:02 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: factor out eBGP multihop check\n\nThe check for an eBGP multihop configuration is unwieldy;  factor it out\ninto a separate function.\n\n[DL: originally by Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e,\n     split off from the next commit]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ef0b0c3e95a1f30d6f338100c689feef8ad5cd6e",
      "tree": "9848b1d05c2e1424e464cac41be51f32d7b87d78",
      "parents": [
        "8da8689d91a6436c17aca5000b1426aaea47e23c"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 22:52:04 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: factor out TTL setting\n\nTTL/min TTL are set from both bgp_accept() and bgp_connect().  Factor\nthem out so the following change to enable iBGP GTSM becomes more\nreadable.\n\n[DL: originally by Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e,\n     split off from the next commit]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8da8689d91a6436c17aca5000b1426aaea47e23c",
      "tree": "f4929119d4f41c668708d19374719765d7cb7f25",
      "parents": [
        "3374bef0412ac11815779f54321cbc4bf96da909"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Sep 11 03:33:55 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:39 2014 +0200"
      },
      "message": "bgpd: fix fast external fallover behavior\n\nISSUES\n\n1. When an interface goes down, the zclient callbacks are invoked\n   in the following order: (a) address_delete() that removes the\n   connected address list: ifp-\u003econnected, (b) interface_down()\n   that performs \"fast external fallover\" operation. The operation\n   relies on ifp-\u003econnected to look for peers that should be brought\n   down. That\u0027s a cyclic dependency.\n\n2. \u0027ttl-security\u0027 configuration handler sets peer-\u003ettl to\n   MAXTTL (so that BGP packets are sent with TTL\u003d255, as per the\n   requirement of ttl-security). This, however, is incompatible\n   with \u0027fast external fallover\u0027 as the fallover operation checks\n   for (ttl \u003d\u003d 1) to determine directly connected peers.\n\n3. The current fallover operation does not work for IPv6 address family.\n\nPATCH\n\n1. The patch removes the dependency on \u0027ifp-\u003econnected\u0027 list for fast\n   fallover. The peer already contains a nexthop structure that reflects\n   the peering address. The nexthop structure has a pointer to the\n   interface (ifp) that peering address resolves to. Everytime the TCP\n   connection succeeds, the ifp is updated. The patch uses this ifp in\n   the interface_down() callback for a match for the peers that should be\n   brought down.\n\n2. The evaluation for directly connected peering is enhanced as\n   \u0027peer-\u003ettl \u003d\u003d 1\u0027 OR \u0027peer-\u003egtsm_hops \u003d\u003d 1\u0027. Thus a ttl-security\n   configuration on the peer with one hop is directly connected and\n   should be brought down under \u0027fast external fallover\u0027.\n\n3. Because of fix (1), IPv6 address family works automatically.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3374bef0412ac11815779f54321cbc4bf96da909",
      "tree": "bba5f91b10c31e5987aa2d02d44de7d5c74c537c",
      "parents": [
        "48fc05fb7e6ee44db9f73f3194bfd4738b7f9dc1"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Thu Jan 09 00:31:22 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 20:34:53 2014 +0200"
      },
      "message": "bgpd: increase TCP socket buffer size\n\nBGP does not respond fairly in high scale.  As the number of BGP peers\nand prefixes increase, triggers like interface flaps which lead to BGP\npeer flaps, cause blockage in bgp_write.\n\nBGP does handle the cases of TCP socket buffer full by queuing a write\nevent back, there is no functional issue there as such. Still,\nincreasing the peer socket buffer size should help reduce event queueing\nin BGP.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n[DL: patch split, this is item 3.]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "48fc05fb7e6ee44db9f73f3194bfd4738b7f9dc1",
      "tree": "e0c11382f69fd3159600d18150f846dc104d8e43",
      "parents": [
        "6aa136f1eaeb0dfc1e39e6c2cd6380a399ef126f"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Thu Jan 09 00:31:22 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 20:27:12 2014 +0200"
      },
      "message": "bgpd: fix O_NONBLOCK on outgoing connects\n\nBGP was setting sockets to be non-blocking only for the accepted passive\npeers.  As a fix, setting the BGP sockets to be non-blocking even for\nthe active peers.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n[DL: patch split, this is item 1.]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6aa136f1eaeb0dfc1e39e6c2cd6380a399ef126f",
      "tree": "b1313a9961fe29a4ccf91571a5c772545351084d",
      "parents": [
        "b366b518401e0b0652cd70d297d3fb67b4803db0"
      ],
      "author": {
        "name": "Vitaliy Senchyshyn",
        "email": "vsenchyshyn@toroki.com",
        "time": "Wed Oct 02 10:40:20 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:54:04 2014 +0200"
      },
      "message": "bgpd: send notify in OpenSent when stopping manually\n\nThe issue it fixes is that the notification message is not sent to a\nsecond peer when bgp is stopped manually.\n\nAccording to BGP RFC4271, section 8.2.2, regarding the FSM transitions,\nin OpenSent state:\n\nIf a ManualStop event (Event 2) is issued in the OpenSent state, the\nlocal system:\n\n  * sends the NOTIFICATION with a Cease,\n  * sets the ConnectRetryTimer to zero,\n  * releases all BGP resources,\n  * drops the TCP connection,\n  * sets the ConnectRetryCounter to zero, and\n  * changes its state to Idle.\n\nI\u0027ve added a check for OpenSent state when the notification is sent from\nthe functions which are called from the CLI commands which\ndirectly/indirectly stop/restart BGP.\n\nAcked-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b366b518401e0b0652cd70d297d3fb67b4803db0",
      "tree": "5f05079e281f0ec503ee408b1f7502cc49cad82e",
      "parents": [
        "689bb66c6a92d238bed1a8b0920438c5a2271966"
      ],
      "author": {
        "name": "Boian Bonev",
        "email": "bbonev@ipacct.com",
        "time": "Mon Sep 09 16:41:35 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:23:36 2014 +0200"
      },
      "message": "bgpd: display multipath status in \"show ip bgp\"\n\nThe output of \"show ip bg\" does not show whether and which routes are\ninstalled as multipath routes along the best route:\n\nBGP table version is 0, local router ID is 10.10.100.209\nStatus codes: s suppressed, d damped, h history, * valid, \u003e best, i - internal,\n              r RIB-failure, S Stale, R Removed\nOrigin codes: i - IGP, e - EGP, ? - incomplete\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003ei1.0.0.0/24       10.10.100.1              1    111      0 15169 i\n* i                 10.10.100.2              1    111      0 15169 i\n* i                 10.10.100.3              1    111      0 65100 15169 i\n\nThis patch adds a new status code that is showing exactly which routes\nare used as multipath:\n\nBGP table version is 0, local router ID is 10.10.100.209\nStatus codes: s suppressed, d damped, h history, * valid, \u003e best, \u003d multipath,\n              i internal, r RIB-failure, S Stale, R Removed\nOrigin codes: i - IGP, e - EGP, ? - incomplete\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003ei1.0.0.0/24       10.10.100.1              1    111      0 15169 i\n*\u003di                 10.10.100.2              1    111      0 15169 i\n* i                 10.10.100.3              1    111      0 65100 15169 i\n\nThe inconsistency in the status code legend (\"i - internal\" vs. \"i internal\")\ninherent from old IOS was fixed. It had to be touched anyways.\n\nSigned-off-by: Boian Bonev \u003cbbonev at ipacct.com\u003e\n[DL: rewrap long line, clean whitespace in same chunk]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    }
  ],
  "next": "689bb66c6a92d238bed1a8b0920438c5a2271966"
}
