)]}'
{
  "log": [
    {
      "commit": "634f9ea20fce82c94407cb677b5487b65bde1973",
      "tree": "32db82e4ae3b0f409d6d06a0fda401f9d5df5cc9",
      "parents": [
        "dfb9a545f8e3500e6a99518193872f526c1f56ba"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Apr 11 15:51:40 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Apr 11 15:51:40 2005 +0000"
      },
      "message": "2005-04-11 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\tImplement non-blocking zclient I/O with buffering.\n\t* zclient.h (struct zclient): Add two fields to support non-blocking\n\t  I/O: struct buffer *wb, and struct thread *t_write.\n\t  (zclient_free): Remove function.\n\t  (zebra_redistribute_send): Change 2nd arg from socket fd to\n\t  struct zclient * (needed to support non-blocking I/O and buffering).\n\t  (zclient_send_message): New function to send an arbitrary\n\t  message with non-blocking I/O.\n\t* zclient.c (zclient_new): Create write buffer.\n\t  (zclient_free): Remove unused function.\n\t  (zclient_stop): Must cancel new t_write thread.  Also, reset\n\t  all buffers: ibuf, obuf, and wb.\n\t  (zclient_failed): New helper function for typical error handling.\n\t  (zclient_flush_data): New thread to flush queued data.\n\t  (zclient_send_message): New function to send the message in\n\t  zclient-\u003eobuf to zebra using non-blocking I/O and buffering.\n\t  (zebra_message_send, zapi_ipv4_route, zapi_ipv6_route): Use\n\t  new zclient_send_message function instead of calling writen.\n\t  (zclient_start): Set socket non-blocking.  Also, change 2nd arg\n\t  to zebra_redistribute_send from zclient-\u003esock to zclient.\n\t  (zebra_redistribute_send): Change 2nd arg to struct zclient *.\n\t  Can now use zclient-\u003eobuf to assemble the message instead of\n\t  allocating a temporary stream.  And call zclient_send_message to\n\t  send the message instead of writen.\n\t  (zclient_read): Convert to support non-blocking I/O by using\n\t  stream_read_try instead of deprecated stream_read.\n\t  (zclient_redistribute): Change 2nd arg to zebra_redistribute_send\n\t  from zclient-\u003esock to zclient.\n\t* ospf6_zebra.c (ospf6_zebra_redistribute, ospf6_zebra_no_redistribute):\n\t  Change 2nd arg to zebra_redistribute_send from zclient-\u003esock\n\t  to zclient.\n\t* ospf_zebra.c (ospf_zebra_add): Call zclient_send_message instead\n\t  of writen.\n\t* rip_zebra.c (rip_redistribute_set, rip_redistribute_unset,\n\t  rip_redistribute_clean): Change 2nd arg to zebra_redistribute_send\n\t  from zclient-\u003esock to zclient.\n\t* ripng_zebra.c (ripng_redistribute_unset, ripng_redistribute_clean):\n\t  Change 2nd arg to zebra_redistribute_send from zclient-\u003esock\n\t  to zclient.\n\t* bgp_zebra.c (bgp_redistribute_set, bgp_redistribute_unset):\n\t  The 2nd arg to zebra_redistribute_send is now zclient instead of\n\t  zclient-\u003esock.\n\t* isis_zebra.h (isis_zebra_finish): Remove declaration of unused\n\t  function.\n\t* isis_zebra.c (isis_zebra_route_add_ipv4): Call zclient_send_message\n\t  to send the message to zebra instead of calling writen directly, since\n\t  zclient_send_message understands non-blocking I/O and will manage\n\t  the buffer queue appropriately.\n\t  (isis_zebra_finish): Remove unused function, particularly since\n\t  the zclient_free function has been removed.\n"
    },
    {
      "commit": "a349198fd3e4e5692cdc91223f8153cb53c086ce",
      "tree": "e5b366a8ab7ab9ed1c9670faf1f18eef26877ade",
      "parents": [
        "f695b01ff8e9aebc46bdf41f104ad4abbb0ef59e"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 22:50:38 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 22:50:38 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (if_lookup_by_name_len, if_get_by_name_len) New functions.\n\t* if.c: (if_lookup_by_name_len, if_get_by_name_len) New functions.\n\t  (if_get_by_name) Tighten up code.\n\t  (interface) Use new function if_get_by_name_len.\n\t* zclient.c: (zebra_interface_add_read) Use new if_get_by_name_len\n\t  function.\n\t  (zebra_interface_state_read) Use new if_lookup_by_name_len function.\n\t* kernel_socket.c: (ifm_read) Use new if_lookup_by_name_len function\n\t  to save a memcpy.\n\t* if_ioctl_solaris.c: (interface_list_ioctl) Fix subtle bug with new\n\t  if_get_by_name_len function.\n\t* ospf_interface.c: (ospf_vl_new) Use strnlen to fix call to if_create.\n"
    },
    {
      "commit": "8ddca7040da413cd283a4beba4634744f4e61ac8",
      "tree": "b0ff51f03f511a6c882c59272dff5134bf6b360f",
      "parents": [
        "82146b88915ca614ee1c28659478d6e310d84110"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 18:53:52 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 18:53:52 2004 +0000"
      },
      "message": "2004-12-07 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* {smux.c,zclient.c}: Change level of debug messages to LOG_DEBUG.\n"
    },
    {
      "commit": "508ec9102057c86769e5c0dd280037025102a9c0",
      "tree": "20524add351bf9f532e7c1812c242e565b5dc0b1",
      "parents": [
        "6b637e9602316d98983fa103dfdbef4bbf723ffb"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Oct 23 14:26:49 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Oct 23 14:26:49 2004 +0000"
      },
      "message": "Yet another breakage introduced in May with zserv cleanup.\n"
    },
    {
      "commit": "3fb9cd6ef456959b6eff939d5c316f6785c2dda4",
      "tree": "e350cb3ef7b20b8bbccfb1aa9309152311e845bd",
      "parents": [
        "5ae35f45f1292dce3a01f241accafeb2e59b10cc"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 19 19:44:43 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 19 19:44:43 2004 +0000"
      },
      "message": "OK. Here it is - PtP patch from Andrew J. Schorr. No problems with ospfd,\nripd might need some more testing though.\n"
    },
    {
      "commit": "8c328f1106cf0498333c2d8a96940e7b4581e316",
      "tree": "9bf24cca6a68a9dd5d4dda586484e497d0c19ca6",
      "parents": [
        "98c91ac6ac085713c00af00a6ac41779be6b50b3"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 05 21:01:23 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Oct 05 21:01:23 2004 +0000"
      },
      "message": "Number of warnings is down to 3 again in lib directory. A lot of const\u0027s\nadded to strings and a lot of int -\u003e unsigned int changes.\n"
    },
    {
      "commit": "18a6dce6f83dd20caf1f36c8e840868ff0bf6dbd",
      "tree": "ff832cbf6fe2b239bde06268820587bec671ae6d",
      "parents": [
        "a49c0ff6771975eeb1bd7da923a9dc830200cf65"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:18:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Oct 03 18:18:34 2004 +0000"
      },
      "message": "Common router id.\n"
    },
    {
      "commit": "02ff83c52592427623db0d8367ca9b3395fa321f",
      "tree": "0aa278809140486f55012a98616106fc995d91e6",
      "parents": [
        "51a8798e8d36dddfdeb6b0bfd01bf32a646e8bb1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 11 11:27:03 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 11 11:27:03 2004 +0000"
      },
      "message": "2004-06-11 Sowmini Varadhan \u003csowmini.varadhan@sun.com\u003e\n\n        * filter.c: (access_list_remark_cmd) buffer_putstr doesnt need cast\n          to u_char. (ipv6_access_list_remark_cmd) ditto.\n          if.c: ditto\n        * network.c: (readn/writen) pointer arg should be type u_char.\n        * plist.c: needs to include stream.h, not declare stream functions\n          internally.\n          (various) Add static qualifier to internal functions.\n          (prefix_list_type_str) extraneous breaks in switch statement.\n          (ip_prefix_list_description_cmd) buffer_putstr doesnt need cast\n        * stream.h: depends on plist.h and export stream_put_prefix\n        * vty.c: (vty_\u003ctelnet option build functions\u003e) should use\n          unsigned char, telnet options are 0 -\u003e 255.\n        * zclient.c: various u_char\u003c-\u003echar type cleanups.\n        * zebra.h: Having to define CMSG_* can apply to more than just\n          BSDI_NRL.\n        * ripd.c: (rip_distribute_update_all) distribute list hook\n          function pointer prototype requires struct prefix_list * arg.\n          (rip_distribute_update_all_wrapper) update to pass required arg,\n          NULL.\n"
    },
    {
      "commit": "0a5893596774554f039222c481d235de0f35d99e",
      "tree": "065ba74422d21193637d6e3f8b52c0eaa09a13bf",
      "parents": [
        "225282994d74f767058886475d80fee95d450eae"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 08 11:48:26 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 08 11:48:26 2004 +0000"
      },
      "message": "2004-05-08 Paul Jakma \u003cpaul@dishone.st\u003e\n\n       * bgp_zebra.c: (bgp_interface_address_add) sync to zclient changes\n         (bgp_interface_address_delete) ditto.\n         (bgp_zebra_announce) ditto.\n         (bgp_zebra_withdraw) ditto.\n       * isis_zebra.c: Sync with zclient changes.\n       * zclient.c (zapi_ipv4_route) Follow Sowmini\u0027s lead and describe\n         message format.\n       * ospf6_zebra.c: Sync to zclient changes\n       * ospf_zebra.c: Sync with lib/zclient changes\n       * rip_zebra.c: sync with zclient changes.\n       * rip_interface.c: ditto.\n       * ripng_{interface,zebra}.c: sync with zclient changes\n\n\n2004-05-08 Sowmini Varadhan \u003csowmini.varadhan@sun.com\u003e\n\n       * zclient.c: (zapi_ipv4_add) collapsed into zapi_ipv4_route\n         (zapi_ipv4_delete) ditto.\n         (zapi_ipv4_route) add/delete a route by way of cmd arg.\n         (zapi_ipv6_add) collapsed into zapi_ipv6_route.\n         (zapi_ipv6_delete) ditto.\n         (zapi_ipv6_route) add/delete a route by way of cmd arg.\n         (zebra_interface_address_delete_read) collapsed into\n         zebra_interface_address_read.\n         (zebra_interface_address_delete_read) ditto.\n         (zebra_interface_address_read) read address add/delete messages\n         by way of type argument. Describe command message format.\n         (zebra_interface_add_read) Unconditionally read new ifmtu6 field.\n         Describe command message format.\n         (zebra_interface_state_read) Unconditionally read new ifmtu6 field.\n         (zclient_redistribute_set) Collapsed into zclient_redistribute\n         (zclient_redistribute_unset) ditto\n         (zclient_redistribute) set/unset redistribution.\n         (zclient_redistribute_default_set) Collapsed into\n         zclient_redistribute_default.\n         (zclient_redistribute_default_unset) ditto.\n         (zclient_redistribute_default) Redistribute default set/unset.\n       * zclient.h: delete zapi_ipv{4,6}_add, zapi_ipv{4,6}_delete. Add\n         zapi_ipv{4,6}_route. delete zclient_redistribute_set/unset. Add\n         zclient_redistribute. Ditto for\n         zclient_redistribute_default_{set/unset}.\n"
    },
    {
      "commit": "5de5bbf107f9eacb8d8265f8c0b925b2aed21878",
      "tree": "4f9c389e0f16fbbfc58b7ff2ff29aab30f8a93c6",
      "parents": [
        "6a8da8521d35165e9a859c84605f864feb9132d7"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Fri Feb 13 17:44:50 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Fri Feb 13 17:44:50 2004 +0000"
      },
      "message": "add some /* XXX assert() */ for questionable assumptions (no code\nchange - just notes to others).\n"
    },
    {
      "commit": "106d2fd572c18bebe3dc44031c6d5e56e7b9030f",
      "tree": "df226870be1178b347947aecbe7d468022b47a91",
      "parents": [
        "12ab19f1863e80134353244967a87805b12fe722"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Aug 01 00:24:13 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Aug 01 00:24:13 2003 +0000"
      },
      "message": "2003-08-01 Cougar \u003ccougar@random.ee\u003e\n\n\t* lib/if.c: (if_cmp_func) new function, compare interface names in\n\talphabetical order.\n\t(if_create) Take name as argument and add interface in sorted order.\n\t(if_get_by_name),(interface_cmd) fixup calls to if_create - see\n\tabove.\n\t(if_init) register list comparison function.\n\t* lib/if.h: Add comparison function, modify if_create prototype.\n\t* lib/zclient.c: Modify call to if_create.\n\t* ospfd/ospf_interface.c: (ospf_vl_new) modify call to if_create.\n\tchange sprintf to snprintf.\n\t* zebra/kernel_socket.c: (ifm_read) modify call to if_create.\n"
    },
    {
      "commit": "592c8148981d196a7bda2f1b85a63943fd0cfdf2",
      "tree": "273fd4151921ffbb91cc42535083ff7e1bf04bdb",
      "parents": [
        "bf9392c6e932080156e70c0436977fd5dbcdb0cd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 06 23:24:55 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 06 23:24:55 2003 +0000"
      },
      "message": "2003-06-07 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* Revert Cougar\u0027s sort interface names patch, causes problems with\n\tenabling of interfaces for OSPF in ospfd.\n"
    },
    {
      "commit": "a939514c59fe1a56a820e82bc59d82c721076c03",
      "tree": "85a2d3d1d3e0a4f35d0865778c7522b8569b40f8",
      "parents": [
        "41908818b8f446befc3654fa5bbc98c6c0af92a3"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Jun 05 17:50:01 2003 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Jun 05 17:50:01 2003 +0000"
      },
      "message": "Patch from Cougar - sort iflist by name.\n"
    },
    {
      "commit": "595db7f16506d2c82a3478e9f8dab00c8733d386",
      "tree": "240d477dd4b5262ba78cc50fda4b81de09e2c91c",
      "parents": [
        "726f9b2bbdd5a607f7b0a10a64547739b807e361"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 25 21:35:06 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 25 21:35:06 2003 +0000"
      },
      "message": "Add back support for null0 interface blackhole routes.\n"
    },
    {
      "commit": "81dfcaa2e27d53f4eb61c549e03065dcb1b8eec3",
      "tree": "2aed449138a4833fe343052cdfa505be74332cb4",
      "parents": [
        "15291357d130b804dcdcfd81bdb1b86a84567fd0"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 19:21:25 2003 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 19:21:25 2003 +0000"
      },
      "message": "Route (reject|blackhole) support from 6Wind patch.\n"
    },
    {
      "commit": "2e3b2e474ed5ba04744b167132a84f9954485af4",
      "tree": "cc07fb34a1bf21ead5cc3ad69e4a9dfde2b43b0e",
      "parents": [
        "7afa08da2d3690baee1739da400775f8543f5863"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 21:03:13 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 21:03:13 2002 +0000"
      },
      "message": "zebra link state detection support\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
