)]}'
{
  "log": [
    {
      "commit": "eeef0db2e9260fe76acb328a339025c432eb7c22",
      "tree": "48bc6b2b1e3e71658fcf345ed381d3d4bf10c8c4",
      "parents": [
        "ee162617ead116ebcda93b145a043231647b3380"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Oct 14 08:50:38 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:22 2015 +0000"
      },
      "message": "lib: Fix duplicate variable name in smux.c and vty.c\n\nBoth smux.c and vty.c have the same:\nstatic struct thread_master *master;\n\nas global variables for the file.  This can and will lead to confusion\nname the variables something appropriate for the file it is in.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "d8aa4beab72cdd2c2d78f9e624fd4b704eec488f",
      "tree": "b2f1db2c50ce548175240b9621df6df936cf44a6",
      "parents": [
        "7125293d65d73a451ec203c8c1630c236171f5a3"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Mon Sep 28 20:10:40 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:21 2015 +0000"
      },
      "message": "vtysh: Fix Quagga.conf file read in.\n\nThere exists a sequence of cli commands that are successfully read in by bgpd.conf, but\nnot by a consolidated Quagga.conf.\n\nThis issue stems from the fact that the consolidated config file attempts to match the\ncurrent node + 1 node up the tree, while the individual config file searches for matches\nall the way up the tree.\n\nQuagga.conf read-in relies on vtysh_cmd.c command parsing which puts all nodes\nat CONFIG_NODE and if a match is found CMD_SUCCESS_DAEMON is returned.  This signals to\nthe parser to call the appropriate daemon with the comamnd.\n\nbgp as an example has three levels of config node\u0027s.  If you are reading in a config node\nat the 3rd level(say address-family ipv6) then transition to another node under bgp it will\nnot work in Quagga.conf because the code only looked up one node and was at CONFIG_BGP when it failed\nto find a match.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nReviewed-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "7125293d65d73a451ec203c8c1630c236171f5a3",
      "tree": "f9d118c9a8f8374d69fb9c75c87531a2ca478fb2",
      "parents": [
        "fd1c1a133af47ae5533a5ed41b73ff62e7aa1058"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Sep 24 09:25:19 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 27 10:53:21 2015 +0000"
      },
      "message": "lib: zclient.c remove extern struct thread_master *\n\nzclient.c depended upon link time inclusion of a\nextern struct thread_master *master.  This is a violation of the\nnamespace of the calling daemon.  If a library needs the pointer\npass it in and save it for future use.\n\nThis code change also makes the zclient code consistent with\nthe other lib functions that need to schedule work on your behalf\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "04a3aabf58d95d01c4c8168eeff43cf9d9892eee",
      "tree": "c810fdc3ff48d185bb34ce73e986a2c88da3780f",
      "parents": [
        "0bc874b88cf86fca4b18f3672a441ed142fc499d"
      ],
      "author": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Thu Sep 03 10:47:43 2015 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:45 2015 +0100"
      },
      "message": "vrf: add a runtime check before playing with netns\n\nThis patch adds a runtime check to determine if netns are available. Some\nsystems like OpenWRT have the system call setns() but don\u0027t have the kernel\noption CONFIG_NET_NS enabled.\n\nReported-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nTested-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fbc3e97d747862fd47f711c9f15b8166bdf94b18",
      "tree": "1474fb1b2c1210231731bfdbc195da31fd3d7c02",
      "parents": [
        "4fdb5f401eb277fa54d80e99d241bd9b03895a6a"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed Aug 12 14:32:47 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "lib: Remove unused \u0027show memory XXX\u0027 functionality\n\nThe \u0027show memory XXXX\u0027 functionality is not used at all.\nThis removes the unused code\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "4fdb5f401eb277fa54d80e99d241bd9b03895a6a",
      "tree": "9048bb26214861b9bef418c7d5bee5f213bf5d6f",
      "parents": [
        "a9d4cb33faa6af622240190a80f41c4672374925"
      ],
      "author": {
        "name": "Denil Vira",
        "email": "denil@cumulusnetworks.com",
        "time": "Thu Jul 23 06:52:16 2015 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "lib: Fix Free Pointer dereference in lib/filter.c\n\nCoverity Scan ID 23056. access is accessed after free in access_list_delete\n\nSigned-off-by: Denil Vira \u003cdenil@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "a9d4cb33faa6af622240190a80f41c4672374925",
      "tree": "9590bb1715d7418b50a742a3c83363d4e4b67755",
      "parents": [
        "f733280419f18b1a0e3b06ec3681781689d57053"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Thu Sep 17 10:54:25 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "lib/zclient: Consolidate error reporting for zclient_read_header\n\nAll functions that call zclient_read_header immediately turn around\nand check to ensure that the version and marker fields are correct\nMove this code into zclient_read_header\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "f733280419f18b1a0e3b06ec3681781689d57053",
      "tree": "95e34d98165eac4245f5b51cb2727a6b57f88259",
      "parents": [
        "e675678789b11d175a08a9e0be73917aa8f23a15"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Jul 17 22:36:57 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:44 2015 +0100"
      },
      "message": "lib/command: Fix optional arguments with description interactions\n\nIf you have a cli like this:\n\"neighbor WORD interface {v6only}\"\n\nWhen in the cli you hit ? after entering v6only you get this:\n\ntor-11(config-router)# neighbor swp1 interface v6only\n% There is no matched command.\ntor-11(config-router)# neighbor swp1 interface v6only\n\nWith this fix we now see:\ntor-22(config-router)# neighbor swp1 interface v6only\n  \u003ccr\u003e\ntor-22(config-router)# neighbor swp1 interface v6only\n\nThis behavior is now consistent with non-optional last\narguments.\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "13c2a3db503fde67f647fa58fd4e1077517ebb5c",
      "tree": "506bead8b2040e9c216f18e76df3091a5924a31f",
      "parents": [
        "e8441a81f6c9f73bc8a25669003abffb40066703"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Sep 15 16:16:42 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "lib/workqueue: Add trivial work_queue_is_scheduled helper\n"
    },
    {
      "commit": "e8441a81f6c9f73bc8a25669003abffb40066703",
      "tree": "4d15512b9a10d863fa831d9b611f1d9092ee74ae",
      "parents": [
        "7ef4221c3f85121edb68a6a54ebd6bb167408e47"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@jakma.org",
        "time": "Tue Sep 15 16:15:27 2015 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:42 2015 +0100"
      },
      "message": "build/lib: Check for and include stdbool.h by default\n\n* stdbool.h should be widely supported by now, and the \u0027bool\u0027 type makes\n  more semantic sense than an integer type for boolean values.\n"
    },
    {
      "commit": "2ef762ed9b88e5745012c5829f8f526c95443ddf",
      "tree": "8b2867c9c5938551f7e86881104dad61be3f18b6",
      "parents": [
        "c920e510d09c6c4ab63a3da5375009442a950f82"
      ],
      "author": {
        "name": "Michael Rossberg",
        "email": "michael.rossberg@tu-ilmenau.de",
        "time": "Mon Jul 27 07:56:25 2015 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "ospfd: Fast OSPF convergence\n\nWhen considering small networks that have extreme requirements on\navailability and thus convergence delay, the timers given in the OSPF RFC\nseem a little “conservative”, i.e., the delay between accepted LSAs and the\nrate at which LSAs are sent.  Cisco introduced two commands \u0027timers throttle\nlsa all’ and \u0027timers lsa arrival’, which allow operators to tune these\nparameters.\n\nI have been writing a patch to also support \u0027timers lsa arrival’ fully and\n‘timers throttle lsa all’ (without the throttling part) also in quagga.\n"
    },
    {
      "commit": "794c4735f81289d9fc603b5fd5e4a5d39dbb5ca5",
      "tree": "b81f6a549fe0916bdf25b5a5a88745c34a4e816d",
      "parents": [
        "a29c8a23a35b3f94c6aea5b3b7578b5dbf81ad71"
      ],
      "author": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Sep 16 09:42:36 2015 +0200"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:41 2015 +0100"
      },
      "message": "bgpd/pimd: fix zAPI parsing\n\nCommit c99f3481a598 has changed the API. Now, the vrfid has been added in\nthe header, thus we must read it before parsing the rest of the message.\n\nTo ease code maintenance, let\u0027s add a new function to read a zAPI header.\n\nFixes: c99f3481a598 (\"*: add VRF ID in the API message header\")\nReported-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\nTested-by: Martin Winter \u003cmwinter@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "030674d7f9b2a25d4d337459ef32287de8f9879d",
      "tree": "a826aef3d6a95cf7816e65fef77cf39946d0463b",
      "parents": [
        "6064613154b6302606547735f0c466910a6443ea"
      ],
      "author": {
        "name": "Jafar Al-Gharaibeh",
        "email": "jafar@atcorp.com",
        "time": "Thu Jun 11 18:29:02 2015 -0500"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 21 16:30:20 2015 +0100"
      },
      "message": "pimd: add support for configuring multicast static routes\n\nHi,\n\nThis patch adds the ability to configure multicast static routes\ndirectly into pimd. Two source files are introduced to implement the new\nfeature in addition to changes to existing files.\n\nHere is how it can be used the CLI:\n\ninterface \u003cincoming interface\u003e\nip mroute \u003coutgoing interface\u003e \u003cgroup addr\u003e                          #\nfor asm\nor ip mroute \u003coutgoing interface\u003e \u003cgroup addr\u003e \u003csource\u003e    # for ssm\n\nPlease let me know if you have any questions or concerns,\n\nRegards,\nJafar\n\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "f31bab4fbf367a4417784ba9873e524d42242036",
      "tree": "c624feca43613e738e4756ad6b3b555c1402e465",
      "parents": [
        "771626860adfc30c00f70d993ccb8f4d7c0c0c63"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Fri Jun 19 19:26:19 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 14:39:26 2015 +0100"
      },
      "message": "Quagga: Fix code to use srandom/random\n\nQuagga was using a mix of srand/rand and srandom/random.\nConsolidate to use srandom/random which are the POSIX\nversions of random number generators\n\nSigned-off-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "1ed8ce47b922b71f3b3cdd661e647bbe7ed2eca7",
      "tree": "8991923fd48342254db78275f2776480b824e18d",
      "parents": [
        "84c3840c7157438b5cb2e324d184ca08ac07fb41"
      ],
      "author": {
        "name": "Wenjian Ma",
        "email": "ytmwjian@163.com",
        "time": "Fri Jun 19 10:53:26 2015 +0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 12:32:29 2015 +0100"
      },
      "message": "lib, stream: fix stream sanity checks\n\nBecause  operator \"!\" has higher priority  than \"\u0026\u0026\",\nSo we put the \"\u0026\u0026\" expression in \"()\" to check both getp and endp.\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "55cfa2f190620f7c711944637659bc208970324d",
      "tree": "13e8a607e6e552da0f4218b4a8473dbcd738845b",
      "parents": [
        "c99f3481a598e9cadd1de96714f6b5df9ad85c4a"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Jul 03 18:24:34 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 17:26:27 2015 +0200"
      },
      "message": "lib, vtysh: support multiple VRFs by using linux netns\n\nWe realize VRFs with linux netns by default. The main job is\nto associate a VRF with a netns. Currently this is done by\nthe configuration:\n\n  [no] vrf N netns \u003cnetns-name\u003e\n\nThis command is also available in vtysh and goes to only\nzebra, because presently only zebra supports multiple VRF.\n\nA file descriptor is added to \"struct vrf\". This is for the\nassociated netns file. Once the command \"vrf N netns NAME\"\nis executed, the specified file is opened and the file\ndescriptor is stored in the VRF N. In this way the\nassociation is formed.\n\nIn vrf_socket(), we first switch to the specified VRF by\nusing the stored file descriptor, and then can allocate\na socket which is working in the associated netns.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\n"
    },
    {
      "commit": "c99f3481a598e9cadd1de96714f6b5df9ad85c4a",
      "tree": "aac6df566f28c13fce5c9f02275f159fab73a24d",
      "parents": [
        "758fb8f99a7bfac3d31c419fd1a5694fc5f33f6a"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Oct 16 09:52:36 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 10:24:12 2015 +0200"
      },
      "message": "*: add VRF ID in the API message header\n\nThe API messages are used by zebra to exchange the interfaces, addresses,\nroutes and router-id information with its clients. To distinguish which\nVRF the information belongs to, a new field \"VRF ID\" is added in the\nmessage header. And hence the message version is increased to 3.\n\n* The new field \"VRF ID\" in the message header:\n\n    Length    (2 bytes)\n    Marker    (1 byte)\n    Version   (1 byte)\n    VRF ID    (2 bytes, newly added)\n    Command   (2 bytes)\n\n  - Client side:\n\n    - zclient_create_header() adds the VRF ID in the message header.\n    - zclient_read() extracts and validates the VRF ID from the header,\n      and passes the VRF ID to the callback functions registered to\n      the API messages.\n    - All relative functions are appended with a new parameter \"vrf_id\",\n      including all the callback functions.\n    - \"vrf_id\" is also added to \"struct zapi_ipv4\" and \"struct zapi_ipv6\".\n      Clients need to correctly set the VRF ID when using the API\n      functions zapi_ipv4_route() and zapi_ipv6_route().\n    - Till now all messages sent from a client have the default VRF ID\n      \"0\" in the header.\n    - The HELLO message is special, which is used as the heart-beat of\n      a client, and has no relation with VRF. The VRF ID in the HELLO\n      message header will always be 0 and ignored by zebra.\n\n  - Zebra side:\n\n    - zserv_create_header() adds the VRF ID in the message header.\n    - zebra_client_read() extracts and validates the VRF ID from the\n      header, and passes the VRF ID to the functions which process\n      the received messages.\n    - All relative functions are appended with a new parameter \"vrf_id\".\n\n* Suppress the messages in a VRF which a client does not care:\n\n  Some clients may not care about the information in the VRF X, and\n  zebra should not send the messages in the VRF X to those clients.\n\n  Extra flags are used to indicate which VRF is registered by a client,\n  and a new message ZEBRA_VRF_UNREGISTER is introduced to let a client\n  can unregister a VRF when it does not need any information in that\n  VRF.\n\n  A client sends any message other than ZEBRA_VRF_UNREGISTER in a VRF\n  will automatically register to that VRF.\n\n  - lib/vrf:\n\n    A new utility \"VRF bit-map\" is provided to manage the flags for\n    VRFs, one bit per VRF ID.\n\n    - Use vrf_bitmap_init()/vrf_bitmap_free() to initialize/free a\n      bit-map;\n    - Use vrf_bitmap_set()/vrf_bitmap_unset() to set/unset a flag\n      in the given bit-map, corresponding to the given VRF ID;\n    - Use vrf_bitmap_check() to test whether the flag, in the given\n      bit-map and for the given VRF ID, is set.\n\n  - Client side:\n\n    - In \"struct zclient\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          default_information\n      These flags are extended for each VRF, and controlled by the\n      clients themselves (or with the help of zclient_redistribute()\n      and zclient_redistribute_default()).\n\n  - Zebra side:\n\n    - In \"struct zserv\", the following flags are changed from\n      \"u_char\" to \"vrf_bitmap_t\":\n          redist[ZEBRA_ROUTE_MAX]\n          redist_default\n          ifinfo\n          ridinfo\n\n      These flags are extended for each VRF, as the VRF registration\n      flags. They are maintained on receiving a ZEBRA_XXX_ADD or\n      ZEBRA_XXX_DELETE message.\n\n      When sending an interface/address/route/router-id message in\n      a VRF to a client, if the corresponding VRF registration flag\n      is not set, this message will not be dropped by zebra.\n\n    - A new function zread_vrf_unregister() is introduced to process\n      the new command ZEBRA_VRF_UNREGISTER. All the VRF registration\n      flags are cleared for the requested VRF.\n\n  Those clients, who support only the default VRF, will never receive\n  a message in a non-default VRF, thanks to the filter in zebra.\n\n* New callback for the event of successful connection to zebra:\n\n  - zclient_start() is splitted, keeping only the code of connecting\n    to zebra.\n\n  - Now zclient_init()\u003d\u003ezclient_connect()\u003d\u003ezclient_start() operations\n    are purely dealing with the connection to zbera.\n\n  - Once zebra is successfully connected, at the end of zclient_start(),\n    a new callback is used to inform the client about connection.\n\n  - Till now, in the callback of connect-to-zebra event, all clients\n    send messages to zebra to request the router-id/interface/routes\n    information in the default VRF.\n\n    Of corse in future the client can do anything it wants in this\n    callback. For example, it may send requests for both default VRF\n    and some non-default VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "758fb8f99a7bfac3d31c419fd1a5694fc5f33f6a",
      "tree": "4aa860a2b96ec03622376bf3753840155ab478fe",
      "parents": [
        "d6cf5134c05a7890738411852d9357ee5bb322f3"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Thu Jul 03 18:23:09 2014 +0800"
      },
      "committer": {
        "name": "Nicolas Dichtel",
        "email": "nicolas.dichtel@6wind.com",
        "time": "Wed Jun 03 10:23:32 2015 +0200"
      },
      "message": "zebra, lib/memtypes.c: the netlink sockets work per VRF\n\nThis patch lets the netlink sockets work per VRF.\n\n* The definition of \"struct nlsock\" is moved into zebra/rib.h.\n\n* The previous global variables \"netlink\" and \"netlink_cmd\" now\n  become the members of \"struct zebra_vrf\", and are initialized\n  in zebra_vrf_alloc().\n\n* All relative functions now work for a specific VRF, by adding\n  a new parameter which specifies the working VRF, except those\n  functions in which the VRF ID can be obtained from the interface.\n\n* kernel_init(), interface_list() and route_read() are now also\n  working per VRF, and moved from main() to zebra_vrf_enable().\n\n* A new function kernel_terminate() is added to release the\n  netlink sockets. It is called from zebra_vrf_disable().\n\n* Correct VRF ID, instead of the previous VRF_DEFAULT, are now\n  passed to the functions of processing interfaces or route\n  entries.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "fb2bfc1ba2416c1561bc9bfb30dfb5adf3e65616",
      "tree": "361484e61445a5e7efc9dfab2d6c47cd4c63846c",
      "parents": [
        "ac19a449261bf69e83827f4bb0c6e5526277b41b"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:08 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 07:48:34 2015 +0200"
      },
      "message": "lib/vrf: enable / disable a VRF\n\nA new API vrf_is_enabled() is defined to check whether a VRF is ready\nto use, that is, to allocate resources in that VRF. Currently there\u0027s\nonly one type of resource: socket.\n\nTwo new hooks VRF_ENABLE_HOOK/VRF_DISABLE_HOOK are introduced to tell\nthe user when a VRF gets ready or to be unavailable.\n\nThe VRF_ENABLE_HOOK callback is called in the new function vrf_enable(),\nwhich is used to let the VRF be ready to use. Till now, only the default\nVRF can be enabled, and we need do nothing to enable the default, except\ncalling the hook.\n\nThe VRF_DISABLE_HOOK callback is called in the new function\nvrf_disable(), which is used to let the VRF be unusable. Till now,\nit is called only when the VRF is to be deleted.\n\nA new utility vrf_socket() is defined to provide a socket in a given\nVRF to the user.\n\nTill now before introducing a way of VRF realization, only the default\nVRF is enabled since its birth, and vrf_socket() creates socket for\nonly the default VRF.\n\nThis patch defines the framework of the VRF APIs. The way they serve\nthe users is:\n- vrf_is_enabled() is used to tell the user whether a VRF is usable;\n- users are informed by the VRF_ENABLE_HOOK that a VRF gets usable;\n  they can allocate resources after that;\n- users are informed by the VRF_DISABLE_HOOK that a VRF is to be\n  unavailable, and they must release the resources instantly;\n- vrf_socket() is used to provide a socket in a given VRF.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "471ea39ce54537194ff2f22420589ddec5ef5ada",
      "tree": "65b04ef42d4ece7e4a44d230fcc0a15f388755c4",
      "parents": [
        "5a5702fac5458d63d7a099c4db7ac387afefd2de"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:40:00 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:59:36 2015 +0200"
      },
      "message": "lib, zebra, vtysh: configure an interface in non-default VRF\n\nIntroduce a new command \"interface IFNAME vrf N\" to configure an\ninterface in the non-default VRF.\n\nTill now, only zebra uses this command. Other daemons will install\nthe command when they support multiple VRFs.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5a5702fac5458d63d7a099c4db7ac387afefd2de",
      "tree": "0547fea145cb10fb9ed6d9493963d374556eb65f",
      "parents": [
        "126215c1238eb42cc92d23aefbe1fac3b204438f"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:59 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:59:28 2015 +0200"
      },
      "message": "lib: move the interface list into \"struct vrf\"\n\nAn interface belongs to a specific VRF. So move the interface list\ninto the \"struct vrf\".\n\n* vrf.c/vrf.h:\n  - add a new member \"struct list *iflist\" to the the \"struct vrf\";\n  - call if_init() in vrf_new();\n  - call if_terminate() in vrf_delete();\n  - add utilities to access the interface list and VRF ID in the\n    specified VRF.\n\n* if.c/if.h:\n  - the global \"iflist\" now only exists for the default VRF;\n  - the global \"if_master\" is initialized on the definition;\n  - in if_create(), the interface is added into the list in the\n    specified VRF; if the VRF does not exist, create one;\n  - add parameters to if_init()/if_terminate() so that the\n    interface list in the VRF can be initialized/destroyed;\n  - in if_dump_all() scan the interfaces in all the VRFs;\n  - add a command \"show address vrf N\" to show addresses in a\n    specified VRF;\n  - add a command \"show address vrf all\" to show addresses in all\n    VRFs;\n  - new APIs ifxxx_vrf() are added to access an interface in a\n    specified VRF.\n\nThe old interface APIs (the global variable \"iflist\" and the API\nfunctions) are not changed to keep the backward compatibility.\nThe new APIs are used in the daemons which support multiple VRFs\n(till now only zebra).\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "126215c1238eb42cc92d23aefbe1fac3b204438f",
      "tree": "22910b50f39003e297efc6236711581cbf3b2ada",
      "parents": [
        "2fc97f6335dd5d7df2c285b363c6ef56bb98dcf8"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:58 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "*: call if_init()/if_terminate() from vrf_init()/vrf_terminate()\n\nLater, an interface will belong to a specific VRF, and the interface\ninitialization will be a part of the VRF initialization. So now call\nif_init() from vrf_init(), and if_terminate() from vrf_terminate().\n\nDaemons have the according changes:\n- if if_init() was called or \"iflist\" was initialized, now call\n  vrf_init() instead;\n- if if_terminate() was called or \"iflist\" was destroyed, now call\n  vrf_terminate() instead.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2fc97f6335dd5d7df2c285b363c6ef56bb98dcf8",
      "tree": "22361093e3faf9587d055474c1163796aae94194",
      "parents": [
        "41f44a23e86a65a5cad7e5e8cafd7e935f153232"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:57 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "lib, zebra: add \"vrf_id\" into the \"struct interface\"\n\nLater, an interface will belong to a specific VRF. Now we add a\nproperty \"vrf_id\" to the \"struct interface\", and keep it as the\ndefault value 0.\n\nThis property is shown when displaying interfaces information.\nIt is also added in some logs.\n\nThis is just the preparation to move the interace list into the\n\"struct vrf\". The main logic is not changed.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "41f44a23e86a65a5cad7e5e8cafd7e935f153232",
      "tree": "1fcffa568b188ae66e5f18df09f6960522dfe564",
      "parents": [
        "395828eea809e8b2b8c5824d3639cefedd7aa9f0"
      ],
      "author": {
        "name": "Feng Lu",
        "email": "lu.feng@6wind.com",
        "time": "Fri May 22 11:39:56 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 02 06:58:12 2015 +0200"
      },
      "message": "lib, zebra: move \"struct vrf\" to be a lib module\n\nPreviously \"struct vrf\" is defined locally in zebra. Now it is moved\nto be a lib module.\n\nThis is the first step to support multi-VRF in quagga. The\nimplementation is splitted into small patches for the purpose of\neasy review.\n\n* lib:\n    \"struct vrf\" with basic members is defined in vrf.c. The member\n    \"void *info\" is for user data.\n\n    Some basic functions are defined in vrf.c for adding/deleting/\n    looking up a VRF, scanning the VRF table and initializing the\n    VRF module.\n\n    The type \"vrf_id_t\" is defined specificly for VRF ID.\n\n* zebra:\n    The previous \"struct vrf\" is re-defined as \"struct zebra_vrf\";\n    and previous \"vrf\" variables are renamed to \"zvrf\".\n\n    The previous \"struct vrf\" related functions are removed from\n    zbera_rib.c. New functions are defined to maintain the new\n    \"struct zebra_vrf\".\n\n    The names vrf_xxx are reserved for the functions in VRF module.\n    So:\n    - the previous vrf_table() are renamed to zebra_vrf_table();\n    - the previous vrf_static_table() are renamed to\n      zebra_vrf_static_table().\n\n    The main logic is not changed.\n\n    BTW: Add a statement to zebra_snmp.c telling that the SNMP is\n         running only for the MIBs in the default VRF.\n\nSigned-off-by: Feng Lu \u003clu.feng@6wind.com\u003e\nReviewed-by: Alain Ritoux \u003calain.ritoux@6wind.com\u003e\nSigned-off-by: Nicolas Dichtel \u003cnicolas.dichtel@6wind.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "41eb9a4305fbcb206c900a18af7df7115d857d60",
      "tree": "d132fa1a4e113aa5d0bcf84d60933b36383b182d",
      "parents": [
        "53009d387a633997b16d32224b50451b5c81b61a"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Sat May 23 11:08:39 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jun 01 16:31:14 2015 +0200"
      },
      "message": "lib: make prefix2str simpler to use, and use it in zclient\n\nReturning the buffer allows using it in the logging functions\nin easier way. This also makes the API consistent with sockunion.\n\nAdd also PREFIX_STRLEN to be the generic buffer length required\nfor any prefix string representation.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "53009d387a633997b16d32224b50451b5c81b61a",
      "tree": "171f2b9a92011209c353d9173133ff10907bec4b",
      "parents": [
        "3293bc280f15d8e3c04e0bf9b0a8d54d342a87a9"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Sat May 23 11:08:38 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Jun 01 16:31:10 2015 +0200"
      },
      "message": "lib: make sockunion2str safer to use\n\nIt\u0027s mostly used for logging, and the return value is never\nchecked, so try to make it valid.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3293bc280f15d8e3c04e0bf9b0a8d54d342a87a9",
      "tree": "cbc3dc09016553de6bf9d97c641a4d9caaa40fda",
      "parents": [
        "f85592e05ae6463727433893e61afd1081fcf7e0"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri May 22 13:41:01 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri May 29 07:31:02 2015 +0200"
      },
      "message": "route table: constify some APIs\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "483abc037b0ac4b3ed168c4810bb14ea338fa80c",
      "tree": "7bfbab894161fcd5852deaf96d7f2208fdb91b9b",
      "parents": [
        "c1c69e43cda64122b599746df4d1c6c5d8b52e37"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri May 22 13:40:59 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri May 29 07:30:46 2015 +0200"
      },
      "message": "sockunion: add accessors for sockunion address\n\nUpcoming nhrp code will use this, and it can be used to remove\nthe sockunion2ip(X) macro.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c1c69e43cda64122b599746df4d1c6c5d8b52e37",
      "tree": "cccc035647931b79657438087f92bc6a387aae96",
      "parents": [
        "80c9354835bb924983d12b0efad957e78f219287"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri May 22 13:40:57 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri May 29 07:30:44 2015 +0200"
      },
      "message": "lib: allow caller to provide prefix storage in sockunion2hostprefix\n\nAvoids a dynamic allocation which is usually freed immediate afterwards.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "80c9354835bb924983d12b0efad957e78f219287",
      "tree": "679ed5f44a7cdfb20ef856a9bb90f5204516e9f9",
      "parents": [
        "d79668fb440ae2689b54f52c076dbd79a8689135"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Fri May 22 13:40:56 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri May 29 07:29:25 2015 +0200"
      },
      "message": "privs: fix privilege dropping to use system defined groups\n\nIt may be requred for quagga process to belong to additional\ngroups. E.g. nhrp module will need to talk to strongSwan using\nvici and may require additional permissions. Initialize groups\nfrom the system group database.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "05a69d2f3833c285b399558ba7ab4a57f194a88d",
      "tree": "5c897f789ec473225d03017bd57e6809d240e7fc",
      "parents": [
        "72855b16b72e9ad2c7eb0c0bfd8f5985f779608f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 22:15:37 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 22:16:32 2015 +0200"
      },
      "message": "Revert \"lib: wrong #define used for IPV6_MINHOPCOUNT\"\n\nThis reverts commit 54b88cac24f335414caa875b390d2d78ff4bf9e0.\n\nUnfortunately, this breaks the build on systems where linux/in6.h and\nnetinet/in.h can\u0027t both be included, such as Ubuntu 14.04 and Debian\nJessie.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "54b88cac24f335414caa875b390d2d78ff4bf9e0",
      "tree": "be4834daa2e1df592b61493ec18a084c4ccefa10",
      "parents": [
        "a5d589dfbf2c563868d944376155cd4a5998722f"
      ],
      "author": {
        "name": "Donald Sharp",
        "email": "sharpd@cumulusnetworks.com",
        "time": "Wed May 13 20:34:46 2015 -0400"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 20:48:33 2015 +0200"
      },
      "message": "lib: wrong #define used for IPV6_MINHOPCOUNT\n\nThe #define IPV6_MINHOPCNT define is never defined on any unix platform.\n\u003eFrom what I can tell the original implementation on the linux platform\nwas IPV6_MINHOPCNT, when it got accepted into the mainstream kernel\nit was transformed into IPV6_MINHOPCOUNT.  Since we test for the\ndefine before attempting to use the code it was silently doing nothing\nfor a long time.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a5d589dfbf2c563868d944376155cd4a5998722f",
      "tree": "77dee816875a287b74a164b393839308cfe62313",
      "parents": [
        "3065777ece6d14c6acd04f8b2b693a15c9f2f37c"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Wed May 13 13:59:18 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 20:39:40 2015 +0200"
      },
      "message": "lib/privs: Don\u0027t use CAP_NET_BROADCAST\n\nFrom what I can tell, CAP_NET_BROADCAST has never been required for any\nfunctionality in the Linux kernel, so we do not really need it.\n\nHowever, it causes breakage in contexts where Quagga is started with a\nlimited set of capabilities, e.g. in Docker, because these may not\ninclude CAP_NET_BROADCAST and in the case of Docker do not even support\nadding CAP_NET_BROADCAST.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3065777ece6d14c6acd04f8b2b693a15c9f2f37c",
      "tree": "5e8d9c5880ea7540a3e4dd6a7228b45330e5a0e8",
      "parents": [
        "19ed526eab33728723e25f2727f60f41d3533503"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "nobody@nowhere.ws",
        "time": "Wed May 13 13:59:17 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 20:39:04 2015 +0200"
      },
      "message": "lib/privs: display more info if cap_set_proc fails.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "90d313578f035110422799ca2e188d745ceb3733",
      "tree": "9ec0ef3c8cca4cb52dc5d1340f2a3cb8191ae586",
      "parents": [
        "464ccf36b4aa1b942cad413ea30267b4bf9e6315"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 14 14:24:06 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 20:34:41 2015 +0200"
      },
      "message": "lib/vty: don\u0027t clear output buffer on input EOF\n\nA VTY\u0027s input can be closed without the output becoming unavailable.\nThis happens both on stdio when stdin ends, as well as over TCP when an\nunidirectional input shutdown() happens.\n\nIn such a case, resetting the output buffer is not appropriate since\nthere might still be data to be successfully written.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "464ccf36b4aa1b942cad413ea30267b4bf9e6315",
      "tree": "1d0a46df5f2b00e5a4cfe81e0fcce5d94ee4abab",
      "parents": [
        "ba53a8fdecef07577dcc4109e5c82bb124d49c58"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 12 21:56:18 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 20:34:41 2015 +0200"
      },
      "message": "lib/vty: add vty_stdio at-close hook\n\nThis is intended to be used for either \"exit on close\", \"fork on close\"\nor \"reopen vty on close\" functionality for the stdio vty.  Which of\nthese options to take depends on the context, the use case right now is\ntest programs exiting on EOF.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ba53a8fdecef07577dcc4109e5c82bb124d49c58",
      "tree": "82b3cd36a4812e4f34baaeac106bb28ad0f49bb8",
      "parents": [
        "ba5dc5ebb4dba56cb3a64acc21e71aa34df375d9"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 11:04:46 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 20:34:40 2015 +0200"
      },
      "message": "lib/vty: put stdin in raw mode for vty\n\nThe interactive CLI actually works just fine, if we just put the\nterminal in raw mode to get keystrokes as they come.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ba5dc5ebb4dba56cb3a64acc21e71aa34df375d9",
      "tree": "af180446cdaaa0bdab5171630249fd1db9fd5b86",
      "parents": [
        "4715a53b4d390e72a06c864a6a505971841e3dc9"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Thu May 30 16:33:45 2013 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 20:34:40 2015 +0200"
      },
      "message": "lib/vty: add vty_stdio()\n\nthis introduces a new public/API function to the vty code for opening a\nVTY on stdin/stdout.  Intended for unrestricted use by the individual\ndaemons, i.e. \"offical API\".\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4715a53b4d390e72a06c864a6a505971841e3dc9",
      "tree": "a7618f437bd55b6695c9f8e4b03a252a0513f6d5",
      "parents": [
        "ee53c8b9f7979c79beada960746ca35046016a45"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Thu May 30 16:31:49 2013 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 27 20:34:40 2015 +0200"
      },
      "message": "lib/vty: add separate output fd support to VTYs\n\nto be used with stdin/stdout terminals, this adds support for writing to\na different FD than we\u0027re reading from.  Also fixes error messages from\nconfig load being written to stdin.\n\n[v2: fixed config write]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ec38711852abdcaa0e7001e6a1e957052a0e723d",
      "tree": "c06db4d3a0d1020ce22d268e7128ee5a770ce7e5",
      "parents": [
        "9196caf16e30e938f4bc3c05d96f55195af7caff"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 20 22:34:56 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 20 22:44:56 2015 +0200"
      },
      "message": "lib: fix \"sockunion: add hash function\" for BSD (9196caf)\n\nThe sockunion_hash() function uses s6_addr32, which is not defined on\nBSD systems.  (It only works on glibc because we set _GNU_SOURCE)\n\nripngd/ripng_nexthop.h already contains a workaround for this.  Bump\nworkaround to prefix.h so it\u0027s available everywhere.\n\nReported-by: NetDEF CI System \u003cmwinter@netdef.org\u003e\nFixes: 9196caf (\"sockunion: add hash function\")\nCc: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "9196caf16e30e938f4bc3c05d96f55195af7caff",
      "tree": "1fdd133a1740a33380fd5f1981c736ad92ac476f",
      "parents": [
        "ef757700d0fd51dc0b46df9d3631208919f9b779"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:43:05 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 20 18:53:54 2015 +0200"
      },
      "message": "sockunion: add hash function\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "6b2672f3c9493aef3495192e113f95a7db4b65bc",
      "tree": "6cd9affdd144ed6a714a93b16f6c888a21616f8b",
      "parents": [
        "38f22ab07c8e1f0f12e23c2e2d0a3e1f71bef695"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:43:03 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 20 18:50:56 2015 +0200"
      },
      "message": "sockopt: add support for querying tcp round-trip-time\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f1fc327c7eb00634d2c2b08c2a6f6e44a626ef04",
      "tree": "4a14fc6fd695e76a77db703880fb300e079eb8cc",
      "parents": [
        "1416293f9d8f09cb792ce0ff9b734bff71697909"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 13 12:44:50 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 14 14:31:06 2015 +0200"
      },
      "message": "lib: assert(0) still needs a return\n\nassert(0) is not guaranteed to not return since assert() in general can\nbe optimised out when building without debug / with optimisation.  This\nbreaks the build in clang, which warns/errors about the missing return.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1416293f9d8f09cb792ce0ff9b734bff71697909",
      "tree": "32f87dd85aa3b0d58fb45bbef60591ee7c43dce8",
      "parents": [
        "c9c06d0d8cbc766374c43328e91b7a87f93e9c62"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 12 17:18:04 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu May 14 14:26:30 2015 +0200"
      },
      "message": "lib: fix \"reduce strcmp in CLI\" fallout (10bac801)\n\nIn \"lib/cli: reduce strcmp in CLI hot paths\", I failed to notice that\nCMD_VARIABLE as a boolean test covers a superset of the other types of\nvariables.  Thus, the patch broke processing of IP/IPv6/Integer range\nparameters in the CLI.\n\nFix by some reordering and introducing TERMINAL_RECORD macro (which\nmarks whether a given terminal type is a parameter) to be used in places\nwhere the check is really for all kinds of variables.\n\nReported-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nTested-by: Martin Winter \u003cmwinter@netdef.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c9c06d0d8cbc766374c43328e91b7a87f93e9c62",
      "tree": "7079c5e07ab0941949373d901bbd672066b9e4c6",
      "parents": [
        "e66cbd10d52a79fd61acab9d615683eebdbf1df5"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Apr 13 10:21:35 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 15:07:45 2015 +0200"
      },
      "message": "lib: straighten out ORF prefix list support\n\nBGP ORF prefix lists are in a separate namespace; this was previously\nhooked up with a special-purpose AFI value.  This is a little kludgy for\nextension, hence this splits it off.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "e66cbd10d52a79fd61acab9d615683eebdbf1df5",
      "tree": "e81be2319e7b2c485354283f025e090bb56c8754",
      "parents": [
        "4584c239201037648abf1a6615186f9cdeb86b23"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Apr 13 10:21:34 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 15:06:22 2015 +0200"
      },
      "message": "lib: hide internal prefix list structures\n\nThese are about to be touched and there\u0027s no point in other code\ntouching into prefix list\u0027s internas.  Add some isolation.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "10bac80195cf5a781da6e4415e6580fd7080f734",
      "tree": "440ed474bc54a2a5d355369e928b4bd8bc315e97",
      "parents": [
        "81b139bdd530adda045d22a4daf0054b89703dab"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 11:10:20 2015 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 11:10:42 2015 +0200"
      },
      "message": "lib/cli: reduce strcmp in CLI hot paths\n\nEr, no idea how anyone could ever have thought that it would be a good\nidea to have a zillion of strcmp() calls in the CLI\u0027s active paths, just\nto compare against things like \"A.B.C.D\".\n\nReduces 40k prefix list load time from 1.65s to 1.23s (1.34:1).\n\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n[v2: killed CMDS_* macros]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "81b139bdd530adda045d22a4daf0054b89703dab",
      "tree": "15a73adc88a1d3282ae06f572feae0fca4695377",
      "parents": [
        "b40e178af12570467f0116d6b1684cb1b961e407"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Apr 29 09:43:01 2015 +0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 05 09:39:58 2015 +0200"
      },
      "message": "lib: constify sockunion api\n\nAdd const to read-only api calls.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c0bedebfe9ca1a1ded02f1f481762dd41defa63e",
      "tree": "9c040f71733fb7509c03457bc146373e65e95536",
      "parents": [
        "3a7e83c2387885075c9ecf1912dd6c9399c6947a"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 10:00:43 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:33 2015 +0200"
      },
      "message": "build: add --enable-werror\n\nThis allows enabling -Werror in a consistent way.  Note that this is\ndifferent from just specifiying it in CFLAGS, since that would either\nbreak configure tests (if done on ./configure), or would override\nconfigure\u0027s CFLAGS (if done on make).\n\nUsing --enable-werror instead provides a new WERROR variable that is\nadditionally used during make with a consistent set of warning flags.\n\nThe tests/ directory is exempt.  (Rationale being, better to have more\ntests than pedantically complain about them.)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "dfee58f1d41a2e36c7f5f38a3ef5712224131824",
      "tree": "10e588443180a85a6ac019db1ded6b1144f32a7c",
      "parents": [
        "6769f43de9d595b935f2ebf1cae1428e1d1a3a5f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Mar 04 06:44:57 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:10 2015 +0200"
      },
      "message": "snmp: fix warnings\n\nbatch-fix all warnings that come up when enabling AgentX SNMP support.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "a91a3bac14976c04bf22b20c7e4bada787ec79b1",
      "tree": "1c16b21c785b22c4f7c093e80dcf2c2af20243d1",
      "parents": [
        "3cf4053a9e832408fad33a8246ecbd189f23a956"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:06:51 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:19:01 2015 +0200"
      },
      "message": "vtysh: don\u0027t use \u0027\\0\u0027 as NULL\n\nfor some reason, the vty code was using \u0027\\0\u0027 in place of NULL.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "71f55f38cb3dd804176e7f382f52b75ddcd437de",
      "tree": "59f028f69361edb116ffeb862c6ead5a7cfb7d5d",
      "parents": [
        "fd8f6ebb4c6b9e5364b98d2b5fd345d1dcc08824"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:08:05 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:48 2015 +0200"
      },
      "message": "lib, vtysh: reduce unneccessary C extension usage\n\nWe\u0027re only supporting GCC, Clang and ICC; but there\u0027s no reason to use\nnonstandard C constructs if they don\u0027t actually provide any benefit.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "fd8f6ebb4c6b9e5364b98d2b5fd345d1dcc08824",
      "tree": "1976b8f404ed9293af119fc733117607b5c372ec",
      "parents": [
        "81a4e85442e2011a47bbb25e8301dc40ec4ed9b6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:57:02 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:44 2015 +0200"
      },
      "message": "lib: use const consistently for zserv path\n\nThe global variable is missing its const, but the accessor function has\na meaningless extra const in exchange...\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "81a4e85442e2011a47bbb25e8301dc40ec4ed9b6",
      "tree": "b98cf9014b0c6cd0abfddfc628968b8a14a75540",
      "parents": [
        "c7879ea62fb38999a86ca9cbabbdeca18785e135"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:56:48 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:41 2015 +0200"
      },
      "message": "lib: silence type range warning in macro\n\nWhile splitting up the CLI input macro is a bit annoying, this seems to\nbe the least annoying way to get rid of the \"\u003c 0\" comparison warning for\nunsigned long.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "ab90fc04a57b7b1d93ccddb8c9fbbf339a7ffc4c",
      "tree": "7c75add9b86f59da16d636e963402494dfbf6ecd",
      "parents": [
        "388f8857eb81ef75014060976776523a58a99389"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 09:07:25 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "*: add/cleanup initialisers\n\nThere were some (inconsequential) warnings about uninitialised use of\nvariables.  Also, in one case, sub-structs were mixed in initialisation,\nwhich doesn\u0027t quite work as intended.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "388f8857eb81ef75014060976776523a58a99389",
      "tree": "d425f43437cc937f4cd415d3170c8d6c8f6bf33c",
      "parents": [
        "21401f3215be26dcb0f787105f5907745498e966"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:55:54 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:18:01 2015 +0200"
      },
      "message": "*: add missing includes\n\nSome places, particularly headers, were spewing warnings since they\ndon\u0027t include neccessary other headers to get struct/enum definitions.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "b7d5021bfa161f797cbfb1e92bf5b94327fb1b71",
      "tree": "37f3c702812e7fe9dec6ef33925df331d64e02c7",
      "parents": [
        "eed3c48d3a7d2dae2cae2f2f250deffb843754a6"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:53:18 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:47 2015 +0200"
      },
      "message": "*: remove stray extra semicolons\n\nSome places had extra semicolons where none belong.  Remove them.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "eed3c48d3a7d2dae2cae2f2f250deffb843754a6",
      "tree": "07b2252438225065024d4a534eddf0e86c9b87a4",
      "parents": [
        "ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:51:53 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:31 2015 +0200"
      },
      "message": "*: use void * for printing pointers\n\nOn higher warning levels, compilers expect %p printf arguments to be\nvoid *.  Since format string / argument warnings can be useful\notherwise, let\u0027s get rid of this noise by sprinkling casts to void *\nover printf calls.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "5cd0e5c659d0ae7840748e83cd9f340568fa4204",
      "tree": "0d5a4fbd02c83bd71d6c1cd6e833609a00345559",
      "parents": [
        "d8d54ab78d915921a88a8707426e307aed3c323e"
      ],
      "author": {
        "name": "Brian Bennett",
        "email": "brian.bennett@joyent.com",
        "time": "Tue Feb 17 23:24:15 2015 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Mar 04 07:31:13 2015 +0100"
      },
      "message": "lib: Fix POSIX capabilities on SunOS platforms\n\nWhen using POSIX capabilities on SunOS the capabilities are too\nrestricitve resulting in quagga processes not being able to read their\nown config files. Credit goes to Oracle where this patch was originally\nauthored and included in OpenSolaris.\n\nlib/privs.c: Include additional capabilities, better checking of\n    missing capabilities.\n\nFixes: #820\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "7abd87529499e5d76435213e2590838c5e320a9a",
      "tree": "fe2a3107483104d92aa092156fe5584069c19736",
      "parents": [
        "85c63b844df4a295a64f37573e0ba08a7cc63659"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Nov 22 10:43:29 2014 -0800"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:45 2015 +0100"
      },
      "message": "build: track config args\n\nRecord the ./configure arguments used and make them user-visible.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "237aac56960575f6ad2451ba2796d94bd5ae4b33",
      "tree": "f23c49fa32bc6b706bd5f37a9a3a45ce27adf15d",
      "parents": [
        "b6fa76098d127f5641a7dda0dee21f06ca167edb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 22:23:10 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:19:14 2015 +0100"
      },
      "message": "build: get rid of INCLUDES, use AM_CPPFLAGS\n\nINCLUDES in configure.ac was not used at all, and INCLUDES in\nMakefile.am is supposed to be AM_CPPFLAGS these days.\n\nReduces warnings spewed during bootstrap/autoreconf.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "6d6df30386423518b5daef93c2f047b4140f85f4",
      "tree": "7da3226d3276e019c49a4b4a673911a85297ecc7",
      "parents": [
        "0f048b90b5d6e4bd185913945b68dd254126eb9f"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:12:37 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:18:49 2015 +0100"
      },
      "message": "build: remove INRIA, NRL and MUSICA IPv6 quirks\n\nValar dohaeris.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "0f048b90b5d6e4bd185913945b68dd254126eb9f",
      "tree": "69ffaaf5925bebb7cc1a8e79179bee99bfde0129",
      "parents": [
        "2e5ca49758543cde69d98f4a6a7b39486e88311d"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Jun 28 21:01:32 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Sat Feb 14 19:18:47 2015 +0100"
      },
      "message": "build: remove AIX, NEC EWS and IRIX\n\nValar morghulis.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\nAcked-by: Paul Jakma \u003cpaul@jakma.org\u003e\n"
    },
    {
      "commit": "d8410a0242ab055b96708c5b33358916330bc85a",
      "tree": "5329d38c6e0a5be3517a476fb8a9c8ffa54213e9",
      "parents": [
        "05a49cea19d861ceec67ce6402264d353bb3b290"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Sep 23 16:14:49 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:01 2015 +0100"
      },
      "message": "pimd: Remove non-standard copyright line.\n"
    },
    {
      "commit": "05a49cea19d861ceec67ce6402264d353bb3b290",
      "tree": "7c3dad428c84fa695f79347c6473c033db7647de",
      "parents": [
        "8f4a59aaffd90ac820601fdf69accc8f6c953a1c"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Sep 23 16:14:27 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:01 2015 +0100"
      },
      "message": "zebra: mrib: Remove non-standard copyright line.\n"
    },
    {
      "commit": "8f4a59aaffd90ac820601fdf69accc8f6c953a1c",
      "tree": "2a6650312962c56a0388dbb3f0d06f38663f51df",
      "parents": [
        "1a9352a7487531578a0db9ca86c2647f8e304ca4"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Sep 23 15:51:11 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:00 2015 +0100"
      },
      "message": "pimd: Revert accidental removal of show_memory_isis_cmd().\n"
    },
    {
      "commit": "1a9352a7487531578a0db9ca86c2647f8e304ca4",
      "tree": "6976654d72a38f91d0f26e57d981f57c18a552fd",
      "parents": [
        "ea537be5278398cd8c32f8046e4789e613420916"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Sep 23 14:33:34 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:00 2015 +0100"
      },
      "message": "zclient: Revert lib export of zclient_socket()/zclient_socket_un().\n"
    },
    {
      "commit": "74b4fad93e89df358441b1b3b23282aaca8c80b8",
      "tree": "1baaf3d2173cb33fa44c3dae4b45d0720479367d",
      "parents": [
        "3d62667ab0e8e7ee6e17e883b144e25ee84c4545"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Sep 18 12:06:53 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:08:00 2015 +0100"
      },
      "message": "pimd: Remove motd tweaking.\n"
    },
    {
      "commit": "1f298949bea9e58623eb81f245491dcdb1df8c59",
      "tree": "43f99443889cd692a3f6c8adfc40328a868efb67",
      "parents": [
        "7cb0d4a384b4964cc53b61549ffdef37fb0d76c5"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Aug 21 15:47:28 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:59 2015 +0100"
      },
      "message": "pimd: -z command-line switch to specify zebra socket path.\n"
    },
    {
      "commit": "f62a19cc281276607b164c99e672d536a012514d",
      "tree": "f6a504fcf1adf31c4d3c32acf984dbc51faa3357",
      "parents": [
        "5c55a496fae5ab089c5009bc4c03084fdeb51f55"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Jul 03 14:53:44 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:57 2015 +0100"
      },
      "message": "zebra: Export zclient_socket_un().\n"
    },
    {
      "commit": "ff57d3653efe4a1428147204b54cacf3651c4dd0",
      "tree": "0b9ae54ba0da0f9a0391830445751495a248f11b",
      "parents": [
        "829198800217fe321faa397d21e2d8f99fcaf0dd"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Wed Jun 25 15:54:03 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:56 2015 +0100"
      },
      "message": "pimd: Fixes to build against current quagga.\n"
    },
    {
      "commit": "55b12ff4602ae802281f76e4cda681104a6cf89d",
      "tree": "f0acf5b33be5441f93f085cd93672b569d4ecdea",
      "parents": [
        "fa2e1ee255c6a3be76f74b07cb441c34d4b2583f"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Apr 15 15:58:30 2010 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:53 2015 +0100"
      },
      "message": "[pim] PIM route type.\n"
    },
    {
      "commit": "f9e05e5f2ae7bc8352a0744d4e4b5105b60e74a4",
      "tree": "9494f4d2b84fa08b9a779e9ece9b04465572ce74",
      "parents": [
        "034bd7fe705b03ea4025478650bd3d690bda923f"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Mar 11 11:17:33 2010 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:53 2015 +0100"
      },
      "message": "[pim] Version up to 0.161\n"
    },
    {
      "commit": "42e3078a1e4a0bbb033351ad5a65729a17c1fa19",
      "tree": "8b9a3ae347e5a03a3d938a905fc54c1ad365ef30",
      "parents": [
        "3e92c456b01bb9364a0e68e0124c9ff36edc0b4b"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Wed Nov 18 17:19:43 2009 -0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:52 2015 +0100"
      },
      "message": "[pim] Clean-up\n"
    },
    {
      "commit": "824adbea2d8d78f626f32d5b7900121fdebf6937",
      "tree": "658c888eaa097651c10261e31f78bd97be26dd19",
      "parents": [
        "96f91aefc06477e73d0e93008b51fc6e87fa2bc4"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Thu Oct 08 09:16:27 2009 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:51 2015 +0100"
      },
      "message": "[pim] Hooks for ssmpingd support\n"
    },
    {
      "commit": "871dbcfede60a8d2d286728bcbd88f27c2035b87",
      "tree": "f3188f3ab1c4856febf70647a32f6d854668aa50",
      "parents": [
        "b162ab753e70328cb6815e58b4bc5b03e9dd4f42"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Aug 11 15:43:05 2009 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Feb 04 06:07:49 2015 +0100"
      },
      "message": "[pim] Initial pim 0.155\n"
    },
    {
      "commit": "e832c34fd19aa6b2df7c28e78f07617095cf136e",
      "tree": "493f820738828b863d4c90bad01c4c1026d45133",
      "parents": [
        "ca2b105f3bdd8859117756dc8d8c2406e28af28b"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 27 20:24:15 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Jan 30 01:12:54 2015 +0100"
      },
      "message": "zebra: mark multicast commands experimental\n\ndepending on feedback from actually having these commands in a released\nversion, we may want to adjust them.  Thus, mark them as experimental so\nusers are aware of this.\n\nCc: Everton Marques \u003ceverton.marques@gmail.com\u003e\nCc: Balaji G \u003cbalajig81@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "be4fb4312531cdae986a83b0375dbd1e0606067e",
      "tree": "10c8f9e149ac3eafc89385badf5674c5f0eeb3e7",
      "parents": [
        "a59b6152bbcd2ff6734872ecbffbc9c43701e1a8"
      ],
      "author": {
        "name": "Everton Marques",
        "email": "everton.marques@gmail.com",
        "time": "Tue Jul 01 15:15:52 2014 -0300"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Jan 22 19:03:45 2015 +0100"
      },
      "message": "zebra: add ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB\n\nThis adds a new zapi call \"ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB\" performing a\nMulticast RPF lookup for a given source.  Details of the lookup\nbehaviour are left to the zebra side of things.\n\nNote: this is non-reactive, as in, only delivers a snapshot of the state\nat a particular point in time.  There\u0027s no push notification of changes\nhappening to the RIB.\n\nThis combines the following 3 original patches:\n- zebra: add zsend_ipv4_nexthop_lookup_mrib()\n- zserv: Query mrib (SAFI_MULTICAST).\n- zebra: Cleanups to zebra_rib.\n\nCc: Everton Marques \u003ceverton.marques@gmail.com\u003e\nCc: Balaji G \u003cbalajig81@gmail.com\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "1c6db0d2da34044ddfb42665fda8a3387ecc451d",
      "tree": "db97535c0d8c97bbecde8f2141b12cc53fb8e556",
      "parents": [
        "daefeb8755e194dd19a5f1910bc78d13c8147efb"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Dec 12 21:35:28 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 06 19:53:30 2015 +0100"
      },
      "message": "lib: don\u0027t create circular lists (fixes 6d83113)\n\nLISTNODE_DETACH doesn\u0027t clear out the node, and LISTNODE_ATTACH doesn\u0027t\nset -\u003enext (since it assumes a fresh/zeroed listnode).  As a result, the\nnew listnode_move_to_tail() created a nice circular list, in turn\ncrashing ospfd in ospf_write() later.\n\nReported-by: Martin Winter \u003cmwinter@netdef.org\u003e\nFixes: 6d83113 (\"ospfd: Tweak previous iface RR write patch to avoid free/malloc \u0026 redundant log\")\nCc: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\nAcked-by: Greg Troxel \u003cgdt@ir.bbn.com\u003e\nAcked-by: Dinesh Dutt \u003cddutt@cumulusnetworks.com\u003e\nAcked-by: Vincent JARDIN \u003cvincent.jardin@6wind.com\u003e\n"
    },
    {
      "commit": "6d831139569dbee69acc631361db917e2c47feeb",
      "tree": "ba38e9354ffcc98245b03a5f50ef0e3cedb48d47",
      "parents": [
        "1c06334f51c00471b0731227384ef42dc463db54"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Thu Oct 09 16:05:15 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:47 2014 +0000"
      },
      "message": "ospfd: Tweak previous iface RR write patch to avoid free/malloc \u0026 redundant log\n\n* linklist.{c,h}: (listnode_move_to_tail) new unction to move a\n  listnode to tail of list.\n* ospf_packet.c: (ospf_write) remove debug that seemed to be mostly covered\n  by existing debug.\n  Use listnode_move_to_tail to just move the list node to the end of the\n  tail, rather than freeing the one to hand and allocing a new one.\n"
    },
    {
      "commit": "50f38b3500a6af6e1b0d1389d65c62d70c41e8c2",
      "tree": "0525b14ce3c53f891cd7f5a00fcf954f4893a99f",
      "parents": [
        "88d37b902bc8127379d3293b9671aa6a11479c23"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:53:28 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 11 17:25:09 2014 +0000"
      },
      "message": "Compute and display SPF execution statistics\n\nDetailed SPF statistics, all around time spent executing various pieces of SPF\nsuch as the SPF algorithm itself, installing routes, pruning unreachable networks\netc.\n\nReason codes for firing up SPF are:\nR - Router LSA, N - Network LSA, S - Summary LSA, ABR - ABR status change,\nASBR - ASBR Status Change, AS - ASBR Summary, M - MaxAge\n\nSigned-off-by: Dinesh G Dutt \u003cddutt@cumulusnetworks.com\u003e\nReviewed-by: JR Rivers \u003cjrrivers@cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma@cumulusnetworks.com\u003e\nReviewed-by: Ayan Banerjee \u003cayan@cumulusnetworks.com\u003e\nReviewed-by: Paul Jakma \u003cpaul@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "93b344f3b14390e3952ea9025ac5996ae9131148",
      "tree": "26f9f14848768bd7bc77fc28c1469b970c41e84a",
      "parents": [
        "773224404cb33b2dbd3d8d8d2572013603995ce4"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Oct 28 14:52:49 2014 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Tue Oct 28 14:55:09 2014 +0100"
      },
      "message": "Revert \"zebra: Set link-detect on by default\"\n\nThis reverts commit 773224404cb33b2dbd3d8d8d2572013603995ce4.\n\nThis patch is nontrivial but wasn\u0027t passed along on the mailing list;\nthis is a revert purely on procedural reasons.\n\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "773224404cb33b2dbd3d8d8d2572013603995ce4",
      "tree": "43a4c9582fd6b8befbebbc35d3980458ac0309cf",
      "parents": [
        "aed1b556cf2f55680ae09d7ad1a1f22729dea8c5"
      ],
      "author": {
        "name": "Dinesh G Dutt",
        "email": "ddutt@cumulusnetworks.com",
        "time": "Tue Sep 30 12:39:24 2014 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Oct 28 11:06:00 2014 +0000"
      },
      "message": "zebra: Set link-detect on by default\n\nSigned-off-by: Roopa Prabhu \u003croopa@cumulusnetworks.com\u003e\nReviewed-by: Dinesh G Dutt \u003cddutt at cumulusnetworks.com\u003e\nReviewed-by: Scott Feldman \u003csfeldma at cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "3790eb0d3f0bbb24b9c6be97f547cec144ee05d1",
      "tree": "08ccf694b43a92568a1278aa28374dcd09d4b0fe",
      "parents": [
        "bdd8cd70a042473477f9144c9cedb8dde11ba2c1"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Jan 13 00:32:43 2010 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 16:08:22 2014 +0100"
      },
      "message": "stream: remove unused stream_read_unblock\n\nThe one place this was being used in BGP is now gone,\ncan remove deprecated interface.\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "f6444e4f6e1664f49f7552f894c8c94e45dd3c35",
      "tree": "fd7c0c86bf0ab3525056a37d3fce9d70e2a0d6f9",
      "parents": [
        "055086f70febc30fdfd94bb4406e9075d6934cd8"
      ],
      "author": {
        "name": "Olivier Cochard-Labbé",
        "email": "olivier@cochard.me",
        "time": "Thu Oct 09 10:28:21 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "FreeBSD has changed its SOCK_RAW for being truly raw.\n"
    },
    {
      "commit": "b166ea2dda9f04a8b75e0bf5adb7064580695f22",
      "tree": "40b9468412819c0eab55798f816f6a8e1c58a4c0",
      "parents": [
        "18f420e9f99e7f6557cf5877673cd6e71ac32192"
      ],
      "author": {
        "name": "Joakim Tjernlund",
        "email": "joakim.tjernlund@transmode.se",
        "time": "Thu Jun 25 16:40:06 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:02 2014 +0100"
      },
      "message": "[lib] Add support for backtrace on more platforms\n\n* lib/sigevent.c: (program_counter) extend to support more platforms. Joint\n  effort with Paul Jakma.\n"
    },
    {
      "commit": "18f420e9f99e7f6557cf5877673cd6e71ac32192",
      "tree": "1e43af3642283cb3660332624d2c58e558fe48ad",
      "parents": [
        "16f1606382b77ac6b951ea0de15384fcbc1df73f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 16:55:46 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Oct 17 14:09:01 2014 +0100"
      },
      "message": "lib/plist: Add some required parentheses, according to clang-analyzer\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": "010ebbbca6396f272cc2d50d147dd922dda68213",
      "tree": "99e92b1795d61adfa554e1cc00e998697962fcc9",
      "parents": [
        "ea55500409651b0f8fd2c8a02fdbf245acc96dd8"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 16 11:53:49 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Sep 19 22:14:55 2014 +0100"
      },
      "message": "Add missing GPL headers, and copyright claims that certainly apply.\n\n* Fix (a subset of)? files with non-trivial code that are missing GPL headers.\n\n* A few copyright claims added which I am certain apply, but which I had\n  missed out on the original commits.\n\nNB: Copyright claims are not exclusive and the addition of any copyright\nclaim should not be read as implying a lack of any further claims, or\ndenying the validity of any other claims.  All those with claims of\ncopyright over any portion of Quagga are welcome to submit them, ideally as\npatches to update copyright strings in files.\n"
    },
    {
      "commit": "ea55500409651b0f8fd2c8a02fdbf245acc96dd8",
      "tree": "74f195200f595ae96363e007103e77654ace3f4d",
      "parents": [
        "d4a8607d12e1d3f655055647f1633ec154685545"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jul 28 16:36:14 2009 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Sep 19 22:14:54 2014 +0100"
      },
      "message": "lib: Improve error reporting from broken config files\n\n* command.h: (config_from_file) Add variable to interface for line\n      number reporting.\n    * command.c: (config_from_file) Set \u0026 increment \u0027line_num\u0027 while parsing.\n    * vty.c: (vty_read_file) Report parse errors in the correct order to\n      stderr, with added line numbers.\n"
    },
    {
      "commit": "615f9f18fc025757a255f936748fc1e86e922783",
      "tree": "b9cd79ef71984932f4eb5f73437f9593ad2a2604",
      "parents": [
        "3493b7731b750cbc62f00be94b624a08ccccf0b2"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 18 23:52:02 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:38:56 2014 +0200"
      },
      "message": "lib: include thread information in backtraces\n\nnow that we know what thread we\u0027re currently executing, let\u0027s add that\ninformation to SEGV / assert backtraces.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3493b7731b750cbc62f00be94b624a08ccccf0b2",
      "tree": "4ea2444ddc197001b26f0b9b6e7cc2adb2bb29d2",
      "parents": [
        "621e2aaf33d8ab73bf44b0eea3f3900135d34996"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Nov 18 23:04:27 2013 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Sep 15 18:38:48 2014 +0200"
      },
      "message": "lib: unstupidify thread debug information\n\nthe library\u0027s thread scheduling functions keep track of the thread\nfunction\u0027s name, so far so good.  However, copying the compiler-provided\nconstant into a buffer inside the thread structure is plain useless.\nAlso, strip_funcname() was trying to support something that never\nhappens.\n\nInstead, let\u0027s use some bytes here to track where threads are scheduled\nfrom.  Another commit will print that information on crashes.\n\nRipping out useless stuff:  -64 bytes in the thread structure\nRe-add as const ptr:         +8 bytes\nExtra debug info:           +12 bytes\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "90444ca35e3037ed43ec695428f0ef6d82f9a320",
      "tree": "441582b4f1ee1118f6b9b696fed65a2c38064503",
      "parents": [
        "ad2f92b6b07883f6a2a26499eab1776933185960"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jul 01 16:14:05 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 18:16:28 2014 +0200"
      },
      "message": "lib: unset ZEBRA_IFA_PEER if no dst addr present (BZ#801)\n\nOn OpenBSD, carp interfaces claim to be PtP interfaces with a 0.0.0.0/0\npeer address.  We process those in zebra and try to send them to\nclients, at which point they get encoded as all-0.  The client code,\nhowever, decodes that to a NULL pointer instead of 0.0.0.0.  This later\nturns into a SEGV when CONNECTED_PREFIX sees that ZEBRA_IFA_PEER is set\nand tries to access the peer prefix.\n\nThis is a band-aid fix for stable/0.99.23, a long-term solution needs\nsome conceptual improvements on the entire thing.\n\n(The usefulness of a PtP-to-0.0.0.0/0 is a separate question;  at this\npoint dropping the peer prefix seems the least intrusive solution.)\n\nReported-by: Laurent Lavaud \u003claurent.lavaud@ladtech.fr\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "16ffb26fbbf8b3d1fee7a14eb401ecb02eed5058",
      "tree": "f1abb4a88c2677f1e405a855be200056c5c2bc4e",
      "parents": [
        "28a8cfcbc3a5cc74bb3b87981b878f8b4edc2dd6"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Tue Jul 29 09:41:54 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:50:19 2014 +0200"
      },
      "message": "*: fix detection and usage of sys/cdefs.h\n\nThis header is non-standard (though present on many systems) and\nthere is no standard for what it should or should not define.\n\nRemove it where it is not really needed. But add also a configure\ncheck, so it can be used if available but otherwise fallback to\ndefining the needed macroes.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\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": "224e7e515747b74dd6d3610570a64b9726a27722",
      "tree": "7e461067f11c264931c3f2a03174db434a174c58",
      "parents": [
        "d9d4ae5157207b9b8bdb167983519a7ffb860f2c"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Thu Apr 24 06:40:33 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:31:32 2014 +0200"
      },
      "message": "lib: remove redundant and incorrect sys/fcntl.h include\n\nPOSIX defines \u003cfcntl.h\u003e, \u003csys/fcntl.h\u003e is the same thing. However,\nit should not be used as it\u0027s existence can depend on C-library\nimplementation. E.g. musl gives warning if \u003csys/fcntl.h\u003e is used.\n\nSigned-off-by: Timo Teräs \u003ctimo.teras@iki.fi\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": "b4b359a265f1b6272b4eb17c11e9c6ef9817f34b",
      "tree": "f6721202e8ee9f44ccdc54a61e4b74c6552912c0",
      "parents": [
        "8afee5c1729e56f74d27ceb1766bea9f943f060c"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Mon Apr 28 10:58:06 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed May 14 16:46:41 2014 +0200"
      },
      "message": "ospfd: For an ABR, ensure the right LSID is MaxAge\u0027d\n\nPROBLEM:\n\nAccurate garbage collection of maxage LSAs. The global OSPF structure has\na maxage_lsa tree - the key to the tree is \u003cls-id, adv-router\u003e tuple. Suppose\nthe ABR has multiple areas and has originated some intra-area LSAs. The\nkey for all those LSAs is the same. The code then ends up in a state where\nall but the first LSA do not get cleaned up from the areas\u0027 LSDB. A subsequent\nevent would readvertise those LSAs.\n\nPATCH:\n\nSince the LSA is going to stick around till it actually gets cleaned up by\nthe maxage_walker, make the LSA pointer as the key. Each distinct LSA that\ngets maxage\u0027d then gets added to the tree and will get cleaned up correctly.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\n[CF: Use CHAR_BIT; use uintptr_t; use sizeof(field) instead of sizeof(type)]\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\n[DL: this must remain a temporary fix! needs to be redone after 0.99.23]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4becea724ccd87e88f8454622ae227308b5fa3ce",
      "tree": "a1e07f06ae43698a72a15ee801de86ce3d9ffdf4",
      "parents": [
        "514991c76366c2a9f4c644714ad0722df0eed532"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 19 14:11:42 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 22 21:17:00 2014 +0200"
      },
      "message": "lib: use heap to manage timers\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "514991c76366c2a9f4c644714ad0722df0eed532",
      "tree": "e9cb854e881c4733b3aa5145d7c17388ee99f035",
      "parents": [
        "ba32db1e854ff2b26861a2d4e4193a9f1b3816cd"
      ],
      "author": {
        "name": "Christian Franke",
        "email": "chris@opensourcerouting.org",
        "time": "Tue Nov 19 14:11:41 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 22 21:16:10 2014 +0200"
      },
      "message": "lib: remove unused thread_master_debug function\n\nSigned-off-by: Christian Franke \u003cchris@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    }
  ],
  "next": "cd40b329a2e4da882bcad0431c048c876bbeafbd"
}
