)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "689bb66c6a92d238bed1a8b0920438c5a2271966",
      "tree": "4cf3ee1be6acdb4cf3b85d3da83e09cb64d29ba9",
      "parents": [
        "2fdd455cfd1f758b7aa2e6c8e3d185098b93908c"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:13:37 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:15:45 2014 +0200"
      },
      "message": "bgpd: track correct originator-id in reflected routes\n\nISSUE:\n\nSuppose route1 and route2 received from route-reflector-client1 and client2\nrespectively have identical attributes. The current logic of creating the\nadj-rib-out for a peer threads the \u0027adv\u0027 structures for both routes against\nthe same attribute. This results in \u0027bgp_update_packet()\u0027 to pack those\nroutes in the same UPDATE message with one attr structure formatted. The\noriginator-id is thus set according to the first route\u0027s received router id.\nThis is incorrect.\n\nPATCH:\n\nFix bgp_announce_check() function to set the originator-id in the\nadvertising attr structure. Also, fix the attribute hash function and\ncompare function to consider originator-id. Otherwise attributes where all\nfields except the originator-id are identical get merged into one memory\nlocation.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nReviewed-by: Ken Yin \u003ckyin at cumulusnetworks.com\u003e\n[DL: whitespace changes dropped]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2fdd455cfd1f758b7aa2e6c8e3d185098b93908c",
      "tree": "3b2d28c7b389228cc6c1e3809660c4f7f22c3f18",
      "parents": [
        "d92a2f39b46f1990052d2db046b47edf7bb21ebb"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:02:36 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:15:22 2014 +0200"
      },
      "message": "bgpd: add \u0027bgp bestpath as-path multipath-relax\u0027\n\nCompute multipath in BGP based on AS_PATH hop count match. If the knob\nis turned on, it is not required to have an exact match of AS_PATHs\n(provided other multipath conditions are met, of course).\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d92a2f39b46f1990052d2db046b47edf7bb21ebb",
      "tree": "17d73b5e879e6ce15c28496d86166bd78ec3f3b0",
      "parents": [
        "cbf435cb72b937c9e5bfe38905e05de3755b1021"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Wed Jul 31 16:36:08 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:02:21 2014 +0200"
      },
      "message": "bgpd: use ATTR_FLAG_BIT() for BGP_ATTR_ values\n\n* bgp_attr.c: this UNSET_FLAG()s are bogus. I did a quick review and\n  I think that they could not cause any bug anyway.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cd40b329a2e4da882bcad0431c048c876bbeafbd",
      "tree": "cfbdec5a7559c6d3e56766797896a18809aa1746",
      "parents": [
        "e712d0e3667ffad8109ef8bce3ce01927ee95bb7"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Sep 30 12:27:51 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 20:21:41 2014 +0200"
      },
      "message": "lib/command.c: rewrite command matching/parsing\n\nAdd support for keyword commands.\n\nIncludes new documentation for DEFUN() in lib/command.h, for preexisting\nfeatures as well as new keyword specification.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2b00515a9b639fd1e057f3ebf10ded2dde920764",
      "tree": "1167cb145764208a132599e5d83980708501bac4",
      "parents": [
        "f7bf41534e885c7bc077529c591a1bce24a5f1e9"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Sep 30 12:27:49 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:32:49 2014 +0200"
      },
      "message": "bgpd, ospfd, zebra: fix some DEFUN definitions\n\nFixup some DEFUNS with incorrect command strings or mixed up helpstrings.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6ee06fa9ed91412cb745668d462031cdbe2642e0",
      "tree": "107e951abc716c2ca15fbcc62bdb0858b35036e8",
      "parents": [
        "a83a1e9c2f035d3152451dcfc97ab13b4ac427b9"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sun Jan 12 18:30:13 2014 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Feb 10 09:37:30 2014 +0100"
      },
      "message": "bgpd: bgpd-set-v4-nexthop-for-v6-peering.patch\n\nBGP: While advertising v4 prefixes over a v6 session, set the correct v4 nexthop.\n\nISSUE:\n\nFor an IPv6 peer, BGPd sets the local router-id as the next-hop\u0027s v4 address.\nThis is incorrect as the router-id may not be a valid next-hop to be included\nin UPDATEs that contain v4 prefixes.\n\nPATCH:\n\nSet the v4 address in the next-hop field based on the interface that the\npeering is on (directly connected interface or loopback).\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "a12afd5e8e57c95505d4d0166af234c7f19e9fe1",
      "tree": "62f3d6a2d92ce06d857fd90240a8a8806ff38951",
      "parents": [
        "bb97e4622ed6f48e2b8e07f1f94edd03162223a1"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat May 25 14:01:36 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 06 12:41:46 2013 +0200"
      },
      "message": "bgpd, zebra: support NEXTHOP_IPV4_IFINDEX in bgp import check\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "bb97e4622ed6f48e2b8e07f1f94edd03162223a1",
      "tree": "5729ccb02f1de89d4d9bbe5b537de45803d1cf55",
      "parents": [
        "5b9f51828db732d56053500b1d257797f7f3401b"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Sat May 25 14:01:35 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 06 12:41:46 2013 +0200"
      },
      "message": "bgpd, zebra: Support NEXTHOP_IPV4_IFINDEX in nexthop_lookup api\n\nSince commit ba281d3d040, ospfd uses NEXTHOP_IPV4_IFINDEX\nroutes. The API between zebra and bgpd which is used to query\nnexthops for recursive routes did not support this nexthop\ntype and therefore, ospf changes (or any other IGP changes\nwhich use NEXTHOP_IPV4_IFINDEX) would never trigger any\nrecursive route update.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a0f6ce5b41dcfa059074d72c8fc61896d3e996a9",
      "tree": "cfaa7586f2d5f434a851088dc7f29a546c74d26c",
      "parents": [
        "4ff3bcad8e81b643f3247317a3949d7867b36f75"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Thu Apr 11 08:24:30 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 31 18:49:50 2013 +0200"
      },
      "message": "bgpd: honor PEER_FLAG_DISABLE_CONNECTED_CHECK on bgp_scan\n\nWhen neighbor disable-connected-check was used, bgpd would accept routes\nwith unconnected nexthop as indended, however those routes would be\ninvalidated on the next bgp_scan run as that function did not know about\ndisable-connected-check.\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8ff202e2d3fa7ebbd6728fdd230f3ad1a20578cd",
      "tree": "6f8ffd3a083bee4c8c8fa2b4e2eb5981b4af1cbe",
      "parents": [
        "9e47abd862f71847a85f330435c7b3a9b1f76099"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 31 14:39:41 2013 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jul 31 14:44:24 2013 +0200"
      },
      "message": "bgpd: write NOTIFY non-blockingly\n\nswitching the socket to blocking may well block the entire bgpd process\nfor some time if our peer is overloaded (which may well be the original\nreason for the NOTIFY)\n\nThe error handling is slightly different from the previous ML discussion\non this;  buffer exhaustion isn\u0027t technically a fatal TCP error, and we\nshould probably proceed with FSM actions according to a sent NOTIFY\n(adjusting timers) even if we didn\u0027t manage to get the NOTIFY onto the\nwire.\n\nAcked-by: Leonid Rosenboim \u003clrosenbo@wrs.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9e47abd862f71847a85f330435c7b3a9b1f76099",
      "tree": "375f9e63d4a1b206addb615a906f2f5608823612",
      "parents": [
        "397b5bded5654a31b4bd3b904f091fd3859aecf7"
      ],
      "author": {
        "name": "Rakesh Garimella",
        "email": "rakesh.garimella@sophos.com",
        "time": "Mon Mar 11 12:38:31 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jul 30 20:27:50 2013 +0200"
      },
      "message": "bgpd: prevent double address delete on shutdown\n\nbgp_interface_down() and bgp_exit() both proceed to delete the address\nfrom bgpd\u0027s interface representation, so the second call gets a NULL\nresult from the hash lookup and subsequently crashes.\n\nSigned-off-by: Rakesh Garimella \u003crakesh.garimella@sophos.com\u003e\n[reformatted]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "397b5bded5654a31b4bd3b904f091fd3859aecf7",
      "tree": "5b2a0f99bfa8dd6b774c1149948bc7a5aec3d7d5",
      "parents": [
        "c423d413e464913ee88c1ee700e2c4037e6bdb24"
      ],
      "author": {
        "name": "Leonid Rosenboim",
        "email": "lrosenbo@wrs.com",
        "time": "Tue Jul 30 20:14:25 2013 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jul 30 20:20:07 2013 +0200"
      },
      "message": "bgpd: stricter packet handling in OpenSent\n\nKeepalives and updates are not expected in OpenSent, prior to receiving\nthe peer\u0027s open message.  Terminate the session with the proper\nnotification.\n\nFrom: Leonid Rosenboim \u003clrosenbo@wrs.com\u003e\n[split off FSM changes, some reordering \u0026 cleanup.  read handling needs\n to be separately addressed]\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "90645f5598ca8b25cd2692f2ac0d2778a3fd2755",
      "tree": "2b5e67b020eb3f7a2fd9df4faf2f0914e0cbf0cf",
      "parents": [
        "44a86a0278c1678fd4b8dfa56c4f5f2feb6df3ad"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 04 22:29:21 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Feb 24 20:42:40 2013 +0100"
      },
      "message": "hash: force size to be a power of 2\n\nBy forcing the hash table size to be a power of 2, a potentially\nexpensive divide can be replaced by a mask operation. Almost all\nusage of the hash table was using default size of 1024. Only places\nwith different size was thread library (1011) and bgp aspath.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0e4303d3173ecc264b3ec39a863174670bbe2900",
      "tree": "f525c8543f07581c9a87fcffb843537e87ddf820",
      "parents": [
        "f1ef81b2476ea533ac3d2129aa0e89653c427323"
      ],
      "author": {
        "name": "Roman Hoog Antink",
        "email": "rha@open.ch",
        "time": "Fri Jan 18 13:52:03 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 23 18:22:34 2013 +0100"
      },
      "message": "bgpd: fix lost passwords of grouped neighbors\n\nThis patch resolves the significance of order of group and password\nstatements.\n\nIt prevents passwords from being lost in cases where all\nthree conditions apply:\n  1. the peer is member of a group with or without group password\n  2. the peer has an individual password set\n  3. the peer is added to a group within an address-family ipv6\n     section\n\nIn addition this patch prevents the same issue in cases, where an IPv4\npeer\u0027s password is set first and the peer is added to a group\nafterwards.\n\nAdding a peer to a group cancels his individual password. Without ipv6\nthis is not a problem, because choosing the right order of config\nstatements will do (set password only after adding peer to group).\n\nWhen adding the peer to a group within the address-family\nsection, his password is definitely lost. The same workaround (ie.\nsetting the password after the address-family section) can not be used,\nbecause \"show run\" will print the configuration statements in the wrong\norder.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d53d8fda42e1ce43852d3b4cff914ce79b5c6785",
      "tree": "65fabd06d7388d593c1260c18558acd29c82b523",
      "parents": [
        "aeef13b0d5b50a90f293c93eb5a34c2a099d140b"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Jan 28 07:14:43 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 01 17:55:04 2013 +0100"
      },
      "message": "bgpd: fix crash in soft-reconfiguration\n\nCommit 8692c50652 introduced a bug where bgpd would crash on\nsoft-reconfiguration.\n\nThis happens e.g. when there are filtered unicast routes because\nrn-\u003einfo is NULL in that case, which the code did not account for.\n\nReported-by: Paweł Staszewski \u003cpstaszewski@itcare.pl\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5e728e929942d39ce5a4ab3d01c33f7b688c4e3f",
      "tree": "6f2b2413fc182b75b589fdb340c813d7da944771",
      "parents": [
        "f47e5a18b5beb00d6b5b94965e305dadb5aa5bad"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jan 23 05:50:24 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 01 17:55:04 2013 +0100"
      },
      "message": "bgpd: relax ORF capability length handling\n\ncommit fe9bb64... \"bgpd: CVE-2012-1820, DoS in bgp_capability_orf()\"\nmade the length test in bgp_capability_orf_entry() stricter and is now\ncausing us to refuse (with CEASE) ORF capabilites carrying any excess\ndata.  This does not conform to the robustness principle as laid out by\nRFC1122 (\"be liberal in what you accept\").\n\nEven worse, RFC5291 is quite unclear on how to use the ORF capability\nwith multiple AFI/SAFIs.  It can be interpreted as either \"use one\ninstance, stuff everything in\" but also as \"use multiple instances\".\nSo, if not for applying robustness, we end up clearing sessions from\nimplementations going by the former interpretation.  (or if anyone dares\nadd a byte of padding...)\n\nCc: Denis Ovsienko \u003cinfrastation@yandex.ru\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f47e5a18b5beb00d6b5b94965e305dadb5aa5bad",
      "tree": "c870b37cdba8e36effae527faf6c266847ad2621",
      "parents": [
        "955be06f8a647d1149d5547e1265fb66f55a9161"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jan 20 18:29:28 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Feb 01 17:55:04 2013 +0100"
      },
      "message": "bgpd: don\u0027t try to reconcile AS4_PATH with NULL\n\nbgp_attr_munge_as4_attrs would previously try to reintegrate an AS4_PATH\nwith a NULL AS_PATH, leading to a rather nasty SEGV.  Let\u0027s go by\nRFC6793 and treat missing AS_PATH as 0-length AS_PATH, which in turn\nmeans discarding the AS4_PATH.\n\n[NB: we don\u0027t actually stick to the actual rule, which is discarding\nAS4_PATH if it\u0027s longer than AS_PATH; indeed we should probably fix that\ntoo]\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "dcab1bb822161d55795aad59b14c5c5d79b71e1f",
      "tree": "0e55397d41d91f613123c6c812bc8691caa02b27",
      "parents": [
        "86998bc2bc9506841250c8d49dd2df2464660a18"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Dec 07 16:45:52 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jan 16 01:45:57 2013 +0100"
      },
      "message": "bgpd: conditional default-originate using route-map\n\nIncorporate a patch by Svetozar Mihailov which implements\ndefault-originate route-maps to behave as expected, i.e. allowing\nthe default route to be advertised conditionally, depending on a\ncriterion given by the route-map.\n\nI am aware that the performance attributes of the following implementation\nare far from optimal. However, this affects only code paths belonging to\na feature that is broken without this patch, therefore, it seems reasonable\nto me to have this in the mainline for now.\n\nCc: Svetozar Mihailov \u003cquagga@j.zarhi.com\u003e\nReported-by: Sébastien Cramatte \u003cscramatte@gmail.com\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "86998bc2bc9506841250c8d49dd2df2464660a18",
      "tree": "1f6796236e69496f3db2bfd32eb2d43c6bfb1a37",
      "parents": [
        "a6694fe8a89b957216f548938cc31602df04d495"
      ],
      "author": {
        "name": "Leonid Rosenboim",
        "email": "Leonid.Rosenboim@windriver.com",
        "time": "Fri Dec 14 19:12:17 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jan 16 01:45:57 2013 +0100"
      },
      "message": "bgpd: uncork/nagle socket when sending BGP NOTIFY\n\nThis pushes out the NOTIFY message before closing a connection.\n\nPreviously, the TCP_CORK bandwidth optimization code caused NOTIFY\nmessages to disappear prior to when the connection is closed.\n\n* bgpd/bgp_packet.c: unset CORK, set NODELAY, and replace\n                     writen() by more correct write()\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a6694fe8a89b957216f548938cc31602df04d495",
      "tree": "cfa46c9261215f8fa6bc991fbc335e99da196ea9",
      "parents": [
        "ca3ccd8748434719e4670ce812d1310013fad518"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jan 16 01:28:36 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jan 16 01:45:57 2013 +0100"
      },
      "message": "Revert \"bgpd: flock() dump files (BZ#742)\"\n\nThis reverts commit b07458a055493dd37cb955ae90f11ae8bc334d3a.\n\nOn second thought, the right way to do this is with rename(), not by\nintroducing a lock that can potentially even stall bgpd.\n\nReported-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3a69f74a0a903659e8a5bb930b257d9d09a87626",
      "tree": "e54c3459cbd555d66d915c92f64dcc3a6b90cca2",
      "parents": [
        "d61c1bbd4bf6ddf717dda88350668a9f1e2da0ac"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 11 18:27:23 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 15 17:50:34 2013 +0100"
      },
      "message": "bgpd: uncork after each write\n\nKeep data flowing, uncork after each BGP_WRITE_PACKET_MAX.\nThis makes TCP send data sooner, since thread may not be scheduled\nagain for a a longish time because of new UPDATE\u0027s coming in.\n\nSigned-off-by: Stephen Hemminger \u003cshemminger@vyatta.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d61c1bbd4bf6ddf717dda88350668a9f1e2da0ac",
      "tree": "c6a056bdfb24031339eb5781c0f57748059dbea4",
      "parents": [
        "47f6aef02b85c604bbd556574e2c724b7304e9e8"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 04 22:29:23 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 15 17:49:48 2013 +0100"
      },
      "message": "bgpd: use recent monotonic time for readtime\n\nThe readtime value is for diagnostic, and doesn\u0027t have to be highly\naccurate. This also fixes a problem where the readtime was being measured\nwith system clock, but the peer_uptime() was comparing with bgp_clock.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "07ff4dc4d29f6f8db77e0e73da5d59e864ae2e66",
      "tree": "b631ce8f75ae8e932eac212d454dd8c27fe6b4d7",
      "parents": [
        "1e0ce7caa622f07c20bb74414a4a5b4cbd732c75"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Fri Jan 04 22:29:20 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 15 17:49:41 2013 +0100"
      },
      "message": "bgpd: mark route nodes scheduled into work queue\n\nThe flag bit BGP_NODE_PROCESS_SCHEDULED is checked but never set.\nThis causes route node to be scheduled multiple times under load.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1e0ce7caa622f07c20bb74414a4a5b4cbd732c75",
      "tree": "35a221f0912891b2b04f9337288fbfd479761169",
      "parents": [
        "a689e6a9f470d2a72493b907c94ef23516bbbda6"
      ],
      "author": {
        "name": "Leonid Rosenboim",
        "email": "lrosenbo@wrs.com",
        "time": "Fri Dec 07 21:31:07 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 15 17:22:01 2013 +0100"
      },
      "message": "bgpd: improve logging of invalid BGP Notifications\n\nInvalid BGP Notification messages should be logged locally, cf.\nRFC4271, Sect. 6.4, p 34,\n  NOTIFICATION Message Error Handling\n\nCurrent notification for invalid Notification code:\n\n  2012/10/10 02:17:54 BGP: message index 10 not found in bgp_notify_msg (max is 8)\n  2012/10/10 02:17:54 BGP: 192.168.1.1 received NOTIFICATION 10/0 ((no item found)) 0 bytes\n\nthe logging should be a bit more clear. The above logging really doesn\u0027t\nexplain much and looks more like a programming error.\n\n[rewrote most of it to get in something I can call a shape -David]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a689e6a9f470d2a72493b907c94ef23516bbbda6",
      "tree": "90dc123c2f7528c59e08c9aa492dfd4a92603aed",
      "parents": [
        "a0de1d16cd00694b07b266d4a5dae5985e9072ff"
      ],
      "author": {
        "name": "Leonid Rosenboim",
        "email": "lrosenbo@wrs.com",
        "time": "Fri Dec 07 21:25:00 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jan 14 17:58:42 2013 +0100"
      },
      "message": "bgpd: fix error response to invalid BGP version number\n\nBGP4-ANVL 20.1 ANVL tries to open BGP with version 5 and expects correct\nnotification in response. Quagga sends notification, but with incorrect\ninformation in it.\n\nThe data needs to be a 2-byte value, and for now we respond with 0004 for any\npeer version other than 4.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a0de1d16cd00694b07b266d4a5dae5985e9072ff",
      "tree": "93924a57c690d75454b3489df7f87021fbf4dcde",
      "parents": [
        "b06b35f0754747f9f178be155a2903b360aa2b6c"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Dec 07 16:35:00 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jan 14 16:09:20 2013 +0100"
      },
      "message": "bgpd: fix a bug in bgp_attr_dup\n\nCommit 558d1fec11749d3257e improved bgp_attr_dup so it would be possible\nfor the caller to provide attr_extra, allowing to use the stack instead\nof the heap for operations requiring only a short lived attr.\n\nHowever, this commit introduced a bug where bgp_attr_dup wouldn\u0027t copy\nattr_extra at all (but provide a reference to the original) if the\ncaller provided attr_extra.\n\nCc: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b06b35f0754747f9f178be155a2903b360aa2b6c",
      "tree": "a92d70e724c5b5133ecebf9c4d4444bde3870cc2",
      "parents": [
        "9499bf2bc6daf0a9b7170d3cf994daef2f1a8920"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Fri Dec 07 14:26:09 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jan 14 16:09:19 2013 +0100"
      },
      "message": "bgpd: fix a memleak on \"set community none\"\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "15c713485699fd22dfa5b7ce3ca7c6be049f1033",
      "tree": "26348d73018fa2351410e88ca1cde0e12acae1a6",
      "parents": [
        "24e50f2013e64a73b1f7ecdbd5688360002d09f7"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Mon Nov 19 11:17:31 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jan 14 16:00:58 2013 +0100"
      },
      "message": "bgpd: store \"no neighbor activate\" for IPv4 unicast\n\nIf a neighbor was in a peer group for any AFI/SAFI, bgpd would never write a\n\"no neighbor activate\" line for IPv4 unicast, so a valid setup like following\ncould be configured, but not saved:\n\n    router bgp 64600\n     bgp router-id 198.51.100.1\n     network 198.51.100.0/24\n     neighbor peers peer-group\n     neighbor 2001:db8::2 remote-as 64601\n     no neighbor 2001:db8::2 activate\n    !\n     address-family ipv6\n     network 2001:db8:1::/48\n     neighbor peers activate\n     neighbor peers soft-reconfiguration inbound\n     neighbor 2001:db8::2 peer-group peers\n     exit-address-family\n    !\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "24e50f2013e64a73b1f7ecdbd5688360002d09f7",
      "tree": "3c53b418e2f91f703ee79fd4b224e157b25218b3",
      "parents": [
        "ebbb5fca5ca899a9a125aa2770d3fdf857186bac"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 15:17:33 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jan 14 14:43:51 2013 +0100"
      },
      "message": "bgpd: avoid heap fragmentation in bgp_clear_route_table\n\nIn bgp_clear_route_table, moved cleanup code before the allocation\nof the work queue items. This returns the memory to the system\nallocator before allocating new and might therefore help avoiding\nheap fragmentation.\n\n* bgp_route.c: (bgp_clear_route_table) moved code blocks.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nReviewed-by: Leonid Rosenboim \u003cLeonid.Rosenboim@windriver.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ebbb5fca5ca899a9a125aa2770d3fdf857186bac",
      "tree": "b2e5f525e5dc30a378dc4ace24f5feca70c33e71",
      "parents": [
        "a5c851c7ff41ef846e83d62394176ac1753ebf45"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 15:17:33 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jan 14 14:42:38 2013 +0100"
      },
      "message": "bgpd: fix for leaked struct bgp_adj_[in|out] on peer shutdown\n\n    If a peer with soft-reconfiguration configured is cleared, the\nfunction bgp_clear_route_table() doesn\u0027t free the bgp_adj_in and bgp_adj_out\nstructures of route nodes that for some reason, ej. denied by a filter,\ndon\u0027t have routes attached \"rn-\u003einfo \u003d\u003d NULL\".\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nReviewed-by: Leonid Rosenboim \u003cLeonid.Rosenboim@windriver.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8b366b9cfd1f3ec1a45e0f82db7fdb27e3bb3594",
      "tree": "855e826ba80328b0fa106bfd8e1f826357806406",
      "parents": [
        "9d3f9705d8b386ccf006c106967c700141e5d049"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Wed Nov 07 23:50:08 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:10:25 2012 +0100"
      },
      "message": "bgpd: Fixed out-of-date comment\n\nWhen going through the code to write the documentation for local-as,\nI discovered that one of the comments was out-of-date.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9d3f9705d8b386ccf006c106967c700141e5d049",
      "tree": "9edfe2653741fa0f49ffef15bd66f5a522dcd025",
      "parents": [
        "3b96b78136d04ddb7e39d86577cad75acb25237a"
      ],
      "author": {
        "name": "Andrew Certain",
        "email": "certain@amazon.com",
        "time": "Wed Nov 07 23:50:07 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:10:00 2012 +0100"
      },
      "message": "bgpd: add replace-as modifier for BGP neighbor\n\nAdded replace-as modifier for BGP neighbors when using\nlocal-as. If the replace-as modifier is specified, only the\nreplacement AS as specified by the local-as modifier is\nprepended to the AS_PATH, not the process\u0027s AS.\n\nIn bgp_attr.c, I decided that\n\nif (peer-\u003echange_local_as) {\n  /* If replace-as is specified, we only use the change_local_as when\n     advertising routes. */\n  if( ! CHECK_FLAG (peer-\u003eflags, PEER_FLAG_LOCAL_AS_REPLACE_AS) ) {\n    aspath \u003d aspath_add_seq (aspath, peer-\u003elocal_as);\n  }\n  aspath \u003d aspath_add_seq (aspath, peer-\u003echange_local_as);\n} else {\n  aspath \u003d aspath_add_seq (aspath, peer-\u003elocal_as);\n}\n\nwas clearer than the alternative that didn\u0027t duplicate the prepending of the\nprocess\u0027s AS:\n\n/* First, append the process local AS unless we have an alternate local_as\n * and we\u0027re replacing it (as opposed to just prepending it). */\nif (! (peer-\u003echange_local_as\n       \u0026\u0026 CHECK_FLAG (peer-\u003eflags, PEER_FLAG_LOCAL_AS_REPLACE_AS) ) ) {\n  aspath \u003d aspath_add_seq (aspath, peer-\u003elocal_as);\n}\n\nif (peer-\u003echange_local_as)\n  aspath \u003d aspath_add_seq (aspath, peer-\u003echange_local_as);\n}\n\nBut I could be convinced otherwise.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fe9bb6459afe0d55e56619cdc5061d8407cd1f15",
      "tree": "0de65deb7260c93592625348219f8933efbc1d04",
      "parents": [
        "d1d3ac9bad0caf7a9c465bb382b924009f0d9168"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Apr 19 20:34:13 2012 +0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 01 23:07:15 2012 -0700"
      },
      "message": "bgpd: CVE-2012-1820, DoS in bgp_capability_orf()\n\nAn ORF (code 3) capability TLV is defined to contain exactly one\nAFI/SAFI block. Function bgp_capability_orf(), which parses ORF\ncapability TLV, uses do-while cycle to call its helper function\nbgp_capability_orf_entry(), which actually processes the AFI/SAFI data\nblock. The call is made at least once and repeated as long as the input\nbuffer has enough data for the next call.\n\nThe helper function, bgp_capability_orf_entry(), uses \"Number of ORFs\"\nfield of the provided AFI/SAFI block to verify, if it fits the input\nbuffer. However, the check is made based on the total length of the ORF\nTLV regardless of the data already consumed by the previous helper\nfunction call(s). This way, the check condition is only valid for the\nfirst AFI/SAFI block inside an ORF capability TLV.\n\nFor the subsequent calls of the helper function, if any are made, the\ncheck condition may erroneously tell, that the current \"Number of ORFs\"\nfield fits the buffer boundary, where in fact it does not. This makes it\npossible to trigger an assertion by feeding an OPEN message with a\nspecially-crafted malformed ORF capability TLV.\n\nThis commit fixes the vulnerability by making the implementation follow\nthe spec.\n"
    },
    {
      "commit": "b07458a055493dd37cb955ae90f11ae8bc334d3a",
      "tree": "d0bc403501b7cc8f7be805da9dd5d6d29846af20",
      "parents": [
        "3f0bfc9e82e0d735be2cb06d5c4a3028650637bf"
      ],
      "author": {
        "name": "Daniel Kozlowski",
        "email": "dkozlowski@sevone.com",
        "time": "Wed Sep 26 12:01:24 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 01 22:58:38 2012 -0700"
      },
      "message": "bgpd: flock() dump files (BZ#742)\n\nflock()ing the BGP dump files helps consumers determine when they\u0027re\nsafe to read.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "837d16ccbe0fca413f8927da6a34b1e97ccada8a",
      "tree": "7aed5a517b619c03d11bf567f6a14cda6f8f5efe",
      "parents": [
        "655071f44aab42e89bcece3a93da456fdd0d913a"
      ],
      "author": {
        "name": "Balaji.G",
        "email": "balajig81@gmail.com",
        "time": "Wed Sep 26 14:09:10 2012 +0530"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:59 2012 -0700"
      },
      "message": "*: use array_size() helper macro\n\nUse the array_size() helper macro.  Replaces several instances of local\nmacros with the same definition.\n\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "28971c8cb1138700e87dc7da673e59b5596bb51b",
      "tree": "0e55c3f830681449cd96bb36eb04a6a1293d8b44",
      "parents": [
        "67174041d2d9d8908f8b2c915bc0d186d8442c68"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Fri Aug 17 08:19:50 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 21:50:48 2012 +0200"
      },
      "message": "lib/table: add route_table_get_next() and iterator\n\n  * lib/table.[ch]\n\n    - Add a function (route_table_get_next()) to get the route_node in\n      a tree that succeeds a given prefix in iteration order.\n\n      This allows one to reliably walk nodes in a tree while allowing\n      modifications, and is useful for achieving scale and\n      performance. Other approaches are also possible -- the main plus\n      point of this one is that it does not require any state about\n      the walk to be maintained in the table data structures.\n\n    - Add an iterator for walking the nodes in a tree. This introduces\n      a new structure (route_table_iter_t) and the following main\n      functions.\n\n        route_table_iter_init()\n        route_table_iter_pause()\n        route_table_iter_next()\n        route_table_iter_cleanup()\n\n      The iterator normally uses node pointers and the existing\n      route_next() function to walk nodes efficiently. When an\n      iteration is \u0027paused\u0027 with route_table_iter_pause(), it stores\n      the last prefix processed. The next call to\n      route_table_iter_next() transparently invokes\n      route_table_get_next() with the prefix to resume iteration.\n\n  * bgpd/bgp_table.[ch]\n\n    Add wrappers for the new table features described above.\n\n  * tests/table_test.c\n\n    Add tests for the new table code.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "67174041d2d9d8908f8b2c915bc0d186d8442c68",
      "tree": "b57edeae37701055c3c21b79ce51fcbc5069e704",
      "parents": [
        "f9c1b7bb9b98342f1f3b0bfe3af01844f364dce9"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Fri Aug 17 08:19:49 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Sep 26 21:50:48 2012 +0200"
      },
      "message": "bgpd: make bgp_table a wrapper around table library\n\nMake the BGP table code a thin wrapper around the table implementation\nin libzebra.\n\n  * bgpd/bgp_table.[ch]\n\n    - Use the ROUTE_NODE_FIELDS macro to embed the fields of a\n      route_node in the bgp_node structure.\n\n    - Add a route_table field to the bgp_table structure.\n\n      Initialize the route_table with a delegate, such that the nodes\n      in the table are bgp_node structures.\n\n    - Add inline wrappers that call route_table functions underneath,\n      and accept/return the correct BGP types.\n\n  * bgpd/bgp_route.c\n\n    Change some code to use inline wrappers instead of accessing\n    fields of nodes/tables directly. The latter does not always work\n    because the types of some fields need to be translated now.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8046ba6ec4d6e87bf8da6563c0f3e5e66c4652b3",
      "tree": "1b38b2eae4e1cee042f96a42217b14647159bf0f",
      "parents": [
        "0ff4b9c96793898429052de576d8da368e48997e"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Thu May 31 13:30:28 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "snmp: let handlers accept OID from a lesser prefix\n\nMost table handlers do not expect to be given an OID whose prefix is\noutside what they can handle. This is not a problem with the SMUX\nimplementation since it always correct the OID such that the prefix\nmatches. However, this is not the case for the AgentX\nimplementation. A new function, smux_header_table() is used to do this\nnormalization.\n"
    },
    {
      "commit": "b7c0d0651cd64f644d02ef5e4d1b82febe7e57d8",
      "tree": "5480eff7b8581e1168d23657da0f30e23100d7bc",
      "parents": [
        "b8cf46b715b2c21db5dce8118c70b4dd9b5255a3"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Fri May 25 11:17:01 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "agentx: handle SNMP traps\n\nsmux_trap() signature has been changed to provide appropriate level\ninformation to send SNMPv2 notifications. This includes the addition\nof the enterprise OID to use (from which is derived the SNMP trap OID)\nand the MIB registry to locate the appropriate function for variable\nbindings provided by the trap.\n\nThe SMUX implementation has been updated but ignore the provided\nenterprise OID. Instead, it still uses the SMUX peer OID to keep\ncompatibility with previous versions of Quagga. The SMUX\nimplementation also ignores the provided MIB registry since it uses\nsmux_get() function to grab the appropriate values. This is not\npossible with the AgentX implementation since there is no such\nfunction provided by NetSNMP.\n"
    },
    {
      "commit": "b8cf46b715b2c21db5dce8118c70b4dd9b5255a3",
      "tree": "61fea7fd6d75345f5224e36d8ca33badc9d39b17",
      "parents": [
        "4b89e45d928d41bb5d32a00ba7b402d6a3bbdf44"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Fri May 25 08:56:44 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "smux: drop findVar element from trap object struct\n\nThis element was not unused.\n"
    },
    {
      "commit": "4b89e45d928d41bb5d32a00ba7b402d6a3bbdf44",
      "tree": "7471ad396e285ff5b0ca3d85600f3c184f43dd2c",
      "parents": [
        "d6be5fb9bc41ea77547204eeedd12132b26ad662"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Thu May 24 21:22:01 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "smux: remove `tick` argument from smux_trap()\n\nsmux_trap() contains an argument whose use appears to be to set\nsysUpTime.0/timestamp field in SNMP trap. However, this value is not\nused in smux_trap(). Moreover, it is expected that this field is the\nvalue of sysUpTime.0 when the trap was sent and not any other time\nrelated to the trap. To avoid any confusion, we remove this field from\nthe signature of the function.\n"
    },
    {
      "commit": "08d7f6533ecc0f935a76918c462982004534864d",
      "tree": "0e67590a8a2aba551439c46bfa8b33d7fba4feb7",
      "parents": [
        "6b1e37f8537fa2a4560de32e83ca5089763e2d39"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue May 22 22:29:17 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "build: use net-snmp-config to configure NetSNMP\n\nThe correct method to link to NetSNMP is to use net-snmp-config (which\nis like pkg-config). Explicit link to libcrypto is also dropped\n(NetSNMP libs are linked to libcrypto, no need to link Quagga to\nit). Moreover, @SNMP_INCLUDES@ is dropped because useless. Due to a\nbug in configure.ac, it was properly populated.\n"
    },
    {
      "commit": "6b1e37f8537fa2a4560de32e83ca5089763e2d39",
      "tree": "941dfbfbe62981ec214ac1e5a3f607368f4bf1d4",
      "parents": [
        "9e7a548ce421660b0d22bfeb90c2b2b53742aac7"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue May 22 22:15:20 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "build: only define HAVE_SNMP\n\nNetSNMP is the only SNMP implementation for Quagga. We don\u0027t need two\ndifferent symbols.\n"
    },
    {
      "commit": "9e7a548ce421660b0d22bfeb90c2b2b53742aac7",
      "tree": "4c962403808f98806781fb4ad15594152bc1effa",
      "parents": [
        "a47c5838e9f445ab887ad927706b11ccbb181364"
      ],
      "author": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Tue May 22 14:32:22 2012 +0200"
      },
      "committer": {
        "name": "Vincent Bernat",
        "email": "bernat@luffy.cx",
        "time": "Mon Jun 25 19:03:23 2012 +0200"
      },
      "message": "build: allow configure and build in a separate directory\n\nSome .h files in lib/ are autogenerated. The search path should\ninclude the build directory and the source directory. They usually\nmatch but sometimes, they may be different. For example:\n\n $ mkdir build\n $ cd build\n $ ../configure\n $ make\n"
    },
    {
      "commit": "bb782fb50efcd972d4357f9a7164de2c317d2eef",
      "tree": "4f17b1f789945f6d47894be1ba93ca283be2f314",
      "parents": [
        "e2c38e6c9767e30d5683022653b1cf91b186f9d4"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Wed Jun 20 16:34:01 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jun 21 09:49:15 2012 +0200"
      },
      "message": "bgpd: Partially revert f018db8, fixes BZ#730\n\n  The change from bgp_node_get() to bgp_node_lookup() broke aggregation.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e2c38e6c9767e30d5683022653b1cf91b186f9d4",
      "tree": "692f274468ac2075d70a7da87888935ab545a44b",
      "parents": [
        "c9e4f8623642fc005c97830256000bef5680aa26"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Wed Jun 20 17:45:50 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jun 21 09:48:56 2012 +0200"
      },
      "message": "bgpd: Fix for commit 6a4677b7, fixes BZ#729\n\n  The timers are rearmed after events processing. After 6a4677b7 we\ndo not generate events that can rearm the holdtime timer.\n\n  Fix it\u0027s to call bgp_timer_set() directly as it\u0027s done from bgp_event().\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cccbc0151883cfb4f43d6fa0a4a3caedc27e6cf5",
      "tree": "0c0296eb09551c556717e93250e5492fc1c7c85f",
      "parents": [
        "2fb2a455263c569119ca32be59b0337a3d8cd9b3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 14 10:40:26 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 14 17:30:14 2012 +0100"
      },
      "message": "bgpd: Add \"no listen\" socket option for the BGP master configuration\n\n* bgpd.h: add a BGP_OPT_NO_LISTEN option for the master BGP configuration,\n  to prevent any listen socket being created automatically. Allows code\n  to be used outside of BGP daemon settings.\n* bgpd.c: (bgp_get) honour above the flag, suppress auto-creation of listen\n  socket on first BGP instance if set.\n  (bgp_option_set) whitelist BGP_OPT_NO_LISTEN\n"
    },
    {
      "commit": "ad12dde6f9596997337ebc210dd2d4593438556b",
      "tree": "661e013c488b2f7003b8b817d680fa9d03f4eb30",
      "parents": [
        "22714f99c4ffeb4d1bade7ad6374adeba0e06e4c"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 13 22:50:07 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jun 13 22:50:07 2012 +0100"
      },
      "message": "Revert \"bgpd: Make socket init separate, so unit tests work again.\"\n\nThis reverts commit 7621f336e2f346edee43227f0b1ef93fe769720b. See bug #727\n"
    },
    {
      "commit": "47d3b6078a6c885e03d28bae3397b71a827473f5",
      "tree": "b3a6a1de537c9be50c839cf088be89ee91c6b38e",
      "parents": [
        "f018db83a0746f9336d04e50dd06f3bbf6565f1c"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:11 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:35:51 2012 +0200"
      },
      "message": "micro-op bgp_node_[get|lookup]() and route_node_[get|lookup]()\n\n  Reduce indirection for values that doesn\u0027t change in the loop.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\n[adjusted after dropping previous patch]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f018db83a0746f9336d04e50dd06f3bbf6565f1c",
      "tree": "4c2ba0e661abd2651ee6fa1bd7be9157c8859411",
      "parents": [
        "343aa82219c0cab0315e29267eb303127215caea"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:10 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:35:50 2012 +0200"
      },
      "message": "bgpd: optimize bgp_aggregate_[increment|decrement]()\n\n  If there were no aggregates configured this functions were allocating\nand freeing a struct bgp_node for every call, and it\u0027s called for every\nprefix received.\n\n* bgp_route.c: Bail out early if the there are no aggregates configured.\n  Change from bgp_node_get() to bgp_node_lookup() that does not allocate\n  a new struct bgp_node if not found.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "343aa82219c0cab0315e29267eb303127215caea",
      "tree": "17e6b77072657a1a8ae04aeacb715652de1c4ddb",
      "parents": [
        "6a4677b723b6f79997ca15ee202c36d528d3dfcf"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:08 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:35:50 2012 +0200"
      },
      "message": "bgpd: optimize bgp_update_main() in the soft_reconfig case\n\nAvoids 3 checks per call.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6a4677b723b6f79997ca15ee202c36d528d3dfcf",
      "tree": "d1928cd0835791b91870bfb9e4fb9eea3c75b07b",
      "parents": [
        "577ac57b78e0ee3cbc5afdb5f54a660bd0126136"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:07 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:35:47 2012 +0200"
      },
      "message": "bgpd: optimize holdtime timer cancelling\n\n* bgp_packet.c: (bgp_update_receive) for every update received we queue\n  an event just to cancel the holdtime timer, done in bgp_fsm_update().\n  Instead cancel the timer directly an avoid a scheduling pass.\n\n  This incidently fixes another problem found on a slow box, where thousands\nof events threads were queued, and run, but never freed, because they are\nmoved to the unused list that grows without bounds.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "577ac57b78e0ee3cbc5afdb5f54a660bd0126136",
      "tree": "ec891bb869f46e7a4cd30c1163dfbc768587002b",
      "parents": [
        "558d1fec11749d3257e32561d45b5c1ec0622cf4"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:06 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:50 2012 +0200"
      },
      "message": "bgpd: Remove useless initialization\n\nIt\u0027s initialized below\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "558d1fec11749d3257e32561d45b5c1ec0622cf4",
      "tree": "4570b1643db6446dc9f14f9c0bf7fd64a3325117",
      "parents": [
        "489d005a9ad94675f40dc7bceff6176cfad36d45"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:05 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:50 2012 +0200"
      },
      "message": "bgpd: reduce struct attr_extra allocations/freeing\n\nTry to use on stack structs for temporary uses.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "489d005a9ad94675f40dc7bceff6176cfad36d45",
      "tree": "c11edc9588fc1fd4ccef33f168a7367d0a34db65",
      "parents": [
        "6182d65b23fc0362b173e2a9314fa4551523a1c2"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:03 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:49 2012 +0200"
      },
      "message": "bgpd: use on stack struct attr_extra in bgp_update_receive()\n\nReduce memory heap fragmentation and pressure on the memory allocator.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6182d65b23fc0362b173e2a9314fa4551523a1c2",
      "tree": "fb99eb9565f5ea8aa6a8b88eb9c4c05dc7cf364a",
      "parents": [
        "b9f1dca10f9a9bf853a9999a117c8cdeec5b7b69"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:02 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:49 2012 +0200"
      },
      "message": "bgpd: fix struct attr_extra leak in bgp_default_originate()\n\n  The call to bgp_attr_default_set() above creates the attr_extra struct,\nbut the attr.extra \u003d NULL initialization was leaking it.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b9f1dca10f9a9bf853a9999a117c8cdeec5b7b69",
      "tree": "b6382403ba177cb56f0ca6054db1ce32428fd7f2",
      "parents": [
        "1a2fd7078f943e2207ee0f1b0dafdcd2d9c81925"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:01 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:49 2012 +0200"
      },
      "message": "bgpd: use on stack struct attr_extra in bgp_attr_unintern()\n\n  Reduce memory heap fragmentation and pressure on the memory allocator.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1a2fd7078f943e2207ee0f1b0dafdcd2d9c81925",
      "tree": "da0852c5c4019c6c1893dec384e9f20df26cea29",
      "parents": [
        "938ef3a22535292dd36c250e5329f97d977e51df"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:53:00 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:49 2012 +0200"
      },
      "message": "bgpd: cleanup bgp_attr_unintern()\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "938ef3a22535292dd36c250e5329f97d977e51df",
      "tree": "a854c21dd840e7558a482bf4812b857583da3591",
      "parents": [
        "7fb0cd82c26492004a106bec7ca4afdf4684fabb"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:59 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:49 2012 +0200"
      },
      "message": "bgpd: use on stack struct attr_extra on bgp_attr_aggregate_intern()\n\nReduce memory heap fragmentation and pressure on the memory allocator.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7fb0cd82c26492004a106bec7ca4afdf4684fabb",
      "tree": "1f901bbc121337b9c421eb48d7bcc413ad140753",
      "parents": [
        "e16a413313cf985ae2b8d2f1a9e8fd0ab6f5b9fc"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:58 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:49 2012 +0200"
      },
      "message": "bgpd: reduce attrhash_make_key() indirections\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "e16a413313cf985ae2b8d2f1a9e8fd0ab6f5b9fc",
      "tree": "e6810289e60312da431a8f992903275d952d0e6b",
      "parents": [
        "8ff56318a8bd188cfcc1cdab689c46c326b50d38"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:57 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:49 2012 +0200"
      },
      "message": "bgpd: remove some useless initializations\n\n* bgp_attr.c: (bgp_attr_default_intern) bgp_attr_default_set() already\n  initializes the memory. Fixes a struct attr_extra leak.\n* bgp_route.c: Remove useless on stack struct initializations.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8ff56318a8bd188cfcc1cdab689c46c326b50d38",
      "tree": "6b7b718166aa6fe3b7264d3efba9c39750f5917b",
      "parents": [
        "c76275ee960c708408646d8a680b201b27cb9c1a"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:56 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:49 2012 +0200"
      },
      "message": "bgpd: optimize bgp_info_cmp()\n\n* bgp_route.c: (bgp_info_cmp) Reduce indirections, precalculate some\n  values that are used several times, reduce conditionals.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c76275ee960c708408646d8a680b201b27cb9c1a",
      "tree": "59daf9a650950d35aa5350270118cd94e4a1fde3",
      "parents": [
        "6d85b15bbb2fd3c263d5d4b402c88ff348af877b"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:55 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:44 2012 +0200"
      },
      "message": "bgpd: optimize loops on [e]community_hash_make()\n\n  This change reduces loop count. Less jumps.\n\n* bgp_community.c: One loop per community.\n* bgp_ecommunity.c: One loop per ecommunity.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6d85b15bbb2fd3c263d5d4b402c88ff348af877b",
      "tree": "c8be5e782f4425840ee93e167eb8d7c1ed3f4e4c",
      "parents": [
        "14542f3edaa43113880e8bb69612c553f02bdf22"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:54 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:10 2012 +0200"
      },
      "message": "bgpd: remove calls to peer_sort() from fast-path\n\n  peer_sort() it\u0027s called so much as to be annoying. In the assumption\nthat the \u0027sort\u0027 of the peer doesn\u0027t change during an established session,\nI have changed all calls to peer_sort() in the \u0027fast-path\u0027 to only check\nthe \u0027sort\u0027. All the calls from the vty and such still recalculate the sort\nand store it in the peer.\n\n  There\u0027s a lot of other calls to peer_sort() that could be changed but some\nmaube tricky, someone more knowledgeable may try to reduce them.\n\n  This hits peer_sort() from 5th out of the stadium^H^H list on a full\ninternet table loading profiling session.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "14542f3edaa43113880e8bb69612c553f02bdf22",
      "tree": "247dd2b8ef6e1cea2d91d39989a943fddfb481ca",
      "parents": [
        "10f9bf3f2021f874e574e4ebae9413bee982ed2b"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:53 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:10 2012 +0200"
      },
      "message": "bgpd: debug buffers cleanup and optimization\n\nJust the first change pushes bgp_update_receive() from 6th to ~14th on a\nfull internet table load profiling session.\n\n* bgp_debug.c: (bgp_update_receive) The attrstr initialization is expensive,\n  moved under the debug conditional where it is used and just initialize the\n  first char to NULL.\n  (bgp_update_default_send) Initialize attrstr needed for bgp_dump_attr().\n  Moved some buffers used for printing IP[4|6] addresses under the debug\n  conditionals that use them and reduced its size.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "10f9bf3f2021f874e574e4ebae9413bee982ed2b",
      "tree": "5102a98c91d7d60380c07c08d0aaa32aa19cdbdf",
      "parents": [
        "f669f7d25f0f491d5e487897227ff434aef20406"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:52 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:07 2012 +0200"
      },
      "message": "bgpd: optimize bgp_nexthop_self()\n\n  This function scores 2nd, profiling a full internet table load. It\u0027s called\nfor every prefix received.\n  Instead of looping in the interface lists comparing addresses use a hash\nto mantain them.\n\n* bgpd.c: Init the own address hash.\n* bgp_nexthop.c: Introduce methods to maintain an own address hash.\n  (bgp_connected_add) add addresses to the hash.\n  (bgp_connected_delete) delete addresses from the hash.\n  (bgp_nexthop_self) lookup addresses in the hash. Removed the unused afi_t\n  parameter.\n* bgp_route.c: (bgp_update_main) Micro-optimization, rearranged condition to\n  not lookup the hash for bogus nexthops (0.0.0.0 or a class D/E address)\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f669f7d25f0f491d5e487897227ff434aef20406",
      "tree": "4b040b835be1d47b7eca7240b7d7aa4b9e6f177b",
      "parents": [
        "8692c506520f6b268525b80890702432c95f13c4"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:51 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:02 2012 +0200"
      },
      "message": "bgpd: optimize aspath string representation and assegments handling\n\n* bgp_aspath.h: Add str_len to struct aspath.\n* bgp_aspath.c: Save the aspath string representation length and use it\n  instead of strlen().\n  (aspath_make_str_count) assign the string buffer directly for\n  consistency with the string length and change the return type to void.\n  (aspath_dup) use str_len and copy the string instead of calling\n  aspath_make_str_count().\n  (assegment_data_new) change from XCALLOC to XMALLOC. All users initialize\n  the memory before use.\n  (assegment_data_free) unused, removed.\n  (aspath_intern) check that there\u0027s always a -\u003estr pointer.\n  (aspath_hash_alloc) reuse assegments and string representation instead of\n  copying them.\n  (aspath_parse) now aspath_hash_alloc does not dupes memory, free the\n  temporary structures only if the aspath it is in the hash.\n  (aspath_cmp_left) remove useless NULL initialization.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8692c506520f6b268525b80890702432c95f13c4",
      "tree": "0446939f0c84705bc0da3f23b45e97fd21886269",
      "parents": [
        "1b79fcb646f66682a62cf34f3cc343b1a9706699"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 15:17:34 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 21 15:48:30 2012 +0200"
      },
      "message": "bgpd: fix crash with vpnv4 soft-reconfiguration\n\nbgp_afi_node_get() expects a non-NULL prd for a SAFI_MPLS_VPN prefix.\n\n* bgp_route.c: pass down the struct prefix_rd from bgp_soft_reconfig_in()\n  and bgp_soft_reconfig_rsclient().\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "682ca04c4032bfbf31e51df2472345fda1ff7b2c",
      "tree": "ec75a530cd72d30b41f90c2ddbd2878791e3f95f",
      "parents": [
        "37beff6feb7c1715a19b59b8a87edcb6b50d5ac2"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Tue Apr 10 16:57:27 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:34 2012 +0200"
      },
      "message": "bgpd: cleanup, use correct buffer sizes for sockunion2str()\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "c63b83fe8d1addecc949258479b8d54180c4da60",
      "tree": "fbc58da3014db1cf74a2f8a91a33fe941968815d",
      "parents": [
        "d227617a972bb20a974be68bea5032e692a0970f"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Tue Apr 10 16:57:24 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:27 2012 +0200"
      },
      "message": "bgpd: Fix memory leak of some \"show ip bgp neighbor\" commands\n\nsockunion_str2su() use is prone to memory leaks. Remove it\u0027s use all over\nthe code.\n\nAt least these commands leaked a sockunion union:\n    - show ip bgp vpnv4 ... routes\n    - show ip bgp ... received prefix-filter\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "0c5ed3ed00f630ae95dc2dfd4b5a938683e2a99e",
      "tree": "9e478062fed566ce245113a166a6c8d1eec9fbe2",
      "parents": [
        "4fe080d7ee4c924a962d14423d94b4b8d8aba110"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Tue Apr 10 16:57:22 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:27 2012 +0200"
      },
      "message": "bgpd: Fix memory leak with \u0027set ip next-hop peer-address\u0027\n\nA route-map with the mentioned statement causes a memory leak for every\nprefix that matches.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "4fe080d7ee4c924a962d14423d94b4b8d8aba110",
      "tree": "d1dab521b8d05a95dccf26628fcf5ed629b738e7",
      "parents": [
        "ddc943dec3c017583f81cce388c7d453293156c7"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Fri Apr 13 13:46:08 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:27 2012 +0200"
      },
      "message": "bgpd: fix for route-maps with \"match peer local\" statements\n\nA route-map with a \u0027match peer local\u0027 statement it\u0027s shown like\n\u0027match peer (null)\u0027 on config output...\n\n... and it\u0027s unparsable on daemon startup.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "ddc943dec3c017583f81cce388c7d453293156c7",
      "tree": "a36d2bca91b1f3a7545a135b3bafccc40d0ca47b",
      "parents": [
        "8794e8d229dc9fe29ea31424883433d4880ef408"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Fri Apr 13 13:46:07 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed May 02 17:03:21 2012 +0200"
      },
      "message": "bgpd, zebra: Fix format for some metric outputs\n\nMetrics are unsigned values.\n\n  * bgpd/bgp_{debug,route,vty}.c,\n  * zebra/zebra_vty.c: replace %d with %u for metrics \u0026 distances\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\n[reworded commit message]\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "8794e8d229dc9fe29ea31424883433d4880ef408",
      "tree": "6ecfaad3044ad522eb1fc1e7aba989552eeec816",
      "parents": [
        "7621f336e2f346edee43227f0b1ef93fe769720b"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Feb 13 13:53:07 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed May 02 11:16:11 2012 +0100"
      },
      "message": "bgpd: Fix regression in args consolidation, total should be inited from args\n\n* bgp_attr.c: (bgp_attr_unknown) total should be initialised from the args.\n"
    },
    {
      "commit": "7621f336e2f346edee43227f0b1ef93fe769720b",
      "tree": "2bda36681214336bf55345cd47efb2c25fc460c2",
      "parents": [
        "1dba254e107dd0c4254d58e9304fc6293b46fd4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue May 01 16:24:35 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed May 02 11:02:11 2012 +0100"
      },
      "message": "bgpd: Make socket init separate, so unit tests work again.\n\n* Separate out BGP socket initialisation from bgp_get, and make it an\n  explicit function. Allows unit tests to work again and probably also\n  benefits dry-run.\n* bgpd.c: (bgp_get) move socket init out...\n  (bgp_socket_init) to here\n* bgp_main.c: and call it after dry-run.\n* bgpd.h: (bgp_socket_init) add prototype\n"
    },
    {
      "commit": "fac3c2453a06bce773a3f4ae6834f5f9a317b88c",
      "tree": "00b1e95d9fc2d148d1731967ccd104af3f7615c6",
      "parents": [
        "27f689793a25a66cf62561ac1d1302e01983a805"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Sat Apr 28 22:37:20 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Sat Apr 28 22:37:20 2012 +0200"
      },
      "message": "bgpd: fix up multipath merge breakage\n\nthe BGP multipath code was developed against a pre-f6f434b Quagga where\nbgp_attr_unintern and ecommunity_free took single-star pointers.  They\nnow take double-star pointers.\n\n  * bgpd/bgp_mpath.c: fix up bgp_attr_unintern \u0026 ecommunity_free calls.\n\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "fa4094ac49b4cc23589f5c5b7e608c4b4ee6ca04",
      "tree": "6ee1470a3db1d3e09e455a34a41b6b5db4296847",
      "parents": [
        "7939e016b3d4ecd2f5b8ad708b69607e05a084a6"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Fri Apr 13 13:46:09 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Apr 16 18:37:17 2012 +0200"
      },
      "message": "bgpd: Fix crash when disabling dampening (BZ#687)\n\n    Vladimir Podobaev reported that the following commands crashed the\ndaemon.\n\nrouter bgp 123\n bgp dampening\n no bgp dampening 1 2 3 4\n no bgp dampening\n\n    The problem was that bgp_damp_info_clean() tried to dereference the\nalready freed reuse_list array in the second call to \"no bgp dampening\".\n\n    Fixed by checking in bgp_damp_disable() that the dampening it\u0027s\nenabled before doing the cleanup.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\n"
    },
    {
      "commit": "6e493a44836d3b034ed3421e866878de3fbfcc5b",
      "tree": "4edabbbca2126db9aa29b9901ada950c635c17e2",
      "parents": [
        "9bb5870e26a4089f599b24adf822c4d1a9870a44",
        "3b381c32fc2c325cc4ffb9f9f30a7e96e9bd87c6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Apr 16 16:46:13 2012 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Mon Apr 16 16:46:17 2012 +0200"
      },
      "message": "bgpd: merge osr/quagga-osr-patches (BZ#700)\n\nthis merges a bgp capability negotiation fix where bgpd would fail if no\nmultiprotocol capability was present, but other capabilities were.\n"
    },
    {
      "commit": "3cf6c2b4e43f44a977d218c96c26250654ae333e",
      "tree": "e017cde2015fbf3ef6c250327428d7c6152aa8f7",
      "parents": [
        "01d7ff0a2166a422c56bd26f04fc22832a9e690b",
        "e96b312150d8e376c1ef463793d1929eca3618d5"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Mon Apr 09 00:25:15 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Mon Apr 09 00:25:15 2012 -0700"
      },
      "message": "Merge branch \u0027quagga\u0027 into google-bgp-multipath\n\nConflicts:\n\tbgpd/bgp_route.c\n"
    },
    {
      "commit": "3b381c32fc2c325cc4ffb9f9f30a7e96e9bd87c6",
      "tree": "b4eb46f5fe28b4734723c9ff4227a94a5bd32b4e",
      "parents": [
        "e96b312150d8e376c1ef463793d1929eca3618d5"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sun Feb 19 10:19:52 2012 -0800"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sun Apr 08 13:46:29 2012 -0700"
      },
      "message": "bgpd: fix issue in capability negotiation (BZ#700)\n\nAddress problem where bgpd would reject a session if a peer sent some\ncapabilities in its Open message, but did not include a Multiprotocol\nextensions capability. Note that the session would come up if there\nwere no capabilities at all in the Open message.\n\n  * Add the \u0027mp_capability\u0027 out parameter to\n    bgp_capability_parse(). Set it to \u00271\u0027 if a Multiprotocol\n    extensions capability is encountered.\n\n  * Switch on \u0027mp_capability\u0027 instead of \u0027capability\u0027 in the calling\n    functions to determine if the peer indicated the set of AFI/SAFIs\n    it supports.\n\n    The net result is that when a peer does not send an MP capability,\n    it is assumed to support the AFI/SAFIs configured for it locally.\n"
    },
    {
      "commit": "fa5831e85ae9ba7008fb4b4e2d4c7561ae5cb697",
      "tree": "5653d8127ad212e6d251fb078afef50fc262353b",
      "parents": [
        "fa61e16ddebe10a71d98bcd2eba0f630071ea4a7"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 27 11:54:04 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 27 11:54:04 2012 +0100"
      },
      "message": "bgpd: bgp_attr_flags_diagnose shouldn\u0027t assert\n\n* bgpd/bgp_attr.c: (bgp_attr_flags_diagnose) debug code for error-handling\n  paths probably shouldn\u0027t assert, instead it should just log that there\n  was no problem.\n"
    },
    {
      "commit": "fa61e16ddebe10a71d98bcd2eba0f630071ea4a7",
      "tree": "bc301257fdb4dbac4aedf1e17ffa3e6c00a77612",
      "parents": [
        "683f2b86d89fa356d3d1f7a54b0c269baa38b836"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 21:31:47 2012 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 27 11:48:38 2012 +0100"
      },
      "message": "bgpd: attr_parse call to attr_malformed should deal with PROCEED error case\n\n* bgpd/bgp_attr.c: (bgp_attr_parse) the invalid flag check call to\n  bgp_attr_malformed is pretty useless if it doesn\u0027t actually allow\n  for the PROCEED non-error case.\n"
    },
    {
      "commit": "683f2b86d89fa356d3d1f7a54b0c269baa38b836",
      "tree": "0788f6ea3f9079d3c1d775c49cd4cd881e44d204",
      "parents": [
        "bd471fea4ec965c71d6c2201745995092fbc36f6"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Mar 23 14:58:45 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Mar 27 11:48:35 2012 +0100"
      },
      "message": "bgpd: Fix silly mistake in bgp_attr_flag_invalid\n\n* bgp_attr.c: (bgp_attr_flag_invalid) flags is meant to be masked\n  off with the mask variable...\n"
    },
    {
      "commit": "bd471fea4ec965c71d6c2201745995092fbc36f6",
      "tree": "1d07d21b35101724d98107d47f4cd214800b4489",
      "parents": [
        "81c3e5006e5d29e305cbc0ab482617d7e570e8c0"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Mar 15 11:30:00 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 25 21:33:51 2012 +0100"
      },
      "message": "bgpd: malformed attribute error that can still proceed should fixup getp\n\n* bgp_attr.c: (bgp_attr_malformed) When a malformed attribute error can be\n  ignored, and BGP message processing may still proceed, the stream getp\n  should be adjusted to the end of the attribute - the caller may not have\n  consumed all the attribute. Problem noted by Martin Winter in bug 678.\n\n  Also, rename the \u0027startp\u0027 local to \u0027notify_datap\u0027, for clarity.\n"
    },
    {
      "commit": "9fc75742397cf942ca9d684815ce63058b2576ff",
      "tree": "3655b28f06ac2bdf9639b86e2df7c3abc525cd73",
      "parents": [
        "543fb49c316df9af2d25f08ba7e0da0305c36b5e",
        "5861739f8c38bc36ea9955e5cb2be2bf2f482d70"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 05 11:55:53 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 05 11:55:53 2012 +0000"
      },
      "message": "Merge remote-tracking branch \u0027quagga-gnu.org/master\u0027\n"
    },
    {
      "commit": "5861739f8c38bc36ea9955e5cb2be2bf2f482d70",
      "tree": "9675845a0b3be97362f3426430c6c2e499e8525c",
      "parents": [
        "50e7a3885da44f8f6c5c639e111109deb055cdf3"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 09 20:59:26 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Mar 04 23:55:02 2012 +0000"
      },
      "message": "bgpd: Open option parse errors don\u0027t NOTIFY, resulting in abort \u0026 DoS\n\n* bgp_packet.c: (bgp_open_receive) Errors from bgp_open_option_parse are\n  detected, and the code will stop processing the OPEN and return.  However\n  it does so without calling bgp_notify_send to send a NOTIFY - which means\n  the peer FSM doesn\u0027t get stopped, and bgp_read will be called again later.\n  Because it returns, it doesn\u0027t go through the code near the end of the\n  function that removes the current message from the peer input streaam.\n  Thus the next call to bgp_read will try to parse a half-parsed stream as\n  if it were a new BGP message, leading to an assert later in the code when\n  it tries to read stuff that isn\u0027t there. Add the required call to\n  bgp_notify_send before returning.\n* bgp_open.c: (bgp_capability_as4) Be a bit stricter, check the length field\n  corresponds to the only value it can be, which is the amount we\u0027re going to\n  read off the stream. And make sure the capability flag gets set, so\n  callers can know this capability was read, regardless.\n  (peek_for_as4_capability) Let bgp_capability_as4 do the length check.\n"
    },
    {
      "commit": "835315bfb49bff2b2fb354f2075c6d6693c2a151",
      "tree": "b9cc49ef796bcb1e3836ff670da930765815acfa",
      "parents": [
        "3ecab4c8549574d09f8d8366098939a8ad3da6c4"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Jan 18 12:28:30 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 28 18:35:45 2012 +0000"
      },
      "message": "bgpd: Move up flag-check calls, parcel up attr-parser args, and other cleanups\n\n* bgp_attr.h: (struct bgp_attr_parser_args) Attribute parsing context,\n  containing common arguments.\n* bgp_attr.c: (general) Move the bgp_attr_flag_invalid flag-check calls up,\n  out of each individual attr parser function, to be done once in attr_parse.\n\n  Similarly move the calculation of the \u0027total\u0027 attribute length field up\n  to attr_parse.\n\n  Bundle together common arguments to attr-parsing functions and helpers\n  into (struct bgp_attr_parser_args), so it can be passed by reference down\n  the stack \u0026 also de-clutter the argument lists \u0026 make it easier to\n  add/modify the context for attr-parsing - add local const aliases to avoid\n  modifying body of code too much. This also should help avoid cut \u0026 paste\n  errors, where calls to helpers with hard-coded attribute types are pasted\n  to other functions but the code isn\u0027t changed.\n\n  (bgp_attr_flags_diagnose) as above.\n  (bgp_attr_flag_invalid) as above.\n  (bgp_attr_{origin,aspath,as4_path,nexthop,med,local_pref,atomic}) as above.\n  (bgp_attr_{aggregator,as4_aggregator,community,originator_id}) as above\n  (bgp_attr_{cluster_list,ext_communities},bgp_mp_{un,}reach_parse) as above\n  (bgp_attr_unknown) as above.\n\n  (bgp_attr_malformed) as above. Also, startp and length have to be\n  special-cased, because whether or not to send attribute data depends\n  on the particular error - a separate length argument, distinct from\n  args-\u003elength, indicates whether or not the attribute data should be sent\n  in the NOTIFY.\n  (bgp_attr_aspath_check) Call to bgp_attr_malformed is wrong here, there is\n  no attribute parsing context - e.g. the \u0027flag\u0027 argument is unlikely to be\n  right, remove it. Explicitly handle the error instead.\n  (bgp_attr_munge_as4_attrs) Flag argument is pointless.\n\n  As the comment notes, the check here is pointless as AS_PATH presence\n  already checked elsewhere.\n\n  (bgp_attr_parse) Do bgp_attr_flag_invalid call here.\n  Use (struct bgp_attr_parser_args) for args to attr parser functions.\n  Remove out-of-context \u0027flag\u0027 argument to as4 checking functions.\n"
    },
    {
      "commit": "3ecab4c8549574d09f8d8366098939a8ad3da6c4",
      "tree": "7b8281980887ef0c57485be0ca6f382c054762cd",
      "parents": [
        "b5043aabb03567b46a16463d88a8afce2acda35e"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jan 17 13:31:33 2012 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Feb 28 18:35:45 2012 +0000"
      },
      "message": "bgpd: consolidate attribute flag checks\n\n* bgpd/bgp_attr.c: (attr_flags_values []) array of required flags for\n  attributes, EXTLEN \u0026 PARTIAL masked off as \"dont care\" as appropriate.\n  (bgp_attr_flag_invalid) check if flags may be invalid, according to\n  the above table \u0026 RFC rules.\n  (bgp_attr_*) Use bgp_attr_flag_invalid.\n  (bgp_attr_as4_aggregator) ditto, also take startp argument for the\n  NOTIFY data.\n  (bgp_attr_parse) pass startp to bgp_attr_as4_aggregator\n"
    },
    {
      "commit": "73bfe0bd9adb8e4dfcee7239e56a425c6d58f4e9",
      "tree": "e2f5dd3fc170a28d9aff622a8c5af77f3ebf7e45",
      "parents": [
        "f768f367bcd1f37a53c563495176a5a134caf234"
      ],
      "author": {
        "name": "G.Balaji",
        "email": "balajig81@gmail.com",
        "time": "Fri Sep 23 22:36:20 2011 +0530"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 23 14:31:05 2012 +0400"
      },
      "message": "bgpd: Addition of ipv6 network command in Multicast address family mode.\n\n      The patch adds the ipv6 network command in the BGP multicast address\n      family mode.\n"
    }
  ],
  "next": "c7ec179a95c1ed4fcd3d3be3f981c8c20dce534a"
}
