)]}'
{
  "log": [
    {
      "commit": "69e10adaf28d4e116c38db2648786557fe131828",
      "tree": "4e00214ef16ba68f9d9b6a3fa8ff5c66a1a54d93",
      "parents": [
        "8cc4198f9fabe5f10f5a773de1503d82f33a01fb"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:27:33 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:27:33 2005 +0000"
      },
      "message": "2005-05-06 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zserv.h: Remove ZEBRA_PORT definition, its in lib/zebra.h now\n"
    },
    {
      "commit": "4d38fdb421ee04430ac2f4d4e8ef4a4e27c1020b",
      "tree": "a7bdb41cd18be9f612c54531efef5a5ccaab36f1",
      "parents": [
        "8b70d0b04f6bba2f30827d71084dd74fd00808b3"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 28 17:35:14 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Apr 28 17:35:14 2005 +0000"
      },
      "message": "2005-04-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* rib.h: (struct rib) Add lock field for refcounting.\n\t* zserv.h: (struct zebra_t) Add a ribq workqueue to the zebra\n\t  \u0027master\u0027 struct.\n\t* zserv.c: (zread_ipv4_add) XMALLOC then memset should be XCALLOC.\n\t* zebra_rib.c: Clean up refcounting of route_node, make struct rib\n\t  refcounted and convert rib_process to work-queue. In general,\n\t  rib\u0027s should be rib_addnode\u0027d and delnode\u0027d to route_nodes, and\n\t  these symmetrical functions will manage the locking of referenced\n\t  route_node and freeing of struct rib - rather than having users\n\t  manage each seperately - with much scope for bugs..\n\t  (newrib_free) removed and replaced with rib_lock\n\t  (rib_lock) new function, check state of lock and increment.\n\t  (rib_unlock) new function, check lock state and decrement. Free\n\t  struct rib if refcount hits 0, freeing struct nexthop\u0027s, as\n\t  newrib_free did.\n\t  (rib_addnode) Add RIB to route_node, locking both.\n\t  (rib_delnode) Delete RIB from route_node, unlocking each.\n\t  (rib_process) Converted to a work-queue work function.\n\t  Functional changes are minimal, just arguments, comments and\n\t  whitespace.\n\t  (rib_queue_add_qnode) Helper function to setup a ribq item.\n\t  (rib_queue_add) Helper function, same arguments as old\n\t  rib_process, to replace in callers of rib_process.\n\t  (rib_queue_qnode_del) ribq deconstructor.\n\t  (rib_queue_init) Create the ribq.\n\t  (rib_init) call rib_queue_init.\n\t  (remainder) Sanitise refcounting of route_node\u0027s. Convert to\n\t  rib_queue_add, rib_addnode and rib_delnode. Change XMALLOC/memset\n\t  to XCALLOC. Remove calls to nexthop_delete and nexthop_free.\n"
    },
    {
      "commit": "719e97414a7ca1a4d49d72816b9e1bd2155d157d",
      "tree": "6c3d4456e89d1a837322566eee065e492b325e6c",
      "parents": [
        "27da3988c30c333cd75cffc5565682366bb99513"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Feb 28 20:52:15 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Mon Feb 28 20:52:15 2005 +0000"
      },
      "message": "2005-02-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zserv.c: Must include network.h and buffer.h for non-blocking I/O.\n\t  Remove global message_queue and t_write (need separate buffering for\n\t  each client).\n\t  (zebra_server_dequeue,zebra_server_enqueue) Remove functions\n\t  related to old buggy buffering code.\n\t  (zserv_delayed_close) New thread callback function to delete a client.\n\t  (zserv_flush_data) New thread callback function to flush buffered\n\t  data to client.\n\t  (zebra_server_send_message) Rewritten to use buffer_write (so\n\t  buffering of writes and non-blocking I/O work properly).\n\t  (zsend_interface_add,zsend_interface_delete,zsend_interface_address,\n\t  zsend_interface_update) Return 0 instead of -1 if !client-\u003eifinfo\n\t  (this is not really an error).  Return value from\n\t  zebra_server_send_message.\n\t  (zsend_route_multipath,zsend_ipv4_nexthop_lookup,\n\t  zsend_ipv4_import_lookup) Return value from zebra_server_send_message.\n\t  (zsend_ipv6_nexthop_lookup) Fix scope to static, and return value\n\t  from zebra_server_send_message.\n\t  (zsend_router_id_update) Must use zebra_server_send_message instead\n\t  of deprecated writen function.  Return 0 instead of -1 if this client\n\t  is not subscribed to router-id updates (since this is not really\n\t  an error).\n\t  (zread_interface_add) Change type to static int.  If\n\t  zsend_interface_add fails or zsend_interface_address fails, return -1\n\t  immediately (since the client has had an I/O error).\n\t  (zread_interface_delete,zread_ipv4_add,zread_ipv4_delete,\n\t  zread_ipv6_add,zread_ipv6_delete,zread_router_id_delete) Return 0\n\t  to indicate success.\n\t  (zread_ipv4_nexthop_lookup) Return value from\n\t  zsend_ipv4_nexthop_lookup.\n\t  (zread_ipv4_import_lookup) Return value from zsend_ipv4_import_lookup.\n\t  (zebra_read_ipv6) Remove unused function.\n\t  (zread_ipv6_nexthop_lookup) Return value from\n\t  zsend_ipv6_nexthop_lookup.\n\t  (zread_router_id_add) Return value from zsend_router_id_update.\n\t  (zebra_client_close) Call buffer_free(client-\u003ewb) and\n\t  thread_cancel(client-\u003et_suicide).\n\t  (zebra_client_create) Allocate client-\u003ewb using buffer_new.\n\t  (zebra_client_read) Support non-blocking I/O by using stream_read_try.\n\t  Use ZEBRA_HEADER_SIZE instead of 3.\n\t  (zebra_accept) Fix bug: reset accept thread at top.  Make client\n\t  socket non-blocking using the set_nonblocking function.\n\t  (config_write_forwarding) Fix scope to static.\n\t  (zebra_init) Remove initialization code for old buggy write buffering.\n\t* zserv.h: Add 2 new fields to struct zserv: struct buffer *wb\n\t  (to enable buffered writes with non-blocking I/), and\n\t  struct thread *t_suicide to support delayed close on I/O\n\t  errors.\n\t* router-id.h: Remove prototypes for zread_router_id_add and\n\t  zread_router_id_delete (their scope should be static to zserv.c).\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": "52dc7ee65f8d887b0730abc0a5d44d27fc6ecafd",
      "tree": "a557339540c56dd3953c29a50ca0e48c1911efc8",
      "parents": [
        "44983cf8a9c587dfbcad294b9dfe4dccbb68ba98"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Sep 23 19:18:23 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Sep 23 19:18:23 2004 +0000"
      },
      "message": "Remove usage of evil list and listnode typedefs.\n"
    },
    {
      "commit": "5b73a671aac22a75cc90657aa4a924d199f2284b",
      "tree": "8716d34430c239cb994ba286db18efb24eb09319",
      "parents": [
        "1470bafb7aa179dad7dc4bdc998d68c14752f824"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 23 15:26:14 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jul 23 15:26:14 2004 +0000"
      },
      "message": "2004-07-23 Sowmini Varadhan \u003cSowmini.Varadhan@Sun.COM\u003e\n\n        * if_ioctl_solaris.c: HAVE_IPV6 ifdef fixups\n        * zserv.c: ditto\n        * ioctl_solaris.c: ditto.\n        * interface.c: cast for LLADDR\n        * interface.h: Add guards, include redistribute.h and remove\n          extraneous definitions of zebra_interface_{up,down}_update\n        * ioctl.h: Add AF_IOCTL define for non SOLARIS_IPV6\n        * redistribute.h: include dependent header, zserv.h\n        * zserv.h: include dependent header, rib.h\n"
    },
    {
      "commit": "b9df2d25fc8d06ca63fa792d162d97656361338b",
      "tree": "53ec5975f608983b5cb95ee38ca112934db5e609",
      "parents": [
        "0a5893596774554f039222c481d235de0f35d99e"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 09 09:09:59 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 09 09:09:59 2004 +0000"
      },
      "message": "2004-05-09 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* zserv.c: (zsend_route_multipath) Set the nexthop_num\n\t  field correctly. Add NEXTHOP_TYPE_IPV6_IFNAME for v6.\n\t  Conditionally set ZAPI_MESSAGE_METRIC flag - only for adds.\n\t  (zsend_ipv4_add) cruft, deleted.\n\t  (zsend_ipv4_delete) ditto.\n\t  (zsend_ipv6_add) ditto.\n\t  (zsend_ipv6_delete) ditto.\n\n2004-05-09 Sowmini Varadhan \u003csowmini.varadhan@sun.com\u003e\n\n\t* zserv.c: (zsend_ipv{4,6}_{add,delete}_multipath) collapsed\n\t  into single zsend_route_multipath function.\n\t  (zsend_interface_{up,down}) collapsed into zsend_interface_update.\n\t  (zsend_interface_address_{add,delete}) collapsed into\n\t  zsend_interface_address.\n\t  (zsend_interface_add) send mtu6.\n\t  (zsend_interface_delete) ditto.\n\t  (zebra_write) remove unused function.\n\t  (various) Apply static qualifier. Add comments.\n\t* zserv.h: Definitions changed as per above.\n\t* redistribute.c: Changes as per zserv.c.\n"
    },
    {
      "commit": "b21b19c5785487f2ff4a6ce38f45c2e6c35f4363",
      "tree": "c79f90ce7bd798b3f1391010153d9fdf7c7418f0",
      "parents": [
        "0e4f190ebf5a26e4b66fb49cd74ae0ff0c7e0863"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Jun 15 01:28:29 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Jun 15 01:28:29 2003 +0000"
      },
      "message": "2003-06-15 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* lib/vty.{c,h}: Remove vty layer depending on a \u0027master\u0027 global,\n\t  pass the thread master in explicitly to vty_init. Sort out some\n\t  header dependency problems with lib/command.h\n\t* zebra/: Move globals to struct zebrad. Update vty_init().\n\t* (.*)/\\1_main.c: update call to vty_init().\n"
    },
    {
      "commit": "726f9b2bbdd5a607f7b0a10a64547739b807e361",
      "tree": "9c46a6ce71cf4ea96553a85a231e38b462b3dee0",
      "parents": [
        "71c0fb50fe75928f8fbe1bbff1995d9d91b3702b"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 21:04:54 2003 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun May 25 21:04:54 2003 +0000"
      },
      "message": "Last fixes from 6Wind patch.\n"
    },
    {
      "commit": "23bd12c31d701376d45ab45aa8c838e9fb5e409c",
      "tree": "d8d6b789194b372dcf067bc1bc5169f0ff284e8d",
      "parents": [
        "3a6440d756863b602cfaaf0259b71950e67b2a6e"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 07 06:11:09 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 07 06:11:09 2003 +0000"
      },
      "message": "[zebra 18626] move zebra socket paths to configure.ac\n\nmoved definition of the various socket paths from the\nper daemon header files into configure.ac. it will set the paths to\nbe in the directory specified by --localstatedir\u003d\u003cprefix\u003e or\notherwise will try to guess as best it can ( a la pid file path\ndetection - which probably should try reference ${prefix} too).\n\nthe present hardcoded socket path, /tmp, isnt really correct. should\nbe in /var somewhere really.\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"
    }
  ]
}
