)]}'
{
  "log": [
    {
      "commit": "daefeb8755e194dd19a5f1910bc78d13c8147efb",
      "tree": "5e00bccf96a80388e7160aca7a9623c40f874b07",
      "parents": [
        "cffe7807c03b7edea005869086720e2f1fb070c6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Dec 08 17:42:12 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Dec 08 17:46:07 2014 +0100"
      },
      "message": "bgpd: set BGP_ATTR_MP_[UN]REACH_NLRI (fixes 1a211cb)\n\nUnfortunately, the attribute present bits for MP_REACH and MP_UNREACH\nwhich 1a211cb (\"bgpd: one more fix\"...) tests for are never set in their\ncorresponding attribute parsing functions.\n\nReported-by: Martin Winter \u003cmwinter@netdef.org\u003e\nFixes: 1a211cb \"bgpd: one more fix for tightening of check for missing well-known attributes\"\nCc: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "cffe7807c03b7edea005869086720e2f1fb070c6",
      "tree": "ba2106f3124a31e5cc3107ac75dc6aa16eab6970",
      "parents": [
        "273b1bd341afff86ba571e0be296d88dba627136"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Dec 07 03:27:13 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Dec 07 22:53:20 2014 +0100"
      },
      "message": "bgpd: stop startup timer on stopping BGP (fixes dd49eb1)\n\nbgp_delete() really needs to kill t_startup, otherwise after creating\nand quickly destroying a BGP instance it may fire on a deallocated\nstruct bgp, overwriting memory.\n\nReported-by: Martin Winter \u003cmwinter@netdef.org\u003e\nFixes: dd49eb1 (\"Fix BGP\u0027s use of restart bit.\")\nCc: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\n"
    },
    {
      "commit": "85c854aa720c02a56b1ecbbf12a763a326d11a63",
      "tree": "23928a702774512c806782e98f9c1aab3eb2f5c5",
      "parents": [
        "1a211cb369dc865a4e7e9f58a100c041af457262"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Sep 30 11:31:53 2014 +0300"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 25 15:57:12 2014 +0000"
      },
      "message": "bgpd: implement route-map set as-path prepend last-as\n\nIt picks up the AS to add from the aspath, or uses the peers\nAS number. Useful mostly in iBGP setups.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1a211cb369dc865a4e7e9f58a100c041af457262",
      "tree": "2f9bc481464ea27c46a0389134ee2e31df7e9c7a",
      "parents": [
        "ec98d90767b341877fb7f1547f025b946955899a"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Sat Nov 01 17:21:47 2014 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 25 15:57:12 2014 +0000"
      },
      "message": "bgpd: one more fix for tightening of check for missing well-known attributes\n\n* bgp_attr.c: (bgp_attr_check) The check for missing NEXT_HOP has the right\n  spirit, but wrong where it counts, on the logic.  It wouldn\u0027t catch a\n  missing NEXT_HOP on a v4-only UPDATE.  It would though have incorrectly\n  flagged next-hop as missing on multi-protocol-only UPDATEs.\n\n  Caught by Martin Winter with a test-suite.\n"
    },
    {
      "commit": "ec98d90767b341877fb7f1547f025b946955899a",
      "tree": "3a467ac8a7457c55d8c77ea2549d4eb721d8cc61",
      "parents": [
        "dd49eb1f0232cd0600a3565b44b5c066a8d7872d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Oct 14 11:14:06 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:16 2014 +0000"
      },
      "message": "bgpd: trivial, remove unneeded extra variable in bgp_capability_restart\n"
    },
    {
      "commit": "dd49eb1f0232cd0600a3565b44b5c066a8d7872d",
      "tree": "58598aae7dfc1c0ec2686314bf58b7e30d5e31a1",
      "parents": [
        "443010383e2c8e5dc1bc722d9e22a97c513b4647"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Tue Sep 30 14:36:38 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:10 2014 +0000"
      },
      "message": "Fix BGP\u0027s use of restart bit.\n\nbgpd-restart-bit-fix.patch\n\nISSUE:\n\nQuagga BGP doesn\u0027t send or use the restart-bit via the Graceful-Restart(GR)\ncapability. GR capability implementation isn\u0027t complete as per the RFC.\n\nPATCH:\n\nPatch uses BGP instance creation as the beginning of the startup period,\nand \u0027restart_time\u0027 is taken as the startup period. As a result, BGP will\nset the restart bit in the GR capability of the OPEN messages during the\nstartup period.\n\nAs an indication of quagga implementation\u0027s capability of sending End-Of-RIB,\nhelping a restarting neighbor, quagga BGP will now send global GR capability\nirrespective of the graceful-restart config in BGP and the address-family\nspecific GR capability will be sent only if the GR config is present.\nForwarding bit is not set assuming its not preserved.\n\nIncorporated feedback from David Lamparter via the quagga-dev mailing list.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "443010383e2c8e5dc1bc722d9e22a97c513b4647",
      "tree": "567e65b01392dcc8183ee92648d2d56709035c43",
      "parents": [
        "4bab6806914dbb4b43f376ebf966a034a0ea72cd"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 18:14:54 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:26:10 2014 +0000"
      },
      "message": "bgpd: remove unused variables\n"
    },
    {
      "commit": "ad5233a1bcdd7124992300673ad9c1035336eadd",
      "tree": "bde5fc3a4e11d7b66cada6edbcd0c4c04ef988b0",
      "parents": [
        "8306be211f1bcd5a19e74d08cde399e1b518ed25"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 14:19:57 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:51 2014 +0000"
      },
      "message": "Add set ipv6 next-hop peer-address command.\n\nIPv4 has the ability to specify the peer address with the keyword peer-address.\nIPv6 mandates the use of a specific global or local address only in setting the\nnext-hop in routemaps. This makes it cumbersome to configure some large networks\nwith BGP and IPv6. This patch fixes that deficiency.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "aed1b556cf2f55680ae09d7ad1a1f22729dea8c5",
      "tree": "26f9f14848768bd7bc77fc28c1469b970c41e84a",
      "parents": [
        "9562a7774b76df050d3e01632c6203796dc72c87"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Oct 21 16:59:01 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 28 10:46:24 2014 +0000"
      },
      "message": "bgpd: Fixes for recent well-known-attr check patch.\n\n* bgp_attr.c: Recent patch to tighten well-known attr checks and apply that\n  to all AFIs has some breakage with MP-extensions and GR, which needs to be\n  fixed.\n  (bgp_attr_check) Graceful Restart EoR can be an empty UPDATE for IPv4/uni.\n  MP-Ext allow UPDATE with just MP_UNREACH_NLRI. Check for these and return\n  proceed.\n  NEXT_HOP becomes optional, if MP_REACH_NLRI is present and there\u0027s no\n  v4 NLTI, update NEXT_HOP check accordingly.\n  Print the missing attr in string form in the log message.\n  (bgp_attr_parse) AS_PATH need not be there, so\n  bgp_attr_munge_as4_attrs call needs to be conditional on that.\n"
    },
    {
      "commit": "055086f70febc30fdfd94bb4406e9075d6934cd8",
      "tree": "2f511a8b1aca7b3e67e895321bbfef7d02f074b1",
      "parents": [
        "b166ea2dda9f04a8b75e0bf5adb7064580695f22"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Tue Sep 23 15:23:01 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "bgpd: well-known attr check only run for v4/uni, which could cause a crash.\n\n* ANVL testing by Martin Winter threw up a crash in bgpd in aspath_dup\n  called from bgp_packet_attribute, if attr-\u003easpath was NULL, on an IPv6\n  UPDATE.\n\n  This root cause is that the checks for well-known, mandatory attributes\n  were being applied only if an UPDATE contained the IPv4 NLRI and the\n  peer was configured for v4/unicast (i.e. not deconfigured). This is\n  something inherited from GNU Zebra, and never noticed before.\n\n* bgp_attr.c: (bgp_attr_parse) Move the well-known mandatory attribute\n  check to here, so that it can be run immediately after all attributes\n  are parsed, and before any further processing of attributes that might\n  assume the existence of WK/M attributes (e.g. AS4-Path).\n  (bgp_attr_munge_as4_attrs) Missing AS_PATH shouldn\u0027t happen here anymore,\n  but retain a check anyway for robustness - it\u0027s definitely a hard error\n  though.\n* bgp_attr.h: (bgp_attr_check) No longer needs to be exported, make static.\n* bgp_packet.c: (bgp_update_receive) Responsibility for well-known check\n  now in bgp_attr_parse.\n"
    },
    {
      "commit": "b2dd59ee0e74926278e128846624f5c93288223b",
      "tree": "d54b3798315a2b0b46f8730747584eff75b5e370",
      "parents": [
        "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 15:34:48 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:33:20 2014 +0100"
      },
      "message": "bgpd.c: Remove unused store to variable\n"
    },
    {
      "commit": "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49",
      "tree": "bd4a8d881336a1551146725d7ae06b3e68553e4d",
      "parents": [
        "010ebbbca6396f272cc2d50d147dd922dda68213"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 14:42:23 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:32:34 2014 +0100"
      },
      "message": "Fix most compiler warnings in default GCC build.\n\nFix lots of warnings. Some const and type-pun breaks strict-aliasing\nwarnings left but much reduced.\n\n* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to\n  (struct fifo), so just use that.  Makes it clearer the beginning of\n  (struct bgp_advertise) is compatible with with (struct fifo), which seems\n  to be enough for gcc.\n  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up\n  type-punning breaks strict aliasing warnings.\n* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.\n  (bgp_route_refresh_receive) fix an interesting logic error in\n  (!ok || (ret !\u003d BLAH)) where ret is only well-defined if ok.\n* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.\n* jhash.{c,h}: Can take const on * args without adding issues \u0026 fix warnings.\n* libospf.h: LSA sequence numbers use the unsigned range of values, and\n  constants need to be set to unsigned, or it causes warnings in ospf6d.\n* md5.h: signedness of caddr_t is implementation specific, change to an\n  explicit (uint_8 *), fix sign/unsigned comparison warnings.\n* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going\n  to fly given iov_base.\n* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always\n  true for address of static variable.  Correct but pointless warning in\n  this case, but use a 2nd pointer to shut it up.\n* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2\n  different 32 bit IDs into in (struct ospf6_route), and the resulting\n  type-pun strict-alias breakage warnings this causes.  Need to use 2\n  different fields to fix that warning?\n\ngeneral:\n\n* remove unused variables, other than a few cases where they serve a\n  sufficiently useful documentary purpose (e.g.  for code that needs\n  fixing), or they\u0027re required dummies.  In those cases, try mark them as\n  unused.\n* Remove dead code that can\u0027t be reached.\n* Quite a few \u0027no ...\u0027 forms of vty commands take arguments, but do not\n  check the argument matches the command being negated.  E.g., should\n  \u0027distance X \u003cprefix\u003e\u0027 succeed if previously \u0027distance Y \u003cprefix\u003e\u0027 was set?\n  Or should it be required that the distance match the previously configured\n  distance for the prefix?\n  Ultimately, probably better to be strict about this.  However, changing\n  from slack to strict might expose problems in command aliases and tools.\n* Fix uninitialised use of variables.\n* Fix sign/unsigned comparison warnings by making signedness of types consistent.\n* Mark functions as static where their use is restricted to the same compilation\n  unit.\n* Add required headers\n* Move constants defined in headers into code.\n* remove dead, unused functions that have no debug purpose.\n"
    },
    {
      "commit": "1520e4748129c4eb97ac3090bcc97149a1900611",
      "tree": "f4501a77bcb9e3ecabfd9dd5f80ee3e71cb35119",
      "parents": [
        "342a31bfda21616209366679ac522471e5772a2f",
        "90444ca35e3037ed43ec695428f0ef6d82f9a320"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 19 18:15:40 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Aug 19 18:15:40 2014 +0200"
      },
      "message": "*: merge branch stable/0.99.23\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4c005e3f65a1f5b4592b1ebbac392cbb1a710998",
      "tree": "ec2feadf6fe20841a179d31714a053863919ae1e",
      "parents": [
        "3ef0b877f08344aa52367794aa4ec32b12becd6d"
      ],
      "author": {
        "name": "John Glotzer",
        "email": "glotzer@amazon.com",
        "time": "Mon Aug 04 19:39:23 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:52:26 2014 +0200"
      },
      "message": "bgpd: memmove needed in community_del_val\n\nIn bgpd/bgp_community_del_val memcpy is used for potentially overlapping\nregions which is *not* safe. It may \"work\" in some cases but is not\nguaranteed to work in all cases. The case that I saw fail was on an\nx86_64 architecture with the number of bytes being moved/copied equal to\n8.\n\nThe way the code is written the uint32_t pointers will always differ by\n1, which is equivalent to a memcpy/memmove of regions that are 4 bytes\naway from one another. So the code failed while copying an 8 byte region\nto an address that is 4 bytes lower i.e. overlapping regions.\n\nInterestingly, the same architecture had no problems with a 12 byte\ncopy.\n\nWhen the code failed the communities were [200,300,400] and a call was\nmade to delete the 200 community. The result of this was an array that\nlooked like [400,400] which was uniquified to [400]. Of course the\nexpected result should have been [300, 400].\n\nOne additional point - in our production environment memmove would not\n*link* without including \u003cstring.h\u003e but in an isolated quagga git repo\nthis #include does not seem to be required and I see memmove is used in\nvtysh.c without this #include either.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "052573ee2319b21657a79e1b76a5c801701fa38c",
      "tree": "32a731414c3b0a70516461befd9c22baf77b0587",
      "parents": [
        "0ff692ed59696c534e6bfd0f9d6e83706fbbec4a",
        "f57000c0dbdd0e30e71b6651022392f284201e19"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:52:52 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:52:52 2014 +0200"
      },
      "message": "*: merge branch stable/0.99.23\n\nbgp extcommunity fixes from stable branch\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f57000c0dbdd0e30e71b6651022392f284201e19",
      "tree": "9a00b90323fa93de9ecb10c65f9f82824fda99b8",
      "parents": [
        "bb02b82354a80f74706efc5e4c914b3f89fb033e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:01:10 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: don\u0027t send NOTIFY twice for malformed attrs\n\nMost of the attribute parsing functions were already sending a notify,\nlet\u0027s clean up the code to make it happen only once.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "bb02b82354a80f74706efc5e4c914b3f89fb033e",
      "tree": "d7662f309686113478121b54859e048f44ee6ac2",
      "parents": [
        "f80f838b2f54738937ef1281b237710132195c44"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:01:00 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix IP endianness in debug message\n\ninet_ntop expects network byte order.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f80f838b2f54738937ef1281b237710132195c44",
      "tree": "e5dbb9062560ac02ad2e5baf62c8d820560c75d2",
      "parents": [
        "27bf90a14670283a899b96c56dd23f8413e0973e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 01:00:51 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix memory leak on malformed attribute\n\nWhen bgp_attr_parse returns BGP_ATTR_PARSE_ERROR, it may already have\nparsed and allocated some attributes before hitting that error.  Free\nthe attr\u0027s data before returning.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "27bf90a14670283a899b96c56dd23f8413e0973e",
      "tree": "e52498c5d70f6efef4d9a827b6974a2f597b2e30",
      "parents": [
        "73d78ea0153fd36a300be5fec2ef0fca34a67477"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:59:01 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix double free after extcommunity set (BZ#799)\n\nThe route-map extcommunity set code was incorrectly assuming that it\nowns the intern\u0027d struct ecommunity reference.  In reality, the intern\u0027d\nreference belongs to bgp_update_receive() and we\u0027re not supposed to\ntouch it in the route-map code.\n\nInstead, like all the other set commands, we use a on-heap but\nnon-intern\u0027d ecommunity to set the new value.  This is then either\nintern\u0027d in bgp_update_main/_rsclient() through bgp_attr_intern(), or\nfree\u0027d through bgp_attr_flush().\n\nThis fixes Bugzilla #799, which is that bgpd otherwise crashes with a\ndouble free.  The ecommunity got unintern\u0027d first in the route-map set\ncommand, then in bgp_update_receive().\n\nDebugged-by: Milan Kocian \u003cmilon@wq.cz\u003e\nReported-by: Florian S \u003cflorian@herrenlohe.de\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "73d78ea0153fd36a300be5fec2ef0fca34a67477",
      "tree": "a56383725b587c60c584db85cb1757588d3ea2ed",
      "parents": [
        "c460e5720c1101a6da53e5b753b736ac2c7981af"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:58:47 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: remove duplicate route-map extcommunity code\n\nroute_set_ecommunity_rt and _soo share almost all of their code.\nLet\u0027s remove one of the redundant copies.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c460e5720c1101a6da53e5b753b736ac2c7981af",
      "tree": "a60baf501e16e92a472e50bc2383bfd937ba0bfd",
      "parents": [
        "a4b5665f76d9e907a547c85c9c4a7a656c568b9d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 00:54:58 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sun Jun 29 12:47:21 2014 +0200"
      },
      "message": "bgpd: fix some bgp_update_main() attribute leaks\n\nbgp_update_main() wasn\u0027t doing anything to release attribute values\nset from route maps for two of its error paths.  To fix, pull up the\nappropriate cleanup from further down and apply it here.\n\nbgp_update_rsclient() doesn\u0027t have the issue since it immediately\ndoes bgp_attr_intern() on the results from bgp_{export,import}_modifier.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b304dcb8abc4e5b93f86a4024990980746e730be",
      "tree": "04ce8991a879b756c389370b5b7a9329fa13bb7b",
      "parents": [
        "9e7a53c179f6897128b24435452b5d3d0f8c715a"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue May 20 09:04:49 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:21:52 2014 +0300"
      },
      "message": "bgpd: route-map: share aspath object compilation code where possible\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "9e7a53c179f6897128b24435452b5d3d0f8c715a",
      "tree": "80a5cc6e9e6dc411587764d865a2bf5f489000ba",
      "parents": [
        "2aa640bd78b64821bde9a53ecdd1e96e91b20ae4"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Apr 24 10:22:37 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:20:20 2014 +0300"
      },
      "message": "bgpd: implement \"next-hop-self all\"\n\nAs specified in:\nhttp://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/command/irg-cr-book/bgp-m1.html#wp4972925610\n\nThis allows overriding next-hop for ibgp learned routes on an\nRR for reflected routes.\n\nEspecially useful for using iBGP in DMVPN setups. See:\nhttp://blog.ipspace.net/2014/04/changes-in-ibgp-next-hop-processing.html\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "2aa640bd78b64821bde9a53ecdd1e96e91b20ae4",
      "tree": "419c61e63e6484031512e69435cdeaa6695d9aca",
      "parents": [
        "a4b5665f76d9e907a547c85c9c4a7a656c568b9d"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue May 20 08:57:26 2014 +0300"
      },
      "committer": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Jun 25 21:20:20 2014 +0300"
      },
      "message": "bgpd: fix route-map comments\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\n"
    },
    {
      "commit": "6b0655a25194c7c0331154edaa6124cf783e5e5e",
      "tree": "c0c7d479f2684531249668210da27a60322ba395",
      "parents": [
        "fdb913aedb5a9807ad60715e8badb4f25d57acea"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:53:35 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:58:02 2014 +0200"
      },
      "message": "*: nuke ^L (page feed)\n\nQuagga sources have inherited a slew of Page Feed (^L, \\xC) characters\nfrom ancient history.  Among other things, these break patchwork\u0027s\nXML-RPC API because \\xC is not a valid character in XML documents.\n\nNuke them from high orbit.\n\nPatches can be adapted simply by:\n\tsed -e \u0027s%^L%%\u0027 -i filename.patch\n(you can type page feeds in some environments with Ctrl-V Ctrl-L)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "d9d4ae5157207b9b8bdb167983519a7ffb860f2c",
      "tree": "8919a83dcb99aac5fa0141f873525517d5e3b7ac",
      "parents": [
        "8c71e481dae11b7ae3f1ef561a989624b2ae84b6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen@networkplumber.org",
        "time": "Wed Jan 13 00:32:39 2010 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:30:22 2014 +0200"
      },
      "message": "bgpd: fix crash when allowas-in is done on inactive peer\n\nWhen allowas-in is changed on a peer that is not up, BGP would crash\ntrying to do route_refresh.  If peer is not up, there is no need\nto do notification or send.\n\nSigned-off-by: Stephen Hemminger \u003cstephen@networkplumber.org\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c71e481dae11b7ae3f1ef561a989624b2ae84b6",
      "tree": "4c13b76e1b9aedc45ad9b086be972ba4999ada03",
      "parents": [
        "2c13299a05e5544a5e79c2a970256a21f488a3fa"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Jan 15 06:57:57 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:32 2014 +0200"
      },
      "message": "bgpd: efficient NLRI packing for AFs !\u003d ipv4-unicast\n\nISSUE:\n\n  Currently, for non-ipv4-unicast address families where prefixes are\n  encoded in MP_REACH/MP_UNREACH attributes, BGP ends up sending one\n  prefix per UPDATE message. This is quite inefficient. The patch\n  addresses the issue.\n\nPATCH:\n\n  We introduce a scratch buffer in the peer structure that stores the\n  MP_REACH/MP_UNREACH attributes for non-ipv4-unicast families. This\n  enables us to encode multiple prefixes. In the end, the two buffers\n  are merged to create the UPDATE packet.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n[DL: removed no longer existing bgp_packet_withdraw prototype]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2c13299a05e5544a5e79c2a970256a21f488a3fa",
      "tree": "1d277afb9b346388e1aa244484c3af41dcd6a72e",
      "parents": [
        "66d2ead7df2db9144605c973fcd80b88df33f81b"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Sat Sep 07 07:07:20 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:08 2014 +0200"
      },
      "message": "bgpd: don\u0027t compare next-hop to router-id\n\nWhile announcing a path to a peer, the code currently compares the path\u0027s\nnext-hop with the peer\u0027s router-id. This can lead to problems as the router\nIDs are unique only within an AS. Suppose AS 1 sends route with next-hop\n10.1.1.1. It is possible that the speaker has an established BGP peering\nwith a router in AS 2 with router ID 10.1.1.1. The route will not be\nadvertised to that peer in AS 2.\n\nThe patch removes this check.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Shrijeet Mukherjee \u003cshm@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "000e157c852653288c5a1e6d0dee821c1765d315",
      "tree": "28a654105d50b5f55c9e865a223ba93366fe3839",
      "parents": [
        "5d804b439a4138c77f81de30c64f923e2b5c1340"
      ],
      "author": {
        "name": "Milan Kocian",
        "email": "milon@wq.cz",
        "time": "Fri Oct 18 07:59:38 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:51:19 2014 +0200"
      },
      "message": "bgpd: Fix condition allowas-in in rsclient code\n\nCurrently when you set neighbour\u0027s \u0027allowas-in\u0027 option on route server side\nyou get redistribution of the prefixes from this neighbour\u0027s table into all\nneighbour\u0027s tables which have the same AS number. I think that wanted behaviour\nis to allow import prefixes from neighbour\u0027s tables with the same AS num\ninto neighbour which has \u0027allowas-in\u0027 option set.\n\nSigned-off-by: Milan Kocian \u003cmilon@wq.cz\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5d804b439a4138c77f81de30c64f923e2b5c1340",
      "tree": "b63e3dc3a266d42311392e57c37e2b0a9855ff0b",
      "parents": [
        "5f9adb5d26d3af31b00c02084468e9f92b461b01"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Thu Sep 12 03:37:07 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: support TTL-security with iBGP\n\nTraditionally, ttl-security feature has been associated with EBGP\nsessions as those identify directly connected external peers. The\nGTSM RFC (rfc 5082) does not make any restrictions on type of\npeering. In fact, it is beneficial to support ttl-security for both\nEBGP and IBGP sessions. Specifically, in data centers, there are\ndirectly connected IBGP peerings that will benefit from the protection\nttl-security provides.\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\n[DL: function refactoring split out into previous 2 patches.  changes:\n     - bgp_set_socket_ttl(): ret type int -\u003e void\n     - is_ebgp_multihop_configured(): stripped peer \u003d\u003d NULL check\n     - comments/whitespace]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5f9adb5d26d3af31b00c02084468e9f92b461b01",
      "tree": "640a6c4e855697777f672c384c37fffd5ae72d07",
      "parents": [
        "ef0b0c3e95a1f30d6f338100c689feef8ad5cd6e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:15:02 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: factor out eBGP multihop check\n\nThe check for an eBGP multihop configuration is unwieldy;  factor it out\ninto a separate function.\n\n[DL: originally by Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e,\n     split off from the next commit]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ef0b0c3e95a1f30d6f338100c689feef8ad5cd6e",
      "tree": "9848b1d05c2e1424e464cac41be51f32d7b87d78",
      "parents": [
        "8da8689d91a6436c17aca5000b1426aaea47e23c"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 22:52:04 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:46 2014 +0200"
      },
      "message": "bgpd: factor out TTL setting\n\nTTL/min TTL are set from both bgp_accept() and bgp_connect().  Factor\nthem out so the following change to enable iBGP GTSM becomes more\nreadable.\n\n[DL: originally by Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e,\n     split off from the next commit]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8da8689d91a6436c17aca5000b1426aaea47e23c",
      "tree": "f4929119d4f41c668708d19374719765d7cb7f25",
      "parents": [
        "3374bef0412ac11815779f54321cbc4bf96da909"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Sep 11 03:33:55 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon May 19 23:25:39 2014 +0200"
      },
      "message": "bgpd: fix fast external fallover behavior\n\nISSUES\n\n1. When an interface goes down, the zclient callbacks are invoked\n   in the following order: (a) address_delete() that removes the\n   connected address list: ifp-\u003econnected, (b) interface_down()\n   that performs \"fast external fallover\" operation. The operation\n   relies on ifp-\u003econnected to look for peers that should be brought\n   down. That\u0027s a cyclic dependency.\n\n2. \u0027ttl-security\u0027 configuration handler sets peer-\u003ettl to\n   MAXTTL (so that BGP packets are sent with TTL\u003d255, as per the\n   requirement of ttl-security). This, however, is incompatible\n   with \u0027fast external fallover\u0027 as the fallover operation checks\n   for (ttl \u003d\u003d 1) to determine directly connected peers.\n\n3. The current fallover operation does not work for IPv6 address family.\n\nPATCH\n\n1. The patch removes the dependency on \u0027ifp-\u003econnected\u0027 list for fast\n   fallover. The peer already contains a nexthop structure that reflects\n   the peering address. The nexthop structure has a pointer to the\n   interface (ifp) that peering address resolves to. Everytime the TCP\n   connection succeeds, the ifp is updated. The patch uses this ifp in\n   the interface_down() callback for a match for the peers that should be\n   brought down.\n\n2. The evaluation for directly connected peering is enhanced as\n   \u0027peer-\u003ettl \u003d\u003d 1\u0027 OR \u0027peer-\u003egtsm_hops \u003d\u003d 1\u0027. Thus a ttl-security\n   configuration on the peer with one hop is directly connected and\n   should be brought down under \u0027fast external fallover\u0027.\n\n3. Because of fix (1), IPv6 address family works automatically.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3374bef0412ac11815779f54321cbc4bf96da909",
      "tree": "bba5f91b10c31e5987aa2d02d44de7d5c74c537c",
      "parents": [
        "48fc05fb7e6ee44db9f73f3194bfd4738b7f9dc1"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Thu Jan 09 00:31:22 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 20:34:53 2014 +0200"
      },
      "message": "bgpd: increase TCP socket buffer size\n\nBGP does not respond fairly in high scale.  As the number of BGP peers\nand prefixes increase, triggers like interface flaps which lead to BGP\npeer flaps, cause blockage in bgp_write.\n\nBGP does handle the cases of TCP socket buffer full by queuing a write\nevent back, there is no functional issue there as such. Still,\nincreasing the peer socket buffer size should help reduce event queueing\nin BGP.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n[DL: patch split, this is item 3.]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "48fc05fb7e6ee44db9f73f3194bfd4738b7f9dc1",
      "tree": "e0c11382f69fd3159600d18150f846dc104d8e43",
      "parents": [
        "6aa136f1eaeb0dfc1e39e6c2cd6380a399ef126f"
      ],
      "author": {
        "name": "Vipin Kumar",
        "email": "vipin@cumulusnetworks.com",
        "time": "Thu Jan 09 00:31:22 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 20:27:12 2014 +0200"
      },
      "message": "bgpd: fix O_NONBLOCK on outgoing connects\n\nBGP was setting sockets to be non-blocking only for the accepted passive\npeers.  As a fix, setting the BGP sockets to be non-blocking even for\nthe active peers.\n\nSigned-off-by: Vipin Kumar \u003cvipin@cumulusnetworks.com\u003e\nReviewed-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\n[DL: patch split, this is item 1.]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6aa136f1eaeb0dfc1e39e6c2cd6380a399ef126f",
      "tree": "b1313a9961fe29a4ccf91571a5c772545351084d",
      "parents": [
        "b366b518401e0b0652cd70d297d3fb67b4803db0"
      ],
      "author": {
        "name": "Vitaliy Senchyshyn",
        "email": "vsenchyshyn@toroki.com",
        "time": "Wed Oct 02 10:40:20 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:54:04 2014 +0200"
      },
      "message": "bgpd: send notify in OpenSent when stopping manually\n\nThe issue it fixes is that the notification message is not sent to a\nsecond peer when bgp is stopped manually.\n\nAccording to BGP RFC4271, section 8.2.2, regarding the FSM transitions,\nin OpenSent state:\n\nIf a ManualStop event (Event 2) is issued in the OpenSent state, the\nlocal system:\n\n  * sends the NOTIFICATION with a Cease,\n  * sets the ConnectRetryTimer to zero,\n  * releases all BGP resources,\n  * drops the TCP connection,\n  * sets the ConnectRetryCounter to zero, and\n  * changes its state to Idle.\n\nI\u0027ve added a check for OpenSent state when the notification is sent from\nthe functions which are called from the CLI commands which\ndirectly/indirectly stop/restart BGP.\n\nAcked-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b366b518401e0b0652cd70d297d3fb67b4803db0",
      "tree": "5f05079e281f0ec503ee408b1f7502cc49cad82e",
      "parents": [
        "689bb66c6a92d238bed1a8b0920438c5a2271966"
      ],
      "author": {
        "name": "Boian Bonev",
        "email": "bbonev@ipacct.com",
        "time": "Mon Sep 09 16:41:35 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 15 19:23:36 2014 +0200"
      },
      "message": "bgpd: display multipath status in \"show ip bgp\"\n\nThe output of \"show ip bg\" does not show whether and which routes are\ninstalled as multipath routes along the best route:\n\nBGP table version is 0, local router ID is 10.10.100.209\nStatus codes: s suppressed, d damped, h history, * valid, \u003e best, i - internal,\n              r RIB-failure, S Stale, R Removed\nOrigin codes: i - IGP, e - EGP, ? - incomplete\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003ei1.0.0.0/24       10.10.100.1              1    111      0 15169 i\n* i                 10.10.100.2              1    111      0 15169 i\n* i                 10.10.100.3              1    111      0 65100 15169 i\n\nThis patch adds a new status code that is showing exactly which routes\nare used as multipath:\n\nBGP table version is 0, local router ID is 10.10.100.209\nStatus codes: s suppressed, d damped, h history, * valid, \u003e best, \u003d multipath,\n              i internal, r RIB-failure, S Stale, R Removed\nOrigin codes: i - IGP, e - EGP, ? - incomplete\n\n   Network          Next Hop            Metric LocPrf Weight Path\n*\u003ei1.0.0.0/24       10.10.100.1              1    111      0 15169 i\n*\u003di                 10.10.100.2              1    111      0 15169 i\n* i                 10.10.100.3              1    111      0 65100 15169 i\n\nThe inconsistency in the status code legend (\"i - internal\" vs. \"i internal\")\ninherent from old IOS was fixed. It had to be touched anyways.\n\nSigned-off-by: Boian Bonev \u003cbbonev at ipacct.com\u003e\n[DL: rewrap long line, clean whitespace in same chunk]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "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"
    }
  ],
  "next": "6d85b15bbb2fd3c263d5d4b402c88ff348af877b"
}
