)]}'
{
  "log": [
    {
      "commit": "ea05767770d759d46f97d1dc33423de72ae20ccd",
      "tree": "20917e0852385f08817998a027bd75f4df33a2ea",
      "parents": [
        "303bb005889a843b0d7e07a9b67b68ee55653d8f"
      ],
      "author": {
        "name": "Hasso Tepper",
        "email": "hasso.tepper@gmail.com",
        "time": "Sun Jan 13 17:45:29 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jan 15 17:57:03 2013 +0100"
      },
      "message": "build: Fix build on MacOSX 10.8 (Mountain Lion)\n\nNewer MacOSX versions have support for both IPv6 advanced socket API\nRFCs (2292 and 3542) switchable in compile time, but neither of these\nis default for some strange reason. RFC3542 will be default in future,\nbut for now we have to declare that we want to use the RFC3542 API\nbefore including \u003cnetinet/in.h\u003e.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "0915bb0ce2ca6b5fee2cd214be4499eeeaf1c9af",
      "tree": "eb3cb410ed0dd341e2e565e71d74bba81c0dbf8a",
      "parents": [
        "1b5ed1b054b955275bb7cf0f80fb7767094bc28b"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Tue Nov 13 22:48:55 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Fri Nov 30 21:41:16 2012 +0100"
      },
      "message": "zebra: add iterator for walking all tables in RIB\n\n* lib/zebra.h\n\n    Add macro ZEBRA_NUM_OF, which returns the number of elements in a\n    static array.\n\n  * zebra/rib.h\n\n    Add the rib_tables_iter_t structure and associated functions,\n    which allow one to walk all tables in the rib.\n\n  * zebra/zebra_rib.c\n\n    - Add vrf_id_get_next() to retrieve the first VRF id (if any) that\n      is greater than a given VRF id.\n\n    - Add rib_tables_iter_next().\n\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3f0bfc9e82e0d735be2cb06d5c4a3028650637bf",
      "tree": "1d923623eaecc1cd05fdc285f1e7874ad638985c",
      "parents": [
        "837d16ccbe0fca413f8927da6a34b1e97ccada8a"
      ],
      "author": {
        "name": "Doug VanLeuven",
        "email": "roamdad@sonic.net",
        "time": "Wed Sep 26 12:01:23 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Nov 01 22:58:36 2012 -0700"
      },
      "message": "lib: treat OSX as BSD for IP_HDRINCL (BZ#739)\n\nMac OS X needs HAVE_IP_HDRINCL_BSD_ORDER defined like BSD. If it\u0027s not\ndefined, it\u0027ll fail like this:\n\n  *** sendmsg in ospf_write failed to 224.0.0.5, id 0, off 0, len 64,\n  interface en0, mtu 1500: Invalid argument\n\nWhich is caused by reordering iph-\u003eip_len in\nsockopt_iphdrincl_swab_htosys.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "2ea1ab1c30c765cd4703794fcfaf044454fb533c",
      "tree": "650e97a5a9e8cc1fb8666ff6ce87647df3e0e604",
      "parents": [
        "2654e43ca2eaa8d93268c9ec85ac2dd968e5fb94"
      ],
      "author": {
        "name": "Vyacheslav Trushkin",
        "email": "me@dogonthesun.net",
        "time": "Sun Dec 11 18:48:47 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Mon Jan 02 18:37:24 2012 +0400"
      },
      "message": "zebra: ZEBRA_HELLO and mopping up routes (BZ#448)\n\nZEBRA_HELLO message is used by routing daemons to inform zebra\nwhat type of routes daemon will be announcing to zebra. Also\nzebra uses route_type_oaths array to track which daemon announces\nwhich protocol. Zebra mops up routes if daemon didn\u0027t for some\nreason.\n"
    },
    {
      "commit": "e0ca5fde7be5b5ce90dae78c2477e8245aecb8e9",
      "tree": "0e0b32ddbed4a84a3b2de9dd7217165cb81f52fa",
      "parents": [
        "ebf08631cad8a420fc6bfb7c45af5496dc11023e"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@diac24.net",
        "time": "Wed Sep 16 01:52:42 2009 +0200"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Dec 13 19:13:17 2011 +0400"
      },
      "message": "lib: put route_types.txt to real use\n\nthis replaces most occurences of routing protocol lists by preprocessor\ndefines from route_types.h. the latter is autogenerated from\nroute_types.txt by a perl script (previously awk). adding a routing\nprotocol now is mostly a matter of changing route_types.txt and log.c.\n\nConflicts:\n\n\tlib/route_types.awk\n"
    },
    {
      "commit": "0a28130d35bbba47faf47bf9451ba0eb195fcbb7",
      "tree": "94bcda95ba12a50a81aa7ea893d809ba237b2262",
      "parents": [
        "42e6d745d105018a9469dabad65bd4cf942dcf3c"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Sun Jul 17 19:33:21 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Thu Sep 29 22:19:08 2011 +0400"
      },
      "message": "bgpd: rename SAFI 3 according to RFC4760\n\n- SAFI value 3 is reserved.  It was assigned by RFC 2858 for a use\n  that was never fully implemented, so it is deprecated by this\n  document.\n\n* zebra.h: rename macro\n* bgp_fsm.c: (bgp_graceful_restart_timer_expire,\n  bgp_graceful_stale_timer_expire, bgp_stop, bgp_establish): update\n* bgpd.c: (peer_nsf_stop): update\n* bgp_open.c: (bgp_capability_vty_out): SAFI 3 isn\u0027t a recognized case\n  any more\n"
    },
    {
      "commit": "b69442d456fa6a00716c5a0684395b04f5794cd6",
      "tree": "149ba75d630f31ce4018e3b6673a23f286b08d5b",
      "parents": [
        "83d1614952faf100a0a1bacaa0a1b3f70a013c9f"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Tue Sep 13 17:15:51 2011 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "infrastation@yandex.ru",
        "time": "Tue Sep 27 20:47:18 2011 +0400"
      },
      "message": "configure: dismiss libutil.h\n\nRecent versions of libc on Linux (Debian Testing) create lots of\ncompile warnings about direct usage of libutil.h\n"
    },
    {
      "commit": "6511cab26728453d1b5e572bbbc3775f70c10c0e",
      "tree": "586184e1e02aedbf67d4ebca145980f8f402ae62",
      "parents": [
        "c4376c9d28f1282f502ed5279ee80ec5c4cb810d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 17:38:01 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:31 2009 +0100"
      },
      "message": "[configure] Refine CLOCK_MONOTONIC test\n\n* configure.ac: Check for the actual CLOCK_MONOTONIC symbol, as clock_gettime\n  need not imply that clock type is supported\n* lib/zebra.h: use the method given in autoconf docs for sys/time.h\n  inclusion\n"
    },
    {
      "commit": "768a27ea7ba25257c79689af83ab37945dc1cc3c",
      "tree": "d3d9b822a29090a8cfee41b4ae3f74248e5950fa",
      "parents": [
        "311064ddc5c52f6859cf1e6e8636c19a2e705147"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:23:08 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 29 18:23:08 2008 +0000"
      },
      "message": "[zebra/linux] Use BPF to filter out responses, to try avoid netlink overruns\n\n2008-05-29 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* rt_netlink.c: (netlink_install_filter) BPF filter to catch and\n\t  drop responses to zebra\u0027s own route messages.\n\t  (kernel_init) add BPF filter on the netlink socket.\n"
    },
    {
      "commit": "55edb0d446a272907715b0825ff008557174d34a",
      "tree": "17d46ab705b0b229b8795d0d809fddd18e1d9078",
      "parents": [
        "c543a1737173fb438f1d8c06f650b2d0d479f45c"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jan 11 15:57:13 2008 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jan 11 15:57:13 2008 +0000"
      },
      "message": "[link-detect] Improve BSD support.\n2008-01-11 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* lib/zebra.h: Revert previous change, no need to include\n\t  \u003cnet/if_media.h\u003e here.\n\t* zebra/ioctl.c: If HAVE_BSD_LINK_DETECT is defined, include\n\t  \u003cnet/if_media.h\u003e\n\t  (if_get_flags) Remove debug messages about BSD link state.\n\t* zebra/kernel_socket.c: (bsd_linkdetect_translate) If link state\n\t  is unknown, we should set the IFF_RUNNING flag.\n"
    },
    {
      "commit": "c543a1737173fb438f1d8c06f650b2d0d479f45c",
      "tree": "ba940242e22f7e6798e6fd24b19864b5702474db",
      "parents": [
        "3f087670efa606021cde2f6a9615ac7e07aec2a5"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Jan 10 15:24:32 2008 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Thu Jan 10 15:24:32 2008 +0000"
      },
      "message": "[link-detect] Try to get BSD link-detect to work properly.\n\n2008-01-10 Ingo Flaschberger \u003cif@xip.at\u003e\n\n\t* configure.ac: Define HAVE_BSD_LINK_DETECT if \u003cnet/if_media.h\u003e is\n\t  present.\n\t* lib/zebra.h: If HAVE_BSD_LINK_DETECT is defined,\n\t  include \u003cnet/if_media.h\u003e.\n\t* zebra/ioctl.c: (if_get_flags) If HAVE_BSD_LINK_DETECT, use the\n\t  SIOCGIFMEDIA ioctl to ascertain link state.\n\t* zebra/kernel_socket.c: (bsd_linkdetect_translate) New function to\n\t  map the ifm_data.ifi_link_state value into the IFF_RUNNING flag.\n\t  (ifm_read) Call bsd_linkdetect_translate to fix the IFF_RUNNING\n\t  flag before calling if_flags_update.\n"
    },
    {
      "commit": "dc95824ae13d65156dd873a6e784d9a0eed2f39f",
      "tree": "fa53aa99e517d9cfe5c56474051afdaa1bc9a666",
      "parents": [
        "068fd77cff0ce09b6390641abd84fc09a89c49db"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Aug 13 16:03:06 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Aug 13 16:03:06 2007 +0000"
      },
      "message": "Merged own patch for the bug #391 (debugging and comments mostly).\n"
    },
    {
      "commit": "0dc0b7080227df8aca6cc2f7961c3c55cb73c509",
      "tree": "6e812cc69de4171c069d341fac39372a2c8259fc",
      "parents": [
        "093033144658c5d914429fad5b0a6cf952f20943"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jun 01 13:21:20 2007 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Fri Jun 01 13:21:20 2007 +0000"
      },
      "message": "[linux] Fix strange compilation problem by explicitly including \u003clinux/types.h\u003e\n\n2007-06-01 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: On linux, we seem to need to include \u003clinux/types.h\u003e before\n\t  \u003csys/sysctl.h\u003e, otherwise we get isisd compilation errors about\n\t  __be16 not being defined.\n"
    },
    {
      "commit": "d46d2a24e997883d9e2623b4de36aa4a08ffc89c",
      "tree": "31f05936514cb4125c39fee731631e0571d7cdd6",
      "parents": [
        "6bd1a7bab32b6b077bee687161c43dc0fe82076f"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 16:53:04 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 16:53:04 2007 +0000"
      },
      "message": "[autoconf] GNU_SOURCE can be defined twice, through AC_FUNC_STRNLEN\n\n2007-05-10 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: Use AC_GNU_SOURCE to define _GNU_SOURCE, rather\n\t  than having lib/zebra.h do it.\n\t  AC_FUNC_STRNLEN has side-effects with latest autoconf, use\n\t  AC_CHECK_FUNC on strnlen instead.\n\t* lib/zebra.h: Don\u0027t try define _GNU_SOURCE, autoconf should do it.\n"
    },
    {
      "commit": "6f0e3f6e17687eb25b7b77c4fdc8324837d4700f",
      "tree": "8a94d9212060f0f2ee7cbd0079c2687eed7348dc",
      "parents": [
        "08d3d5b398ae81de7659509f159e814d1bbd4375"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 02:38:51 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu May 10 02:38:51 2007 +0000"
      },
      "message": "[autoconf] bugs 162,303,178: Fix \u0027present but can not be compiled\u0027 warnings\n\n2007-05-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: sys/conf.h depends on sys/param.h, at least on\n\t  FBSD 6.2.\n\t  (bug #363) Should check for in_pktinfo for IRDP\n\n2006-05-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: General cleanup of header and type checks, introducing\n\t  an internal define, QUAGGA_INCLUDES, to build up a list of\n\t  stuff to include so as to avoid \u0027present but cant be compiled\u0027\n\t  warnings.\n\t  Misc additional checks of things missing according to autoscan.\n\t  Add LIBM, for bgpd\u0027s use of libm, so as to avoid burdening\n\t  LIBS, and all the binaries, with libm linkage.\n\t  Remove the bad practice of using m4 changequote(), just\n\t  quote the []\u0027s in the case statements properly.\n\t  This should fix bugs 162, 303 and 178.\n\t* */*.{c,h}: Update all HAVE_* to the standard autoconf namespaced\n\t  HAVE_* defines. I.e. HAVE_SA_LEN -\u003e HAVE_STRUCT_SOCKADDR_SA_LEN,\n\t* bgpd/Makefile.am: Add LIBM to bgpd\u0027s LDADD, for pow().\n"
    },
    {
      "commit": "7514fb7739f74311830e9ddd1381d0d228224f61",
      "tree": "4d4b9a4fdfcea4cb6fa496085327f1aae9a9a380",
      "parents": [
        "5fa05099567bbe42aae87a9bef8fd630b3666a4d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed May 02 16:05:35 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Wed May 02 16:05:35 2007 +0000"
      },
      "message": "[zebra] Routemap support on received routes, with \u0027set src\u0027 command (linux)\n\n2007-05-01 David L Stevens \u003cdlstevens@us.ibm.com\u003e\n\n\t* (general) These changes collectively add route-map and\n\t  prefix-list support to zebra and fix a bug in \"show\n\t  route-map\" (with no argument).\n\t* doc/main.texi: added route-map, prefix-list, ip protocol\n\t  and set src documentation\n\t* lib/command.h: added PROTOCOL_NODE type\n\t* lib/log.c: (proto_name2num) new function, protocol name to\n\t  number translation.\n\t* lib/routemap.c: (vty_show_route_map) fixed \"show route-map\"\n\t  without route-map name\n\t* lib/routemap.h: added RMAP_ZEBRA type\n\t* lib/zebra.h: added proto_name2num() prototype\n\t* vtysh/extract.pl.in: added VTYSH_ZEBRA flag for route-map and\n\t  plist\n\t* vtysh/Makefile.am: added zebra_routemap.c\n\t* vtysh/vtysh.h: added VTYSH_ZEBRA flag to VTYSH_RMAP\n\t* zebra/connected.c: (connected_up_ipv4) added src preference argument\n\t  to rib_add_ipv4()\n\t* zebra/kernel_socket.c: (rtm_read) ditto\n\t* zebra/main.c: added prefix list initialization\n\t* zebra/Makefile.am: added zebra_routemap.c source file\n\t* zebra/rib.h: added generic address union \"g_addr\" and use in\n\t  existing places that had an explicit union.\n\t  Added \"src\" to struct nexthop.\n\t  Added preferred src arg to nexthop_ipv4_add and rib_add_ipv4.\n\t* zebra/rt_netlink.c: (netlink_routing_table) set preferred source on\n\t  netlink messages.\n\t  (netlink_route_change) ditto\n\t  (netlink_route_multipath) ditto.\n\t* zebra/rtread_getmsg.c: (handle_route_entry) added (NULL) src to\n\t  rib_add_ipv4() call.\n\t* zebra/rtread_proc.c: (proc_route_read) ditto\n\t* zebra/zebra_rib.c: (nexthop_ipv4_add) add src argument.\n\t  (nexthop_ipv4_ifindex_add) ditto\n\t  (rib_add_ipv4) ditto\n\t  (nexthop_active_check) Add route-map processing.\n\t* zebra/zebra_routemap.c: new file for zebra route-map commands.\n\t* zebra/zebra_vty.c: (ip_protocol_cmd) Apply route-map to protocol\n\t  (vty_show_ip_route_detail) added \"src\" printing\n\t  (vty_show_ip_route) ditto\n\t  (show_ip_protocol_cmd) new command, list routemaps.\n\t  (config_write_protocol) write out routemap protocl config.\n\t  (zebra_vty_init) Install the new routemap protocol commands.\n\t* zebra/zserv.c: (zread_ipv4_add) added (NULL) src arg\n\t  (zebra_init) init zebra route-maps.\n\t* zebra/zserv.h: add zebra_route_map_init\n"
    },
    {
      "commit": "35cfc90cce32b19c71d2f40aab06d36eb6bfdc44",
      "tree": "91b9e00379fb444b98f62f04632809996d2a8186",
      "parents": [
        "105b8239f1d98156c82900d636391f94b787e541"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:08:24 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun May 28 08:08:24 2006 +0000"
      },
      "message": "[lib] include inttypes.h rather than stdint.h, provide defines where missing\n\n2006-05-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra.h: Include inttypes.h rather than stdint.h, best practice\n\t  according to the autoconf manual.\n\t  Add UINT*_MAX defines for older platforms lacking these (FBSD 4)\n"
    },
    {
      "commit": "d6d672aaf930661f502a623d18d7a4abb4f184f2",
      "tree": "fc85e80d1a268dfc420ab5f4f6a306b8e246fc46",
      "parents": [
        "d16e04335968ea05fda60cec01b48df8c345a8ce"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 15 16:56:51 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 15 16:56:51 2006 +0000"
      },
      "message": "[lib] Add string mapping table for Zserv commands\n\n2006-05-15 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* log.c: (general) Generalise struct zebra_route_desc into\n\t  struct zebra_desc_table and, similar to route_types, add a\n\t  command_types table to describe Zserv protocol commands.\n\t  (route_types[]) use a macro to use designated initialisers\n\t  while avoiding tedious duplication.\n\t  (zserv_command_string) lookup string from zebra_desc_table,\n\t  similar to zebra_route_string\n\t* zebra.h: Add declaration for zserv_command_string, adjust the\n\t  comments to reflect zebra_desc_table.\n"
    },
    {
      "commit": "c1b9800a60f073c7d57f6232f9af7ae39bc3353a",
      "tree": "94fc0006fcf73d4ab4733bef23689cb8f36772ee",
      "parents": [
        "c77d4546619f9d3e0ccfac5acbc0ebb42658a61f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 01:54:02 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 16 01:54:02 2006 +0000"
      },
      "message": "[zserv] Extend Zserv header with version information and marker field\n\n2006-01-16 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* lib/zclient.h: Update the Zserv protocol header with a version\n\t  field.  Define the old command field to be a \u0027marker\u0027, to\n\t  allow old Zserv and updated Zserv to be differentiated.\n\t  Future updates will bump the version field obviously. New\n\t  command field is made wider.  Try to stop using the\n\t  \u0027zebra_size_t\u0027 typedef in the callbacks.\n\t* lib/zclient.c: Update to read/write new format header.\n\t* zebra/zserv.c: Ditto\n"
    },
    {
      "commit": "b6026073584b855d47a8e2033d2aa3413a3394e9",
      "tree": "acc8812673bc85302da33007549e7828e2a23877",
      "parents": [
        "6e0f1b940dc281863ef9d9f3bd57676927b8603f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 24 12:51:24 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 24 12:51:24 2005 +0000"
      },
      "message": "[lib/zebra.h] fix Linux compile error\n\n2005-11-24 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra.h: s/u_int/unsigned int/, u_int is a BSD type, defining\n\t  __USE_BSD on Linux pulls in further things from netinet/ip.h\n\t  which dont preprocess for some reason. There is no C99\n\t  shorthand type directly equivalent to u_int afaict, so don\u0027t\n\t  use it.\n"
    },
    {
      "commit": "76367ea9753aa9cef7cf5d3c954f55b5725f31da",
      "tree": "d3b6dc5bd84fb5db7db89cef1d5c1f0bc302f9ca",
      "parents": [
        "190880dc790007a14911ef8c170af33a50a7a674"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:05:35 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:05:35 2005 +0000"
      },
      "message": "[bug #231] check and include stdint.h, also add std\u003dc99 to gcc CFLAGS\n\n2005-11-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: Tell gcc we like C99.\n\t  [bug #231] Check and test for stdint.h.\n\t* lib/zebra.h: [bug #231] include stdint, if its there.\n"
    },
    {
      "commit": "34204aac424f8c29317d863d64f1c3bb4d241a50",
      "tree": "a7ad861d7b3454dbe96b6e7a31d7dbacc4ad24e3",
      "parents": [
        "35a60c2d3c217e3b835821a7f6ea458e2eff44cf"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 09:00:23 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 09:00:23 2005 +0000"
      },
      "message": "2005-11-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* zebra.h: BSD BYTE_ORDER define isn\u0027t available everywhere,\n\t  define if needs be.\n\t* checksum.h: new file. checksum.c exports in_cksum, provide\n\t  a header for it.\n\t* checksum.c: (in_cksum) callers shouldn\u0027t have to know it uses\n\t  a u_short internally, change to void *.\n\t* Makefile.am: Add checksum.h\n\t* command.h: remove bogus trailling slash.\n\t* md5.c: (general) Update it for the twentieth century. ANSI\n\t  declarations are widely supported now.. Don\u0027t include system\n\t  headers, only include zebra.h. Use POSIX types (the\n\t  alternative is to define u_int64_t in a portable way - rest\n\t  of Quagga needs same cleanup).\n\t  Make endian-conditional code be compiler conditional rather\n\t  than preprocessor conditional, so that breakage gets noticed\n\t  quicker.\n\t* md5.h: POSIX types. Get rid of the odd __P() non-ANSI capable\n\t  compiler compatibility hack.\n"
    },
    {
      "commit": "f52d13cb2e8e7197934d5f241f88647f9b9d78b8",
      "tree": "b0aa01befc07f57ed47e83ac7dfb383284c49d26",
      "parents": [
        "c05612b9a702d0f49c379c92deb6daab55372aea"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 17:38:06 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 17:38:06 2005 +0000"
      },
      "message": "2005-10-01 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: Declare new functions zebra_route_string() and\n\t  zebra_route_char().\n\t* log.c: (zroute_lookup,zebra_route_string,zebra_route_char) New\n\t  functions to map zebra route numbers to strings.\n\t* zebra_vty.c: (route_type_str) Remove obsolete function: use new\n\t  library function zebra_route_string() instead.  Note that there\n\t  are a few differences: for IPv6 routes, we now get \"ripng\" and\n\t  \"ospf6\" instead of the old behavior (\"rip\" and \"ospf\").\n\t  (route_type_char) Remove obsolete function: ues new library function\n\t  zebra_route_char() instead.  Note that there is one difference:\n\t  the old function returned \u0027S\u0027 for a ZEBRA_ROUTE_SYSTEM route,\n\t  whereas the new one returns \u0027X\u0027.\n\t  (vty_show_ip_route_detail,vty_show_ipv6_route_detail) Replace\n\t  route_type_str() with zebra_route_string().\n\t  (vty_show_ip_route,vty_show_ipv6_route) Replace route_type_char()\n\t  with zebra_route_char().\n\t* bgp_vty.c: (bgp_config_write_redistribute) Use new library function\n\t  zebra_route_string instead of a local hard-coded table.\n\t* ospf6_asbr.c: Remove local hard-coded tables zroute_name and\n\t  zroute_abname. Change the ZROUTE_NAME macro to use new library\n\t  function zebra_route_string().  Remove the ZROUTE_ABNAME macro.\n\t  (ospf6_asbr_external_route_show): Replace ZROUTE_ABNAME() with\n\t  a call to zebra_route_char(), and be sure to fix the format string,\n\t  since we now have a char instead of a char *.\n\t* ospf6_zebra.c: Remove local hard-coded tables zebra_route_name and\n\t  zebra_route_abname.  Note that the zebra_route_name[] table\n\t  contained mixed-case strings, whereas the zebra_route_string()\n\t  function returns lower-case strings.\n\t  (ospf6_zebra_read_ipv6): Change debug message to use new library\n\t  function zebra_route_string() instead of zebra_route_name[].\n\t  (show_zebra): Use new library function zebra_route_string() instead\n\t  of zebra_route_name[].\n\t* ospf_dump.c: Remove local hard-coded table ospf_redistributed_proto.\n\t  (ospf_redist_string) New function implemented using new library\n\t  function zebra_route_string().  Note that there are a few differences\n\t  in the output that will result: the new function returns strings\n\t  that are lower-case, whereas the old table was mixed case.  Also,\n\t  the old table mapped ZEBRA_ROUTE_OSPF6 to \"OSPFv3\", whereas the\n\t  new function returns \"ospf6\".\n\t* ospfd.h: Remove extern struct message ospf_redistributed_proto[],\n\t  and add extern const char *ospf_redist_string(u_int route_type)\n\t  instead.\n\t* ospf_asbr.c: (ospf_external_info_add) In two messages, use\n\t  ospf_redist_string instead of LOOKUP(ospf_redistributed_proto).\n\t* ospf_vty.c: Remove local hard-coded table distribute_str.\n\t  (config_write_ospf_redistribute,config_write_ospf_distribute): Use\n\t  new library function zebra_route_string() instead of distribute_str[].\n\t* ospf_zebra.c: (ospf_redistribute_set,ospf_redistribute_unset,\n\t  ospf_redistribute_default_set,ospf_redistribute_check)\n\t  In debug messages, use ospf_redist_string() instead of\n\t  LOOKUP(ospf_redistributed_proto).\n\t* rip_zebra.c: (config_write_rip_redistribute): Remove local hard-coded\n\t  table str[]. Replace str[] with calls to new library function\n\t  zebra_route_string().\n\t* ripd.c: Remove local hard-coded table route_info[].\n\t  (show_ip_rip) Replace uses of str[] with calls to new library\n\t  functions zebra_route_char and zebra_route_string.\n\t* ripng_zebra.c: (ripng_redistribute_write) Remove local hard-coded\n\t  table str[].  Replace str[i] with new library function\n\t  zebra_route_string(i).\n\t* ripngd.c: Remove local hard-coded table route_info[].\n\t  (show_ipv6_ripng) Use new library function zebra_route_char() instead\n\t  of table route_info[].\n"
    },
    {
      "commit": "ceacedba227e77156f92f7676b274c48a2817e8f",
      "tree": "f362ecc8f6f183347ebe45ab79727b54d2f527a6",
      "parents": [
        "e62178797d0ee5f326fd587b84ee965cf88833e4"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Sep 29 14:39:32 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Sep 29 14:39:32 2005 +0000"
      },
      "message": "2005-09-29 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* configure.ac: Add the test for Solaris least-privileges. Set\n\t  defines for whether capabilities are supported and whether of\n\t  the linux or solaris variety.\n\t  Add missing-prototypes, missing-declarations, char-subscripts\n\t  and cast-qual warnings to default cflags, cause Hasso enjoys warnings,\n\t  and we really should clean the remaining ones up. (ie isisd..).\n\t* (*/*main.c) Update the zebra_capabilities_t arrays in the various\n\t  daemons to match the changes made in lib/privs.h.\n\t* zebra.h: Solaris capabilities requires priv.h to be included.\n\t* privs.{c,h}: Add support for Solaris Least-Privileges.\n\t  privs.h: Reduce some of the abstract capabilities, which do\n\t  not have rough equivalents on both systems. Rename the net\n\t  related caps to _NET, as they should have been in first\n\t  place.\n\t  (zprivs_terminate) should take the zebra_privs_t as argument so\n\t  that it can update change pointer.\n\t  Add an additional privilege state, ZPRIVS_UNKNOWN.\n\t* privs.c: (various capability functions) Add\n\t  Solaris privileges variants.\n\t  (zprivs_state) Use privs.c specific generic types to\n          represent various capability/privilege related types, so that\n          each can be typedef\u0027d as appropriate on each platform.\n\t  (zprivs_null_state) static added, to hold the state the null\n\t  method should report (should be raised by default, and\n          LOWERED if zprivs_terminate has been called)\n          (zprivs_state_null) Report back the zprivs_null_state.\n          (cap_map) Make it able to map abstract capability to multiple\n          system capabilities.\n          (zcaps2sys) Map to abstract capabilities to multiple system\n          privileges/capabilities.\n          (zprivs_init) move capability related init to seperate\n\t  function, zprivs_caps_init.\n          (zprivs_terminate) ditto, moved to zprivs_caps_terminate.\n          Set the change_state callback to the NULL state, so the\n          user can continue to run and use the callbacks.\n"
    },
    {
      "commit": "8cc4198f9fabe5f10f5a773de1503d82f33a01fb",
      "tree": "77045da709ff66629bd12029b9ee17700360909b",
      "parents": [
        "e7fe8c88c3d552400e1ae3ae9243319ab95d6f2d"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:25:49 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri May 06 21:25:49 2005 +0000"
      },
      "message": "2005-05-06 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* (general) extern and static\u0027ification of functions in code and\n\t  header.\n\t  Cleanup any definitions with unspecified arguments.\n\t  Add casts for callback assignments where the callback is defined,\n\t  typically, as passing void *, but the function being assigned has\n\t  some other pointer type defined as its argument, as gcc complains\n\t  about casts from void * to X* via function arguments.\n\t  Fix some old K\u0026R style function argument definitions.\n\t  Add noreturn gcc attribute to some functions, as appropriate.\n\t  Add unused gcc attribute to some functions (eg ones meant to help\n\t  while debugging)\n\t  Add guard defines to headers which were missing them.\n\t* command.c: (install_node) add const qualifier, still doesnt shut\n\t  up the warning though, because of the double pointer.\n\t  (cmp_node) ditto\n\t* keychain.c: (key_str2time) Add GET_LONG_RANGE() macro, derived\n\t  fromn vty.h ones to fix some of the (long) \u003c 0 warnings.\n\t* thread.c: (various) use thread_empty\n\t  (cpu_record_hash_key) should cast to uintptr_t, a stdint.h type\n\t* vty.h: Add VTY_GET_IPV4_ADDRESS and VTY_GET_IPV4_PREFIX so they\n\t  removed from ospfd/ospf_vty.h\n\t* zebra.h: Move definition of ZEBRA_PORT to here, to remove\n\t  dependence of lib on zebra/zserv.h\n"
    },
    {
      "commit": "d66a7b56634f88181dd2dd23706c30bf23366424",
      "tree": "42569fbc2de9016ad91db7669565e7b737ca3c11",
      "parents": [
        "6811845b67999861388cf00d3ca0ee8471d29876"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Apr 08 16:42:03 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Fri Apr 08 16:42:03 2005 +0000"
      },
      "message": "2005-04-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: If GNU_LINUX is defined, then define _GNU_SOURCE.  This\n\t  fixes a problem where we were not getting the declaration of strnlen\n\t  in \u003cstring.h\u003e.\n"
    },
    {
      "commit": "3cb98dee9067372756964f461eb2c931a1c75138",
      "tree": "726827878765c01c45e5be08b909974ae54ce79f",
      "parents": [
        "47004ec501bd70d558c11af05d8bacd66a8c7c25"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 16:01:05 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 16:01:05 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* configure.ac: Add strnlen to AC_CHECK_FUNCS.\n\t* zebra.h: Should include str.h to pick up missing functions.\n\t* str.h: Declare strnlen if needed.\n\t* str.c: Do not include str.h since zebra.h now includes it.\n\t  (strnlen) New function.\n"
    },
    {
      "commit": "db8eaac6615dacf17eb3958b0f3b6ea58f8f1e1d",
      "tree": "24e261e3e5be531ed987d3e040ea731ca6a1016c",
      "parents": [
        "55468c86040081320f557b696e509b76ddfd6c83"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Mar 16 16:13:06 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Mar 16 16:13:06 2005 +0000"
      },
      "message": "2005-03-16 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: Must check whether __attribute__ should be defined before\n\t  including zassert.h.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "9fc7ebf10b7bb638ddf6d1b4b2d562dd417866fc",
      "tree": "e2e49aa4ea2530be5b86df581ed1adcd37822f3a",
      "parents": [
        "338b3424154af85b0762713796397d3f2345d54f"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 23 15:12:34 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 23 15:12:34 2005 +0000"
      },
      "message": "2005-02-23 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* buffer.h: Make the struct buffer and struct buffer_data structures\n\t  private by moving them inside buffer.c.  Add comments for all\n\t  functions.  Rename buffer_write as buffer_put (to be more consistent\n\t  with the buffer_putc and buffer_putstr functions).  Declare a new\n\t  buffer_write function that is used to write data to a file descriptor\n\t  and/or add it to the buffer queue.  Remove unused function\n\t  buffer_flush_vty_all.  Create a new enum typedef buffer_status_t\n\t  to be used as the return code for all buffer_flush* functions\n\t  and buffer_write.\n\t* buffer.c: The struct buffer and struct buffer_data declarations\n\t  are now private to this file.  In conjunction with that, remove\n\t  some unnecessary fields: struct buffer (alloc, unused_head,\n\t  unused_tail, length), struct buffer_data (prev).\n\t  (buffer_data_new) Removed: functionality incorporated into buffer_add.\n\t  (buffer_data_free) Removed: use a macro BUFFER_DATA_FREE instead.\n\t  (buffer_new) Use calloc instead of malloc + memset(zero).\n\t  Supply an appropriate default size if the specified size is 0.\n\t  (buffer_free) Eliminate code duplication by calling buffer_reset to\n\t  free the contents of the buffer (and remove unused code related\n\t  to unused_head).\n\t  (buffer_empty,buffer_putc,buffer_putstr) Aesthetic change (make more\n\t  compact).\n\t  (buffer_reset) Use macro BUFFER_DATA_FREE.  No need to set\n\t  alloc and length to 0 (these fields have been removed).\n\t  (buffer_add) Fix scope to be static.  Call XMALLOC directly instead\n\t  of calling removed buffer_data_new function.  Simplify the logic\n\t  (since it\u0027s now a singly-linked list instead of doubly-linked).\n\t  (buffer_write) Renamed to buffer_put.  Change to void, since return\n\t  code of 1 was meaningless.  No need to adjust length field, since\n\t  it has been removed.\n\t  (buffer_putw,buffer_flush,buffer_flush_vty_all,buffer_flush_vty)\n\t  Remove unused functions.\n\t  (buffer_flush_all) Rewrite using buffer_flush_available to eliminate\n\t  a possible failure mode if IOV_MAX is less than the number of buffers\n\t  on the queue.\n\t  (buffer_flush_window) Incorporate logic from buffer_flush_vty.\n\t  Log an error message if there is a writev error.\n\t  (buffer_flush_available) Be more paranoid: check for case where\n\t  buffer is already empty.  Use new ERRNO_IO_RETRY macro, and use\n\t  new enum for return codes.  Simplify deletion logic (since it\u0027s\n\t  now a singly-linked list).\n\t  (buffer_write) New function for use with non-blocking I/O.\n\t* vty.h: Replace the struct vty sb_buffer field with a fixed-size\n\t  (5-character) sb_buf field and an sb_len field, since using\n\t  a struct buffer was inappropriate for this task.  Add some useful\n\t  comments about telnet window size negotiation.\n\t* vty.c: Include \u003carpa/telnet.h\u003e (no longer included by zebra.h).\n\t  Remove VTY_OBUF_SIZE (instead use buffer_new default size).\n\t  Make telnet_backward_char and telnet_space_char static const.\n\t  (vty_out) Replace buffer_write with buffer_put.\n\t  (vty_log_out) Check for I/O errors.  If fatal, close the vty session.\n\t  Consolidate 3 separate writes into a single write call.\n\t  (vty_will_echo,vty_command,vty_next_line,vty_previous_line,\n\t  vty_end_config,vty_describe_fold,vty_clear_buf,vty_serv_sock_addrinfo,\n\t  vty_serv_sock_family,vty_serv_un,vty_use_backup_config,exec_timeout,\n\t  vty_config_write,vty_save_cwd) Fix scope to static.\n\t  (vty_new) Let buffer_new use its default buffer size.\n\t  (vty_write) Fix signature: 2nd arg should be const char *.\n\t  Replaced buffer_write with buffer_put.\n\t  (vty_telnet_option) Fix minor bug (window height or width greater than\n\t  255 was broken).  Use sb_buf and sb_len instead of removed sb_buffer\n\t  (which was being used improperly).\n\t  (vty_read) On error, use ERRNO_IO_RETRY to decide whether it\u0027s fatal.\n\t  If the error is fatal, call buffer_reset so vty_close does not attempt\n\t  to flush the data.  Use new sb_buf and sb_len instead of sb_buffer\n\t  to store the SB negotiation string.\n\t  (vty_flush) When vty-\u003elines is 0, call buffer_flush_available instead\n\t  of buffer_flush_window.  Look at the return code from buffer_flush\n\t  to detect I/O errors (and in that case, log an error message and\n\t  close the vty).\n\t  (vty_create) Fix scope to static.  Initialize sb_len to 0 instead\n\t  of creating sb_buffer.\n\t  (vty_accept) Set socket nonblocking.\n\t  (vtysh_accept) Use new set_nonblocking function instead of calling\n\t  fcntl directly.\n\t  (vtysh_flush) New function called from vtysh_read (after command\n\t  execution) and from vtysh_write.  This flushes the buffer\n\t  and reacts appropriately to the return code (by closing the vty\n\t  or scheduling further flushes).\n\t  (vtysh_read) Check whether error is fatal using ERRNO_IO_RETRY.\n\t  If not, just try again later.  Otherwise, call buffer_reset before\n\t  calling vty_close (to avoid trying to flush the buffer in vty_close).\n\t  Fix logic to allow case where a command does not arrive atomically\n\t  in a single read call by checking for the terminating NUL char.\n\t  (vtysh_write) Use new vtysh_flush helper function.\n\t  (vty_close) No need to call buffer_empty, just call buffer_flush_all\n\t  in any case (it will check whether the buffer is empty).\n\t  Do not free sb_buffer (since it has been removed).\n\t  (vty_log_fixed) Use writev instead of write.\n\t* zebra.h: Do not include \u003carpa/telnet.h\u003e, since this is used only\n\t  by lib/vty.c.\n"
    },
    {
      "commit": "548e6f7d58a08e28132936431bba75428412857f",
      "tree": "4d168f4ea30a0fedc496ec158ac6fb58b2cd14cd",
      "parents": [
        "ba6454ec1fd1ca7266b10eba07d016becb22db74"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Feb 08 15:57:25 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Feb 08 15:57:25 2005 +0000"
      },
      "message": "2005-02-08 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: Change macro definitions SET_FLAG and UNSET_FLAG\n\t  to use compound assignment operators (aesthetic change).\n"
    },
    {
      "commit": "e22f5516b3e1431b7716632b76e257b84e7e0ff4",
      "tree": "16ee1046948d1b8099c476a2450bdd605eca03e5",
      "parents": [
        "afc1e2ddf29fffe996f44d0f8eca99522e75d0ba"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Jan 12 16:18:17 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Jan 12 16:18:17 2005 +0000"
      },
      "message": "2005-01-12 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: If not C99 and no va_copy macro available, fall back to\n\t  memcpy (solves a build problem on FreeBSD 4.x).\n"
    },
    {
      "commit": "b99760ab51abf8c4c9a1f89dab0c1630a6768ff7",
      "tree": "daaf8cabb567c5ff1a01368fa1382d8257b56854",
      "parents": [
        "73a7dea305b146febb8e57176295689d6a900f1d"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Jan 04 16:24:43 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Jan 04 16:24:43 2005 +0000"
      },
      "message": "2005-01-04 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* configure.ac: Added test for broken CMSG_FIRSTHDR macro\n\t  (relevant for Solaris 8 and unpatched Solaris 9, don\u0027t know\n\t  whether other platforms are affected).\n\t* zebra.h: Define ZCMSG_FIRSTHDR appropriately based on whether\n\t  config.h indicates HAVE_BROKEN_CMSG_FIRSTHDR (as determined\n\t  by the configure test program).\n\t* sockopt.c: (getsockopt_cmsg_data) Use ZCMSG_FIRSTHDR instead\n\t  of CMSG_FIRSTHDR.\n\t* rtadv.c: (rtadv_recv_packet,rtadv_send_packet) Use ZCMSG_FIRSTHDR\n\t  instead of CMSG_FIRSTHDR.\n\t* ripd.c: (rip_recvmsg) Use ZCMSG_FIRSTHDR instead of CMSG_FIRSTHDR.\n\t* ripngd.c: (ripng_recv_packet) Use ZCMSG_FIRSTHDR instead of\n\t  CMSG_FIRSTHDR.\n"
    },
    {
      "commit": "4cf0d0df23f7a35a3c1570c94ba08fa96d47bfc1",
      "tree": "9894529e896b82cf957cb60c03be04f4fe9d91ea",
      "parents": [
        "e5879ca1d8ea26870dbf74f330f5e6f5a9c93bfa"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Nov 25 17:14:34 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Nov 25 17:14:34 2004 +0000"
      },
      "message": "2004-11-25 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zebra.h: If not C99 and there\u0027s no va_copy macro and there is\n\t  a __va_copy macro, define va_copy as __va_copy.\n"
    },
    {
      "commit": "cee3df1e4b1b8103bf81e5281a46aab7881f93df",
      "tree": "40d7cc8c22da9634739256a9d577b140b41730b8",
      "parents": [
        "b9e0ee31864c94c729fb6b6f6b2ccbc79dbcd474"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Nov 24 17:14:49 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Nov 24 17:14:49 2004 +0000"
      },
      "message": "2004-11-24 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zassert.h: New header file to declare a quagga-specific assert macro.\n\t* log.c: (_zlog_assert_failed) New function called when assert fails\n\t  to log the error and abort.\n\t* zebra.h: Include \"zassert.h\" instead of \u003cassert.h\u003e.\n\t* regex.c: Include \"zassert.h\" instead of \u003cassert.h\u003e.\n\t* dict.c: Include \"zassert.h\" instead of \u003cassert.h\u003e.\n"
    },
    {
      "commit": "69e1325faf47762fd08917b8f20a20abb59d41e6",
      "tree": "60d6df8c1d754c84fa3108a5f19bbf91cb084ab1",
      "parents": [
        "fbb6709986ee29b57a8a6103c592de80647ead00"
      ],
      "author": {
        "name": "gdt",
        "email": "gdt",
        "time": "Mon Nov 15 18:51:15 2004 +0000"
      },
      "committer": {
        "name": "gdt",
        "email": "gdt",
        "time": "Mon Nov 15 18:51:15 2004 +0000"
      },
      "message": "Rationalize CMSG_SPACE usage:\n\n  in lib/zebra.h, ensure that RFC3542-required CMSG_SPACE and CMSG_LEN\n  are defined.  Warn if alignment assumptions are made, since they are\n  i386-centric.\n\n  in lib/sockopt.h, declare that sockopt sizes are without\n  CMSG_SPACE-required padding - just simple sizeof.\n\n  in ospfd/ospf_packet.c, simply use CMSG_SPACE\n\nThis should remove all instances of CMSG_ALIGN from the source code.\nThis is a nonstandard, though rational, construct; quagga should use\nonly those defines in RFC3542.\n"
    },
    {
      "commit": "af0d97eb4826376f6d0a2f053b416d111b4af6f8",
      "tree": "47e823dfd86176a66c3ec6a246739d40fa3bb1e7",
      "parents": [
        "4ccb2c46c51c382f1a1d34f1f6814725c7d972e5"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Oct 22 23:24:43 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Oct 22 23:24:43 2004 +0000"
      },
      "message": "2004-10-23 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* zebra.h: reserve ZEBRA_ROUTE_HSLS\n"
    },
    {
      "commit": "97c52f4e397848fb18c689dfe161d0b8f7803722",
      "tree": "e923e3ce3469c738fe0ec785c8eb9884b57e3bd2",
      "parents": [
        "9a3805e0826ed7f45a6266226b55a4829e42e423"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Oct 04 08:01:08 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Mon Oct 04 08:01:08 2004 +0000"
      },
      "message": "Every file includes it and warns about it.\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": "9172ee0e5dc8c6f6929821fb1433699700e53114",
      "tree": "63c8f3d3c3c375fe9613217e8e22213a7e10bf42",
      "parents": [
        "ddb07e5bf4e16889b0845c83d8a73ebfa435bcba"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 27 12:46:37 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 27 12:46:37 2004 +0000"
      },
      "message": "2004-09-27 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* zebra.h: Add WANT_OSPF_WRITE_FRAGMENT for ospfd\n\t  to try to fragment oversized packets. Enabled only for Linux.\n\t  Add HAVE_IP_HDRINCL_BSD_ORDER to define struct ip byte order,\n\t  to consolidate various ad-hoc platform defines for same thing.\n"
    },
    {
      "commit": "efba6ce941fb96763d5804212a674ca6b7098853",
      "tree": "84538f4f9fa888a11838333bb6df029181d00cd5",
      "parents": [
        "b094d2603158f9d514404941c9fad04dd9b7d42c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Aug 25 13:47:16 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Aug 25 13:47:16 2004 +0000"
      },
      "message": "2004-08-19 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * zebra.h: add MAX and MIN defines (eg for ospf6d)\n"
    },
    {
      "commit": "138ce75fd0254072f27ecf38994a90276b276730",
      "tree": "381589b0aa5f3bd18855ed594e4c88811a31262e",
      "parents": [
        "beebba75167b33e05b5e02a41179ad0c13a0bcd7"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jun 21 10:35:59 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jun 21 10:35:59 2004 +0000"
      },
      "message": "2004-06-21 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * ChangeLog: fix my last update config.h -\u003e zebra.h ;)\n        * zebra.h: Fix gcc check.\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": "51a8798e8d36dddfdeb6b0bfd01bf32a646e8bb1",
      "tree": "fd1f6e63fc2ee07f7312b5f2409daa6fbe15cc2d",
      "parents": [
        "ca5e516c84cc2d35b6f6cd29f8ba9e835d3b72ba"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 09 10:36:05 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 09 10:36:05 2004 +0000"
      },
      "message": "2004-06-09 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* config.h: __attribute__ is a gcc\u0027ism\n"
    },
    {
      "commit": "5228ad27e2f3abe0ebb69f66607aedc048b94a13",
      "tree": "a65817a03150dbfeb56a1eaceab526f31be1cc1d",
      "parents": [
        "c2bfbcc38428b53e856617e1da8bbe9f8d2ee2fa"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 04 17:58:18 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 04 17:58:18 2004 +0000"
      },
      "message": "2004-06-04 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * type mismatch fixes\n"
    },
    {
      "commit": "9e867fe663c4eb43c36f35067c0dd092e8c83c14",
      "tree": "f29461b6a2dc8c38037dc0cf91e70392f9ed4ab2",
      "parents": [
        "eb5d44eb8dcf25a1b328e57d1eabb1f89e3bc59b"
      ],
      "author": {
        "name": "jardin",
        "email": "jardin",
        "time": "Tue Dec 23 08:56:18 2003 +0000"
      },
      "committer": {
        "name": "jardin",
        "email": "jardin",
        "time": "Tue Dec 23 08:56:18 2003 +0000"
      },
      "message": "Merge isisd into the Quagga\u0027s framework:\n  - add privs support\n  - use misc quagga\u0027s definitions\n  - make it compile\"able\"\n  - fix segfault cases related to hostname()\n  - add debug isis xxx command\n\nThis patch has been approved by Paul Jakma.\n"
    },
    {
      "commit": "a58c25b65d9816a549278f1a74a9121500b14b20",
      "tree": "ab838eaab06046b446ff1ea7d8b9ff9ef678af61",
      "parents": [
        "ccc9235e602ebd578fbeba3c98499b3933069d96"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 22 02:50:45 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 22 02:50:45 2003 +0000"
      },
      "message": "2003-10-22 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * lib/zebra.h: include limits.h if its there, its a portable header\n          and useful and not just solaris specific. net/route.h is also\n          useful.\n"
    },
    {
      "commit": "3b424979f54c6b128d1ee8a7c33d072d321f2f0c",
      "tree": "c3c684d2e1576610d3a0cedefa3bab23610c8d61",
      "parents": [
        "7ddf1d6eaf5a339d13661469212ac33f77e808fc"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Oct 13 09:47:32 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Oct 13 09:47:32 2003 +0000"
      },
      "message": "2003-10-13 Jay Fenlason \u003cfenlason@redhat.com\u003e\n\n\t* lib/zebra.h: define UINT32_MAX for those systems which do not\n\t  provide it.\n\t* bgp_attr.h: define BGP_MED_MAX.\n\t* bgp_route.c: update defines/constants to BGP_MED_MAX.\n\t* bgp_routemap.c: ditto. clean up route_match_metric_compile\n\t  slightly to avoid unneccesary XMALLOC.\n"
    },
    {
      "commit": "9bcdb638923e3254b64744d02ceab62b8f2941a1",
      "tree": "2262989f3d4105cd0b539ece52628666ff3b580c",
      "parents": [
        "0c14ad88aab5df610acfe035385a7323e1683035"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jul 08 08:09:45 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jul 08 08:09:45 2003 +0000"
      },
      "message": "2003-07-8 Chris Andrews \u003cchris@nodnol.org\u003e\n\n\t* zebra/kernel_socket.c: Update for new zebrad global struct\n\t* zebra/ipforward_solaris.c: Add missing privs.h include. Uncomment\n          /dev/ip define.\n\t* lib/zebra.h: Add typedefs for SunOS.\n"
    },
    {
      "commit": "ba3a0bc5fa05691b211340bef69c5c7a3659d412",
      "tree": "af7b0b8ca5ba7f6c39b96be1ea180135a9159e64",
      "parents": [
        "edd7c245d3a77012abf801da00d5664ebaa5f749"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Jun 04 17:41:54 2003 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Wed Jun 04 17:41:54 2003 +0000"
      },
      "message": "Paul forgot probably to commit privs.[c|h] changes. Had to reorder includes\nin zebra.h to make it compile in debian.\n"
    },
    {
      "commit": "edd7c245d3a77012abf801da00d5664ebaa5f749",
      "tree": "d4fada229d7980fb751f28c9a979aa88de1a0af0",
      "parents": [
        "a159ed935b580ed99111a185734ddd9c973e7691"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 04 13:59:38 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 04 13:59:38 2003 +0000"
      },
      "message": "2003-06-04 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* Merge of zebra privileges\n"
    },
    {
      "commit": "fb2d1502bb0893f2aaccb49fb39521974078d96a",
      "tree": "0d3059d875d2be20913eaceaed12c8c09ec2b481",
      "parents": [
        "97e34b88b39abdef4ba0581574d315ef7ddb1a86"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 04 09:40:54 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jun 04 09:40:54 2003 +0000"
      },
      "message": "Paul Jakma:\n\nlib/debug.{c,h}: glibc backtrace printing function (from the glibc info page)\nconfigure.ac: check for glibc backtrace and set define\nlib/zebra.h: glibc backtrace support\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": "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": "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": "04a72e593b870688649653f569ebc0e7589b4fdb",
      "tree": "ffc682e7a68b636baed87cb8b9a68d1b3058fa6b",
      "parents": [
        "af8d0336a3cd98ef2fe163a6303a077735de4fb2"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 24 16:02:27 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat May 24 16:02:27 2003 +0000"
      },
      "message": "From: rivo nurges \u003crix@estpak.ee\u003e\nSubject: solaris compile patch\n\ntypes defined for SUNOS_5 were already defined in config.h\n"
    },
    {
      "commit": "ba965c6c45865fee03410c1b75ef254e4d7e3ceb",
      "tree": "dda1a5ff3f56d76214a76c9f0f13b206f1dd9a17",
      "parents": [
        "33b72948209fee3ba217f7495fc1d12bb2ff187a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue May 20 02:37:39 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue May 20 02:37:39 2003 +0000"
      },
      "message": "Undo revision 1.3, revert back to zebra_org 1.1.1.2.\nasm/types.h is required for netlink.\nLater glibc\u0027s seem to have resolved the warning.\n"
    },
    {
      "commit": "f04385215b363f57ed3d3dd8f6bfa53ac4e2c1da",
      "tree": "dc2a7e6eff78285b57602649489a51c0c82a791c",
      "parents": [
        "733e8102dc513a49363c73597fbf9d3fe061acd5"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 19 21:06:32 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 19 21:06:32 2003 +0000"
      },
      "message": "From: Paul Jakma \u003cpaul@clubi.ie\u003e\nSubject: [zebra 19097] HAVE_ASM_TYPES\n\ndoes anyone know why lib/zebra.h has:\n\n#ifdef HAVE_ASM_TYPES_H\n#include \u003casm/types.h\u003e\n#endif /* HAVE_ASM_TYPES_H */\n\nThere\u0027s no need for it that i can see (least not on linux) and it\ncauses compile warnings. Is it needed? If so, why?\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"
    }
  ]
}
