)]}'
{
  "log": [
    {
      "commit": "d13c3b4fcf802f904ef47ad82fdc9763fc704fdf",
      "tree": "b95426a542d8b931b731d8138b296c22ec9ac05e",
      "parents": [
        "ba803bd51cdf3decfc740b3d7287fe51228f78fb"
      ],
      "author": {
        "name": "Mathieu Goessens",
        "email": "gebura@poolp.org",
        "time": "Tue Jun 23 15:59:45 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 23 15:59:45 2009 +0100"
      },
      "message": "[zebra] linux policy routing support with ipv6\n\nQuagga support linux policy routing (ip route ... table $X) with zebra.conf\ntable $X option.  It works fine on ipv4.  On ipv6 the parameter is ignored\n(table 0 is used).\n\n* zebra/...: Pass appropriate table arg to rib_{add,delete}_ipv6\n"
    },
    {
      "commit": "4308abba5cab18c1d30b962567b06b02a1a15361",
      "tree": "000095719fdc1a66599af3160f9af4e97c2a935f",
      "parents": [
        "6c684653f08fadf738ca52a3fbe512e3d1698ceb"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Dec 01 14:19:38 2008 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:25 2009 +0100"
      },
      "message": "[zebra] MTU is unsigned\n\nThe MTU data in the netlink message is always unsigned 32 bits.\nDon\u0027t use integer.\n"
    },
    {
      "commit": "4c699477d24e7104893130d072963df5cea17214",
      "tree": "9e4336586dd07868f905c87a4a7479e2b8b0795f",
      "parents": [
        "898987e976e8f7a50a4549475ab4970a85895f31"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sun Aug 17 17:01:44 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:56:25 2008 +0100"
      },
      "message": "[zebra:linux] netlink: no need to change privs for receive\n\n2008-06-17 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* rt_netlink.c: (netlink_parse_info) Linux doesn\u0027t check privledges\n\t  on receive, so avoid the overhead of lowering and raising the\n\t  priviledges on each received message\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "898987e976e8f7a50a4549475ab4970a85895f31",
      "tree": "7e0b44b20459f8aa30a1c7e12e463b6088fcff74",
      "parents": [
        "30afea3b584515ba19b38fcde6f562a550c1fcab"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sun Aug 17 16:56:15 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:56:25 2008 +0100"
      },
      "message": "[zebra:linux] netlink: quiet harmless errors\n\n2008-06-17 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* rt_netlink.c: (netlink_parse_info) There can be harmless races\n\t  such as adding an existing route, or deleting an already deleted\n\t  route. Don\u0027t bother logging these unless debugging is turned on.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "30afea3b584515ba19b38fcde6f562a550c1fcab",
      "tree": "f39773af1c2c29518fbbc222f2dd4948be2484ef",
      "parents": [
        "cadfb2cd81528fc6f85af24dbf0ff3fd0ff63e6b"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sat Aug 16 18:25:47 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:56:25 2008 +0100"
      },
      "message": "[zebra:linux] netlink buffer size tweaking only needed on receive socket\n\n2008-08-16 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* rt_netlink.c: (netlink_recvbuf) consolidate recvbuf setting\n\t  (netlink_socket) no need to set receive buffer on netlink sockets\n\t  generally\n\t  (kernel_init) set recvbuffer on the listen socket\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "4cde931e2d5a83708cf55e63eae7b629e8e4296a",
      "tree": "09cdea4432cca881b390b9499914a9acb130d78b",
      "parents": [
        "3d265b4d9d748bf4c92aefebc2ca0c04fd607945"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sat Aug 16 17:51:27 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:56:25 2008 +0100"
      },
      "message": "[zebra:linux] clean up blocking setting of netlink sockets\n\n2008-08-16 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* zebra/rt_netlink.c: This change removes the overhead of twiddling\n          the socket twice on every route change. The netlink support has\n          two sockets, one is used for request/response and should always\n          block. The other is used for asynchronous notification and should\n          always be non-blocking.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "3d265b4d9d748bf4c92aefebc2ca0c04fd607945",
      "tree": "45bdddf4ce6736d8f4dd9091ce20313eae894572",
      "parents": [
        "30a2231a4881f53deca61ef7a62b225a43dab4c5"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Sat Aug 16 17:30:39 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:56:25 2008 +0100"
      },
      "message": "[zebra:linux] Filter out unwanted netlink messages by PID\n\n2008-08-16 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* zebra/rt_netlink.c: Update the netlink socket BPF to cancel out\n\t  unwanted ACKs on the listen socket by matching on the PID.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "1423c809cc4ddc2e013ba6264c49a11e5719c6f2",
      "tree": "db0389e7de020bbcb9fd78d45417b0842a6adb0b",
      "parents": [
        "89d9fa301e146193093ff876f96b3612dc390bbb"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Aug 14 17:59:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] mes_lookup string lookup table argument should be marked const\n\n2008-08-14 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* lib/log.{c,h}: struct message argument should point to const\n\t* */*.c: adjust to suit,\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "6072b24eb776e6486f076b1762d3650e803954c2",
      "tree": "d6a305760bdd5b612be661ae53e32325990337aa",
      "parents": [
        "ffe11cfb0a808ae514193438616dfabc512b4cf6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Aug 14 16:52:26 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[zebra] mark some rt_netlink functions static\n\n2008-08-14 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* zebra/rt_netlink.c: local functions should be static.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "40da22166ff29753a65b7947ed5fa7261fee1d80",
      "tree": "97b71b8f4ad218b8d136ea93ec9dfd9537408e1b",
      "parents": [
        "7f794f2bb079c1a5bb0fdebb815921c168c00e90"
      ],
      "author": {
        "name": "Timo Teräs",
        "email": "timo.teras@iki.fi",
        "time": "Wed Aug 13 17:37:14 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:57 2008 +0100"
      },
      "message": "[zebra:netlink] Set proto/scope on all route update messages\n\n2008-08-13 Timo Teräs \u003ctimo.teras@iki.fi\u003e\n\n\t* zebra/rt_netlink.c: (netlink_route{,_multipath) Set protocol and\n\t  scope appropriately for both NEW and DELROUTE messages, to avoid\n\t  wiping out non-zebra routes on delete.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\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": "068fd77cff0ce09b6390641abd84fc09a89c49db",
      "tree": "0a71721ce90997f1fe0c45d677f3625dbd890369",
      "parents": [
        "ed6ef902df72cc8267e274ed515a47af52c9fed7"
      ],
      "author": {
        "name": "vize",
        "email": "vize",
        "time": "Fri Aug 10 06:25:20 2007 +0000"
      },
      "committer": {
        "name": "vize",
        "email": "vize",
        "time": "Fri Aug 10 06:25:20 2007 +0000"
      },
      "message": "Use the proper field length for the peer\u0027s address (netlink_interface_addr)\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": "e4529636b77124285cca96a62799d0ff6a7addeb",
      "tree": "a8a50de7413833d5277ed7309248e03719e9efd3",
      "parents": [
        "43cd33a44e010f818633b7f144b5a0be352b41e7"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Dec 12 19:18:21 2006 +0000"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "ajschorr@alumni.princeton.edu",
        "time": "Tue Dec 12 19:18:21 2006 +0000"
      },
      "message": "[PtP over ethernet] New peer flag allows much more addressing flexibility\n\n2006-12-12 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* if.h: (struct connected) Add new ZEBRA_IFA_PEER flag indicating\n\t  whether a peer address has been configured.  Comment now shows\n\t  the new interpretation of the destination addr: if ZEBRA_IFA_PEER\n\t  is set, then it must contain the destination address, otherwise\n\t  it may contain the broadcast address or be NULL.\n\t  (CONNECTED_DEST_HOST,CONNECTED_POINTOPOINT_HOST) Remove obsolete\n\t  macros that were specific to IPv4 and not fully general.\n\t  (CONNECTED_PEER) New macro to check ZEBRA_IFA_PEER flag.\n\t  (CONNECTED_PREFIX) New macro giving the prefix to insert into\n\t  the RIB: if CONNECTED_PEER, then use the destination (peer) address,\n\t  else use the address field.\n\t  (CONNECTED_ID) New macro to come up with an identifying address\n\t  for the struct connected.\n\t* if.c: (if_lookup_address, connected_lookup_address) Streamline\n\t  logic with new CONNECTED_PREFIX macro.\n\t* prefix.h: (PREFIX_COPY_IPV4, PREFIX_COPY_IPV6) New macros\n\t  for better performance than the general prefix_copy function.\n\t* zclient.c: (zebra_interface_address_read) For non-null destination\n\t  addresses, set prefixlen to equal the address prefixlen.  This\n\t  is needed to get the new CONNECTED_PREFIX macro to work properly.\n\t* connected.c: (connected_up_ipv4, connected_down_ipv4,\n\t  connected_up_ipv6, connected_down_ipv6) Simplify logic using the\n\t  new CONNECTED_PREFIX macro.\n\t  (connected_add_ipv4) Set prefixlen in destination addresses (required\n\t  by the CONNECTED_PREFIX macro).  Use CONNECTED_PEER macro instead\n\t  of testing for IFF_POINTOPOINT.  Delete invalid warning message.\n\t  Warn about cases where the ZEBRA_IFA_PEER is set but no\n\t  destination address has been supplied (and turn off the flag).\n\t  (connected_add_ipv6) Add new flags argument so callers may set\n\t  the ZEBRA_IFA_PEER flag.  If peer/broadcast address satisfies\n\t  IN6_IS_ADDR_UNSPECIFIED, then reject it with a warning.\n\t  Set prefixlen in destination address so CONNECTED_PREFIX will work.\n\t* connected.h: (connected_add_ipv6) Add new flags argument so\n\t  callers may set the ZEBRA_IFA_PEER flag.\n\t* interface.c: (connected_dump_vty) Use CONNECTED_PEER macro\n\t  to decide whether the destination address is a peer or broadcast\n\t  address (instead of checking IFF_BROADCAST and IFF_POINTOPOINT).\n\t* if_ioctl.c: (if_getaddrs) Instead of setting a peer address\n\t  only when the IFF_POINTOPOINT is set, we now accept a peer\n\t  address whenever it is available and not the same as the local\n\t  address.  Otherwise (no peer address assigned), we check\n\t  for a broadcast address (regardless of the IFF_BROADCAST flag).\n\t  And must now pass a flags value of ZEBRA_IFA_PEER to\n\t  connected_add_ipv4 when a peer address is assigned.\n\t  The same new logic is used with the IPv6 code as well (and we\n\t  pass the new flags argument to connected_add_ipv6).\n\t  (if_get_addr) Do not bother to check IFF_POINTOPOINT: just\n\t  issue the SIOCGIFDSTADDR ioctl and see if we get back\n\t  a peer address not matching the local address (and set\n\t  the ZEBRA_IFA_PEER in that case).  If there\u0027s no peer address,\n\t  try to grab SIOCGIFBRDADDR regardless of whether IFF_BROADCAST is set.\n\t* if_ioctl_solaris.c: (if_get_addr) Just try the SIOCGLIFDSTADDR ioctl\n\t  without bothering to check the IFF_POINTOPOINT flag.  And if\n\t  no peer address was found, just try the SIOCGLIFBRDADDR ioctl\n\t  without checking the IFF_BROADCAST flag.  Call connected_add_ipv4\n\t  and connected_add_ipv6 with appropriate flags.\n\t* if_proc.c: (ifaddr_proc_ipv6) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* kernel_socket.c: (ifam_read) Must pass new flags argument to\n\t  connected_add_ipv6.\n\t* rt_netlink.c: (netlink_interface_addr) Copy logic from iproute2\n\t  to determine local and possible peer address (so there\u0027s no longer\n\t  a test for IFF_POINTOPOINT).  Set ZEBRA_IFA_PEER flag appropriately.\n\t  Pass new flags argument to connected_add_ipv6.\n\t  (netlink_address) Test !CONNECTED_PEER instead of if_is_broadcast\n\t  to determine whether the connected destination address is a\n\t  broadcast address.\n\t* bgp_nexthop.c: (bgp_connected_add, bgp_connected_delete)\n\t  Simplify logic by using new CONNECTED_PREFIX macro.\n\t* ospf_interface.c: (ospf_if_is_configured, ospf_if_lookup_by_prefix,\n\t  ospf_if_lookup_recv_if) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_lsa.c: (lsa_link_ptop_set) Using the new CONNECTED_PREFIX\n\t  macro, both options collapse into the same code.\n\t* ospf_snmp.c: (ospf_snmp_if_update) Simplify logic using new\n\t  CONNECTED_ID macro.\n\t  (ospf_snmp_is_if_have_addr) Simplify logic using new CONNECTED_PREFIX\n\t  macro.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) Use new CONNECTED_PEER macro\n\t  instead of testing the IFF_POINTOPOINT flag.\n\t* ospfd.c: (ospf_network_match_iface) Use new CONNECTED_PEER macro\n\t  instead of testing with if_is_pointopoint.  And add commented-out\n\t  code to implement alternative (in my opinion) more elegant behavior\n\t  that has no special-case treatment for PtP addresses.\n\t  (ospf_network_run) Use new CONNECTED_ID macro to simplify logic.\n\t* rip_interface.c: (rip_interface_multicast_set) Use new CONNECTED_ID\n\t  macro to simplify logic.\n\t  (rip_request_interface_send) Fix minor bug: ipv4_broadcast_addr does\n\t  not give a useful result if prefixlen is 32 (we require a peer\n\t  address in such cases).\n\t* ripd.c: (rip_update_interface) Fix same bug as above.\n"
    },
    {
      "commit": "27b472533bc8bb0fdb37dcda7596c385d3b9f414",
      "tree": "60e09c43d4d016b32eb47ec0ba4a0263f0b40bbc",
      "parents": [
        "33d5ab9ef197ce281859f12251df4e412c469c65"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Jul 02 16:38:54 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sun Jul 02 16:38:54 2006 +0000"
      },
      "message": "[zebra] Fix CID #104, check addr for null, and #18, check nexthop type args\n\n2006-07-02 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* rt_netlink.c: (netlink_interface_addr) Fix CID #104, can not\n\t  proceed if addr is NULL.\n\t* zebra_rib.c: (static_add_ipv6) Fix CID #18, double check\n\t  required arguments are supplied for the given nexthop type.\n"
    },
    {
      "commit": "d34b8991b4c156ff3281558dd8252d3787ae8d8b",
      "tree": "f198a545a4363d91c40b6303a03d2c7e323cc5be",
      "parents": [
        "61f42aed5e1cee1a853f92110d794a286995d203"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 18:03:04 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 17 18:03:04 2006 +0000"
      },
      "message": "[zebra] Record NEWADDR metric on PF_ROUTE, print CACHEINFO debug on netlink\n\n2006-01-17 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* kernel_socket.c: (ifam_read) Read metric from RTM_NEWADDR.\n\t  If interface is an alias, pass the alias as a label for\n\t  connected_add_ipv{4,6}.\n\t* rt_netlink.c: (netlink_interface_addr) print out\n\t  IFA_CACHEINFO info, if present, when debugging kernel\n\t  messages.\n"
    },
    {
      "commit": "6621ca868c935a82468e07ea2e5a165f40750658",
      "tree": "01db8cd66509c8afd2057558b048fc134c1371b8",
      "parents": [
        "5906476bea21153f5d757e364b8e4c604b72cef1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Nov 23 13:02:08 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Nov 23 13:02:08 2005 +0000"
      },
      "message": "[zebra] fix some small compile errors, mark several functions static\n\n2005-11-23 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) fix some small compile errors, and mark several\n          functions as static.\n        * kernel_socket.c: (ifan_read) should be static.\n          fix missing brackets.\n          (ifm_read,ifam_read,rtm_read_mesg,kernel_read) Make static\n          (ifam_read_mesg) make static. fix incorrect variable name.\n          (rtm_read) make static. Fix call to rib_delete_ipv4 which\n          should be rib_delete_ipv6.\n          (routing_socket,kernel_init) should be static. Void argument\n          should be specified as such, not left incomplete.\n        * rt_netlink.c: rt.h should be included, contains prototypes of\n          exported functions.\n          (kernel_delete_ipv6_old) fix sign of index argument.\n        * rt_socket.c: Exact same as previous. Also, make various\n          functions static.\n        * rtread_getmsg.c: Include zserv.h, which prototypes\n          route_read. Make static.\n        * rtread_sysctl.c: zserv.h and rt.h should be included.\n          fix definition of route_read.\n"
    },
    {
      "commit": "0752ef0b2e9bbf6c7ab20ed0fe87840b3bd1b7f4",
      "tree": "d580aa8f809edf9a75968f7416e8415ffa72784c",
      "parents": [
        "6d45276f0c8aeec1ce53f77039ec02ec0f940ca1"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 12:35:21 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Nov 03 12:35:21 2005 +0000"
      },
      "message": "2005-11-03 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* connected.{c,h}: Include memory.h\n\t  (connected_add_ipv4) Use MTYPE for ifc label.\n\t  (connected_add_ipv6) Also should accept label. Store it in ifp.\n\t  (connected_del_ipv4) Taking label as argument is pointless.\n\t* rt_netlink.c: (netlink_interface_addr) update label usage\n\t  for connected_{add,delete} functions.\n\t* if_ioctl.c: (if_getaddrs) NULL label for connected_add_ipv6.\n\t* if_ioctl_solaris.c: (interface_list_ioctl) Pass LIFC_NOXMIT\n\t  so we also find out about NOXMIT interfaces like VNI.\n\t  Bit of hackery to turn interface names into the primary\n\t  interface name, later with routing socket messages we only\n\t  will about primary interfaces anyway, so we must normalise\n\t  the name.\n\t  (if_get_addr) take label as argument, so it can\n\t  be passed to connected_add.\n\t  If label is provided, then it is interface name to issue the\n\t  ioctl for address information on, not the ifp name.\n\t  (interface_list) List AF_UNSPEC too, just in case.\n\t* if_proc.c: (ifaddr_proc_ipv6) label for connected_add_ipv6.\n\t* interface.c: (if_addr_wakeup) Some very bogus code - sets\n\t  IFF_RUNNING - add comment.\n\t  (if_refresh)\n\t  (ip_address_install) Use MTYPE for ifc label.\n\t* ioctl_solaris.c: (if_mangle_up) New function. Hackery to make\n\t  IFF_UP reflect whether any addresses are left on the\n\t  interface, as we get signalled for IFF_UP flags change on the\n\t  primary interface only. Logical interfaces dont generate\n\t  IFINFO, but we do get an RTM_DELADDR.\n\t  (if_get_flags) Call if_mangle_up before return.\n\t* kernel_socket.c: (ifam_read) Fixup calls to\n\t  connected_{add,delete} to match above changes. Rename gate\n\t  variable to brd, less confusing.\n\t  Pass the interface name as a label, if it is not same name\n\t  as ifp-\u003ename.\n"
    },
    {
      "commit": "c05612b9a702d0f49c379c92deb6daab55372aea",
      "tree": "3e99659456e05f2d3d428c430c883f49ad7fdd28",
      "parents": [
        "13fb40ac99823c405137a42d7666785fd7ac641a"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 16:36:54 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Oct 01 16:36:54 2005 +0000"
      },
      "message": "2005-10-01 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* rt_netlink.c: (netlink_request) Use memset to clear structure\n\t  before calling sendto (eliminates a valgrind error message about\n\t  uninitialized data).\n"
    },
    {
      "commit": "be61c4eb59b8df1aab496176d87bb2e1763f185e",
      "tree": "063e8baa7cd4a863e72d246d7c14f14842cbb604",
      "parents": [
        "b7395791a31f7b734094d032998ab632136f36f1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Aug 27 06:05:47 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Aug 27 06:05:47 2005 +0000"
      },
      "message": "\t* zebra_rib.c, rib.h: Add distance and metric arguments to the\n\t  rib_add_ipv6() function so that IPv6 routes in RIB can have correct\n\t  metric. No IPv6 routing daemon uses distance yet though.\n\t* zserv.c, connected.c, kernel_socket.c, rt_netlink.c,\n\t  rtread_proc.c,zserv.c: Pass metric and distance info to the\n\t  rib_add_ipv6().\n\n\tForwardport from stable branch.\n"
    },
    {
      "commit": "1ada81981da3e6422a59d3052d32696fc93cdea1",
      "tree": "d207d2b0d92a7386bb05647ab9810db699de6e5b",
      "parents": [
        "1ddd729e6f20b93a635caece8c34ee1b7021fe26"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jun 12 11:28:18 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Jun 12 11:28:18 2005 +0000"
      },
      "message": "\t* rt_netlink.c: Remove unused netlink-addr socket declaration.\n\t* rt_netlink.c (netlink_parse_info): Fix debug messages - nlmsg_pid is\n\t  unsigned and one zlog call had swapped arguments.\n\t* rt_netlink.c (netlink_route_multipath): Fix compile with disabled\n\t  IPv6 support.\n\n\t[backport candidate] - with stuff commited to rt_netlink.c before to\n\tfix logging in netlink_route_multipath().\n"
    },
    {
      "commit": "fa59980fc8a5d06f590d16288b82361ece9c5652",
      "tree": "39f751985a3728b371744022d9df82514f1d0cb5",
      "parents": [
        "206d8055fc67af4e5dc955f0fdd0bf52b58260ce"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 16:59:28 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 16:59:28 2005 +0000"
      },
      "message": "\t* rt_netlink.c: One tiny missing comma caused pointless debug messages\n\t  about IPv6 nexthops.\n"
    },
    {
      "commit": "206d8055fc67af4e5dc955f0fdd0bf52b58260ce",
      "tree": "bf616cb70b0426055226fa0551241df9f5dbfd4e",
      "parents": [
        "5bb4c1981a518315bf7f4fc81a85baf2061e32fa"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 16:38:51 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sat Apr 09 16:38:51 2005 +0000"
      },
      "message": "\t* rt_netlink.c (netlink_parse_info): Fix warning. It\u0027s safe to cast\n\t  status to unsigned here, because we already checked that it isn\u0027t\n\t  negative or 0.\n\t* rt_netlink.c (netlink_interface_addr): Prefix length belongs to the\n\t  address, not to the interface.\n\t* rt_netlink.c (netlink_route_multipath): Fix debug. No useless info\n\t  is printed out now and IPv6 info is handeled.\n"
    },
    {
      "commit": "d2fc88962a9a494ecb34167871bb9e7273a25d33",
      "tree": "304a1c1a744972bc10b1f677a134907c404b361d",
      "parents": [
        "386e61502d391adb985ac1487825349ec85e6a8c"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 18:38:43 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Apr 02 18:38:43 2005 +0000"
      },
      "message": "2005-04-02 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\tFix problems when netlink interfaces are renamed (same ifindex used\n\tfor a new interface).  Start cleaning up some problems with the way\n\tinterface names are handled.\n\t* interface.c: (if_new_intern_ifindex) Remove obsolete function.\n\t  (if_delete_update) After distributing the interface deletion message,\n\t  set ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t  (if_dump_vty) Detect pseudo interface by checking if ifp-\u003eifindex is\n\t  IFINDEX_INTERNAL.\n\t  (zebra_interface) Check return code from interface_cmd.func.\n\t  Do not set internal ifindex values to if_new_intern_ifindex(),\n\t  since we now use IFINDEX_INTERNAL for all pseudo interfaces.\n\t* kernel_socket.c: (ifm_read) Fix code and comments to reflect that\n\t  all internal interfaces now have ifp-\u003eifindex set to IFINDEX_INTERNAL.\n        * rt_netlink.c: (set_ifindex) New function used to update ifp-\u003eifindex.\n\t  Detects interface rename events by checking if that ifindex is already\n\t  being used.  If it is, delete the old interface before assigning\n\t  the ifindex to the new interface.\n\t  (netlink_interface, netlink_link_change) Call set_ifindex to update\n\t  the ifindex.\n\t* if.h: Remove define for IFINDEX_INTERNBASE and add define\n\t  IFINDEX_INTERNAL 0, since all internal (i.e. non-kernel) pseudo-\n\t  interfaces should have ifindex set to 0.\n\t  (if_new) Remove function.\n\t  (if_delete_retain) New function to delete an interface without\n\t  removing from iflist and freeing the structure.\n\t  (ifname2ifindex) New function.\n\t* if.c: (if_new) Remove function (absorb into if_create).\n\t  (if_create) Replace function if_new with call to calloc.\n\t  Set ifp-\u003eifindex to IFINDEX_INTERNAL.  Fix off-by-one error\n\t  in assert to check length of interface name.  Add error message\n\t  if interface with this name already exists.\n\t  (if_delete_retain) New function to delete an interface without\n\t  removing from iflist and freeing the structure.\n\t  (if_delete) Implement with help of if_delete_retain.\n\t  (ifindex2ifname) Reimplement using if_lookup_by_index.\n\t  (ifname2ifindex) New function to complement ifindex2ifname.\n\t  (interface) The interface command should check the name length\n\t  and fail with a warning message if it is too long.\n\t  (no_interface) Fix spelling in warning message.\n\t  (if_nametoindex) Reimplement using if_lookup_by_name.\n\t  (if_indextoname, ifaddr_ipv4_lookup) Reimplement using\n\t  if_lookup_by_index.\n\t* bgp_zebra.c: (bgp_interface_delete) After deleting, set ifp-\u003eifindex\n\t  to IFINDEX_INTERNAL.\n\t* isis_zebra.c: (isis_zebra_if_del) Call if_delete_retain instead\n\t  of if_delete, since it is generally not safe to remove interface\n\t  structures.  After deleting, set ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t  (zebra_interface_if_lookup) Tighten up code.\n\t* ospf6_zebra.c: (ospf6_zebra_if_del) Previously, this whole function\n\t  was commented out.  But this is not safe: we should at least update\n\t  the ifindex when the interface is deleted.  So the new version\n\t  updates the interface status and sets ifp-\u003eifindex to\n\t  IFINDEX_INTERNAL.\n\t  (ospf6_zebra_route_update) Use if_indextoname properly.\n\t* ospf_vty.c: (show_ip_ospf_interface_sub) Show ifindex and interface\n\t  flags to help with debugging.\n\t* ospf_zebra.c: (ospf_interface_delete) After deleting, set ifp-\u003eifindex\n\t  to IFINDEX_INTERNAL.\n\t  (zebra_interface_if_lookup) Make function static.  Tighten up code.\n\t* rip_interface.c: (rip_interface_delete) After deleting, set\n\t  ifp-\u003eifindex to IFINDEX_INTERNAL.\n\t* ripng_interface.c: (ripng_interface_delete) After deleting, set\n\t  ifp-\u003eifindex to IFINDEX_INTERNAL.\n"
    },
    {
      "commit": "b7ed1ec7d62f6db50de882d1be08e1e32acc7909",
      "tree": "db4f4d21a5c2d1ad6065458ec8cc48a16c628dfa",
      "parents": [
        "aca72fda8f251c866f88becd5bec4c215104b102"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 31 20:13:49 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 31 20:13:49 2005 +0000"
      },
      "message": "\t* rt_netlink.c (netlink_talk_filter): Show always warning message,\n\t  it\u0027s not for debug.\n\t* rt_netlink.c (netlink_talk): Don\u0027t assume we use netlink_cmd\n\t  although we do now actually.\n\t* rt_netlink.c (netlink_route, netlink_route_multipath): Always use\n\t  netlink_cmd to send messages to the kernel.\n\n\t[backport candidate]\n"
    },
    {
      "commit": "a608bbf27b48b7bd5e63f1c46380a1c5288ba48a",
      "tree": "5317bf773d9a90337fa9cef8ca24127f127dc2bc",
      "parents": [
        "5dcbdf82efdf65313a04ea45f2c8f7307c7ab671"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Mar 29 17:03:49 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Mar 29 17:03:49 2005 +0000"
      },
      "message": "2005-03-29 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* rt_netlink.c: (netlink_link_change) If the status of an\n\t  operative interface changes (e.g. MTU changes), the client\n\t  daemons should be notified by calling zebra_interface_up_update.\n\t  Previously, the information was being updated in zebra\u0027s\n\t  interface structure, but the clients were not notified of\n\t  changes to an operative interface.\n\t* ospf_zebra.c: (ospf_interface_state_up) If the MTU of an operative\n\t  interface changes, print a debug message and call ospf_if_reset()\n\t  to simulate down/up on the interface.\n\t* ospf_interface.h: Declare new function ospf_if_reset().\n\t* ospf_interface.c: (ospf_if_reset) New function to call ospf_if_down\n\t  and ospf_if_up for all ospf interfaces attached to an interface.\n"
    },
    {
      "commit": "c1f01f358d28f2375b1caf239581105c6f1e3537",
      "tree": "b40136dc6bedb76199f40102d0977b4f1005bdef",
      "parents": [
        "4275b1de3a54650a81f82999c296b756ee5b5679"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Mar 12 06:33:14 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Mar 12 06:33:14 2005 +0000"
      },
      "message": "2005-03-12 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* rt_netlink.c: (netlink_route_multipath) dont set equalise flag.\n\t  No stock Linux kernel has ever supported it, and even if it had\n"
    },
    {
      "commit": "e8274dcde1bd0f0339393714d57c019e57a5b798",
      "tree": "24109f0de306036dcf7f8baf3f8d4252db81603c",
      "parents": [
        "306541b31624a344db085bfee45e5d9343fc8dca"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Feb 20 19:09:23 2005 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Feb 20 19:09:23 2005 +0000"
      },
      "message": "\t* rt_netlink.c: Don\u0027t show messages \"ignoring message type 0x001[89]\"\n\t  if we are not debugging.\n"
    },
    {
      "commit": "1e19315262b1eb1228af31f43aee7c9c3e9eefc6",
      "tree": "d7aedd6d94d06ddef166f62014369c845ee3defa",
      "parents": [
        "1dd13d41d09487c3d595b13a087b2ec87b7f4ce8"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:53:05 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:53:05 2005 +0000"
      },
      "message": "2005-02-14 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* Not all Linux netlink systems have IFLA_WIRELESS\n"
    },
    {
      "commit": "4be019d5530e21c9e54e41e46a57ab071b9b11ae",
      "tree": "4a7b579d0fd9467b097e3190b2d7204dcd9a0f2b",
      "parents": [
        "c3eab8714368569d25f6dc87f6620528e0d7a118"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 16:12:41 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Jan 29 16:12:41 2005 +0000"
      },
      "message": "2005-01-29 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* rt_netlink.c: (netlink_socket,netlink_request,netlink_parse_info,\n\t  netlink_talk) Save errno before calling zserv_privs.change.\n\n\t  [backport candidate]\n"
    },
    {
      "commit": "c15cb24241277db9fb4102ddc712dc3297f16d1f",
      "tree": "b7e9eb47f5b8953c82b55732a9428813a238c5df",
      "parents": [
        "13bfca7a1059a73a836f4813170f296a82266211"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 24 09:05:27 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Jan 24 09:05:27 2005 +0000"
      },
      "message": "2005-01-24 Martin Pot \u003cmpot at martybugs.net\u003e\n\n\t* zebra/rt_netlink.c: ignore wireless newlink netlink messages.\n"
    },
    {
      "commit": "b6178002270192fe3ab2403dafac12e5babe11e6",
      "tree": "6b9c352d814185e16a353d17752059eb995019e0",
      "parents": [
        "8ddca7040da413cd283a4beba4634744f4e61ac8"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 21:12:56 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Tue Dec 07 21:12:56 2004 +0000"
      },
      "message": "2004-12-07 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* *.c: Change level of debug messages to LOG_DEBUG.\n"
    },
    {
      "commit": "6099b3b56956322567323c11fd698b2328c6826b",
      "tree": "fa537bd0eaa9f7d824f39445eabc928db59050ca",
      "parents": [
        "ae5e24d8678f1e3a60dde58d3382c5ba73d6bb27"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Nov 20 02:06:59 2004 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Sat Nov 20 02:06:59 2004 +0000"
      },
      "message": "2004-11-19 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* global: Replace strerror with safe_strerror.  And vtysh/vtysh.c\n\t  needs to include \"log.h\" to pick up the declaration.\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": "fce954f8de1456dd62d26b52902a4a352ef17a93",
      "tree": "3dee77fa141697940a9ff3203ea453e454e88d95",
      "parents": [
        "1cd80845dc5262ff7d3d38deb1921f0b8390f4df"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Oct 07 20:29:24 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Oct 07 20:29:24 2004 +0000"
      },
      "message": "Fix warnings. Didn\u0027t even look at files not compiled in Linux though.\n"
    },
    {
      "commit": "c9e52be3f4d98943b67fbbe5d9a7ccd823b88326",
      "tree": "d4045a946af3be8bbdc303162778e8c44057e2f9",
      "parents": [
        "e473b032b860444b9656cee1654b0120f77b52b1"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Sep 26 16:09:34 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Sun Sep 26 16:09:34 2004 +0000"
      },
      "message": "Compiler warnings fixes.\n"
    },
    {
      "commit": "c34b6b577ef58e7609de1e088e7923c4c056cfeb",
      "tree": "6cc1c399962c8dec074fe21aad73cc1fc7cad3dd",
      "parents": [
        "7b90143f14ba21f6bd3ff2c8b60f69500f46c0e8"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Aug 31 13:41:49 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Aug 31 13:41:49 2004 +0000"
      },
      "message": "Commit my hack (yes, I still call it hack) - command line switch for zebra\ndaemon to change netlink receive buffer size.\n"
    },
    {
      "commit": "55e7ecd114cd4f29b529f00cc1fe5d02d0f5b34f",
      "tree": "e65ae0c8960e86748d04daf66dd1dce3eb43dc70",
      "parents": [
        "75ee0b8eed29619b98c67dcb5f6b10e1c8f201ae"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Aug 06 08:41:56 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Fri Aug 06 08:41:56 2004 +0000"
      },
      "message": "Remove pointless privilege lower call. Thanks to Cougar for noticing.\n"
    },
    {
      "commit": "44145db3ae79d54da58c967d96cf059421dbf9eb",
      "tree": "ac57bd081e8f93317676875aa73eaf2e7a45aa49",
      "parents": [
        "b9df2d25fc8d06ca63fa792d162d97656361338b"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 09 11:00:23 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun May 09 11:00:23 2004 +0000"
      },
      "message": "2004-05-09 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* ioctl.c: (if_get_mtu) set mtu6 to mtu\n\t* mtu_kvm.c: (if_kvm_get_mtu) set mtu6 to mtu\n\t* rt_netlink.c: (netlink_interface) set mtu6 to mtu\n\t  (netlink_link_change) ditto\n\n2004-05-09 Sowmini Varadhan \u003csowmini.varadhan@sun.com\u003e\n\n\t* interface.c: (if_delete_update) only used with HAVE_NETLINK\n\t  and RTM_IFANNOUNCE.\n\t  (if_flag_dump_vty) Solaris IFF_IPV4 and IFF_IPV6 if flags\n\t  (if_dump_vty) print mtu6 if not same as mtu\n"
    },
    {
      "commit": "34195bf6ddec586df823c4adecd692424cf3a0fe",
      "tree": "ae874ef2847cc5598e97e3530ae264cb5b771a00",
      "parents": [
        "41d3fc96959c9dea614822dfbb1891cd9a6f38a4"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Apr 06 12:07:06 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Tue Apr 06 12:07:06 2004 +0000"
      },
      "message": "[quagga-dev 1002]. Also fix date of previous commit in Chanelog.\n"
    },
    {
      "commit": "5707ccee87f1ed0917cc3a9d10119d6ba2ffe639",
      "tree": "7c85691f2b31b48c8d0673f363d35d1681a73b64",
      "parents": [
        "fa2b17e39499a77f41a719035a588b7fb63cec63"
      ],
      "author": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 04 19:20:44 2004 +0000"
      },
      "committer": {
        "name": "hasso",
        "email": "hasso",
        "time": "Thu Mar 04 19:20:44 2004 +0000"
      },
      "message": "Fix warning. Approved by Amir.\n"
    },
    {
      "commit": "b84d3a1b6e3e915a0f2e24f13c0445fae8f37a6f",
      "tree": "03e1417b2fbe16bb3991fa1fa48bf25d38ea97b6",
      "parents": [
        "42d14d985049a6e810a4036b684e38c005480373"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 17 10:31:01 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 17 10:31:01 2003 +0000"
      },
      "message": "2003-11-17 Jay Fenlason \u003cfenlason@redhat.com\u003e\n\n\t* zebra/rt_netlink.c: netlink_parse_info() ignore messages which are\n\t  not from kernel. Reported to RH by Herbert Xu. See\n\t  http://rhn.redhat.com/errata/RHSA-2003-307.html and CAN-2003-0858.\n"
    },
    {
      "commit": "31a476c7e9014aa81dc0d50b4100431ab111bf3f",
      "tree": "3f7fd8ed9010917cb3e93389d4e1d5a9649c5741",
      "parents": [
        "f3e05cda2a35abe1bcd9e3ad33083f4c78c0235a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 29 19:54:53 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Sep 29 19:54:53 2003 +0000"
      },
      "message": "2003-09-29 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* zebra/connected.c: revert the \u0027generic PtP\u0027 patch as it causes\n\tfar too many problems. People who use FreeSWAN should investigate\n\tnative linux ipsec.\n\t* zebra/rt_netlink.c: ditto\n\t* lib/if.c: ditto\n\t* ripd/ripd.h: ditto\n\t* ripd/ripd.c: ditto\n\t* ripd/rip_interface.c: ditto\n\t* ospfd/ospfd.c: ditto\n\t* ospfd/ospf_snmp.c: ditto\n\t* bgpd/bgp_nexthop.c: ditto\n"
    },
    {
      "commit": "7021c425a9f5bd9f62b934124becbaadd961cac0",
      "tree": "cf386f6923eac9f1c665400d0557448c4f5a89e0",
      "parents": [
        "8fc0f64b143ed2155567f5c9f0faad756252146a"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jul 15 12:52:22 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jul 15 12:52:22 2003 +0000"
      },
      "message": "2003-07-15 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * lib/version.h: add ZEBRA_URL (unused for now)\n        * lib/vty.c: CMD_ERR_NOTHING_TODO when reading conf file should not\n          be fatal. slight reformating.\n        * ospfd/ospf_zebra.c: ignore reject/blackhole routes if zebra sends\n          these type of routes. probably should be a new type of route to\n          allow daemons to more easily choose whether to redistribute them\n          - rathen than just a flag (eg for reject/blackhole).\n          reorder the is_prefix_default test for ZEBRA_IPV4_ROUTE_DELETE to\n          avoid the inverted test - slightly more readable.\n        * redhat/zebra.spec.in: Add ospfapi port to services file, if\n          with_ospfapi.\n        * zebra/rib.h: Change nexthop types to an enum.\n        * zebra/rt_netlink.c: run it through indent -nut.\n          Add nexthop_types_desc[] descriptive array for nexthop types.\n          (netlink_route_multipath) debug statements indicate which branch\n          they are in and print out nexthop type.\n        * zebra/zebra_rib.c: slight reformatting.\n        * zebra/zebra_vty.c: Pass ZEBRA_FLAG_BLACKHOLE flag to\n          static_add_ipv4() if Null0 route is configured. print out Null0 if\n          STATIC_IPV4_BLACKHOLE route, and ignore flags (shouldnt be\n          possible to set flags from vty) for config and show route.\n"
    },
    {
      "commit": "5ec90d28c9268c54e000c2bcfb9b164abfacbacd",
      "tree": "ab5d297f68b94182647d043d790ffab4a2b44c93",
      "parents": [
        "dd488a78add05f10f58f4096dca622c6b5f1f0c9"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jun 19 01:41:37 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jun 19 01:41:37 2003 +0000"
      },
      "message": "2003-06-19 Vladimir Ivaschenko \u003chazard@francoudi.com\u003e\n\n\t* zebra/rt_netlink.c: Debug statements added to\n          netlink_route_multipath()\n\t* zebra/zebra_rib.c: If route has a gateway, delete only existing\n          route with that specified gateway.\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": "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": "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": "5f37d86f837e666f7915ee6dc971e44e495d41f3",
      "tree": "a31e657803f2600dd1c0aac533e2087de8055df2",
      "parents": [
        "c2191eaee5686cdcb54c5f26afffa4a029c691de"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Apr 19 00:11:28 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Apr 19 00:11:28 2003 +0000"
      },
      "message": "From: Israel Keys \u003cikeys@agile.tv\u003e\nSubject: [zebra 18677] zebra initialisation bug and patch\n\nHi All,\n\nI have found a bug in zebra that prevents its routing table and\ninterface database from being initialised properly. The problem occurs\nwhen a request is made via the netlink socket but the kernel produces a\nEWOULDBLOCK/EAGAIN when the result is trying to be retrieved via a\nrecvmsg(). Zebra does not do anything about this and continues to\nfunction  (with an empty routing table and interface list) as if nothing\nhas happened. With no such information the routing protocol dosn\u0027t work!\n\nTwo functions are called during the initialisation of Zebra:\ninterface_lookup_netlink() and netlink_route_read() - obtaining the\ninterfaces and routing table from the kernel respectively. These are the\nonly time these functions are called.\n\nThese functions, interface_lookup_netlink() and netlink_route_read(),\nuse netlink_parse_info() to recieve the data from the netlink socket.\nThe problem is, netlink_parse_info() returns (without error) when its\ncall to recvmsg() results in an errno EWOULDBLOCK/EAGAIN. This behaviour\nis expected by other funtions calling netlink_parse_info() -\nnetlink_parse_info is simply recalled at a later stage. However, on\ninitialisation it is never recalled.\n\nSince zebra is expected to nothing else during initialisation it was\neasiest to temporarily change the netlink socket to BLOCK and wait\nindefinently until the kernel responds with the required information.\n\nAttached is a patch with these changes.\n\nComments and questions are welcome.\nPlease inform me if this patch is added to the Zebra source.\n\n--israel\n"
    },
    {
      "commit": "13766da4e4ab3061a585808cda78545c7097d006",
      "tree": "85c63cbaf4334d1d90030751eeb03422217c760e",
      "parents": [
        "420df43a6dab33b80d851798aa29f05d5ff01357"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Feb 07 14:46:23 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Feb 07 14:46:23 2003 +0000"
      },
      "message": "Sync to latest Zebra CVS\n"
    },
    {
      "commit": "d753e9eec96f03aa02a7648e4279c524c376908d",
      "tree": "5434dea114f81d8596fc87a619f65c36629b4300",
      "parents": [
        "d4f5031c5c2ca3953d071cfce0a3faa34f9b073d"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 22 19:45:50 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Jan 22 19:45:50 2003 +0000"
      },
      "message": "Matthew Grant \u003cgrantma@anathoth.gen.nz\u003e\nSubject: [zebra 17290] [PATCHES] - Fixes for problems in 0.93b\n\nAdded ifupstaticfix\n"
    },
    {
      "commit": "8fdcfdecd5900d7ffeaff9686c65eb2b9e6beb50",
      "tree": "d979a3c7cb2183f6392d6bb5f91a5743c5d6a7d9",
      "parents": [
        "9a668001507efa0c6a4e80cc2d7db8db93967f68"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Jan 19 20:52:55 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sun Jan 19 20:52:55 2003 +0000"
      },
      "message": "Add work around for RFC3021 patch and its problem with certain IPv6 interfaces\naddresses.\n\nIt seems so far that netlink only ever returns IFA_ADDRESS for IPv6 interfaces\nand never IFA_LOCAL, regardless of whether it is PtP or not. Need to investigate\nprecisely how IPv6 and netlink are supposed to behave wrt broadcast vs\nPtP links.\n"
    },
    {
      "commit": "e04ab74d17b4f3456bd3eeefe2043584431b4ea2",
      "tree": "154168b7aeb6b4e2fbc1fd04e5f2c96870120272",
      "parents": [
        "a895901b3c4e6a061f56be90f5fe9bc78e6e5c2f"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jan 17 23:47:00 2003 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jan 17 23:47:00 2003 +0000"
      },
      "message": "From havanna_moon@gmx.net Fri Jan 17 23:37:49 2003\nDate: Sat, 11 Jan 2003 23:26:28 +0100 (CET)\nFrom: Yon Uriarte \u003chavanna_moon@gmx.net\u003e\nTo: \"the list(tm) Zebra\" \u003czebra@zebra.org\u003e\nSubject: [zebra 17217] [PATCH] show thread CPU\n\nHi,\n\n a little patch from the \u0027stupid preprocessor tricks\u0027 collection to record\nthread statistics.\n\nUsage: \"show thread cpu [r][w][t][e][x]\"\n\nOutput Fields: self explaining I hope. Type is one of RWTEX for:\n   Read, Write (fd threads), Timer, Event, Execute.\n\n Overhead vs. vanilla zebra: almost nothing. Vanilla CVS zebra already\ncollects thread run times.\n\n\n Caveats: Under linux getrusage has a granularity of 10ms, which is almost\nuseless in this case. Run ./configure, edit config.h and comment out\n\"#define HAVE_RUSAGE\",  this way it will use getimeofday which has a much\nbetter granularity. IMHO this is better, as cooperative threads are\neffectively running during all that wall time (dont care if CPU\nutilization was 3% or 99% during the time the thread was running (an\neffective rusage combined with getimeofday could give that info)).\n\n Maybe someone can give tips for other platforms on API granularity.\n\n\nTODO: change some of the calls to thread_add_$KIND to\nfuncname_thread_add_$KIND with a meaningfull funcname, so users will get a\nbetter idea of what\u0027s going on.\n\nF.ex. (AFAIK):\nospf_spf_calculate_timer -\u003e \"Routes Step 1, areas SPF\"\nospf_ase_calculate_timer -\u003e \"Routes Step 2, externals\"\n\n\n\n Could this be added to the unofficial patch collection?\n\nCould someone with BGP keepalive problems run their bgpd with this patch\nand post the results?\n\n\nTIA, HTH, HAND, regards\n yon\n\n\nExample output:\n--------------------------------\nospfd# show thread cpu\n Runtime(ms)    Invoked Avg uSecs   Max uSecs  Type Thread\n      14.829         31       478         585   T   ospf_ase_calculate_timer\n      82.132       9838         8         291    EX ospf_nsm_event\n       0.029          1        29          29    E  ospf_default_originate_timer\n       0.254          9        28          34   T   ospf_db_desc_timer\n       0.026          7         3          11   T   ospf_wait_timer\n     669.015        523      1279      490696 R     vty_read\n       4.415         45        98         173   TE  ospf_network_lsa_refresh_timer\n      15.026         31       484         588   T   ospf_spf_calculate_timer\n      29.478       1593        18         122    E  ospf_ls_upd_send_queue_event\n       0.173          1       173         173   T   vty_timeout\n       4.173        242        17          58    E  ospf_ls_ack_send_event\n     637.767     121223         5          55   T   ospf_ls_ack_timer\n      39.373        244       161        2691 R     zclient_read\n      12.169         98       124         726    EX ospf_ism_event\n       0.226          2       113         125 R     vty_accept\n     537.776      14256        37        3813  W    ospf_write\n       4.967         41       121         250   T   ospf_router_lsa_timer\n       0.672          1       672         672    E  zclient_connect\n       7.901       1658         4          26   T   ospf_ls_req_timer\n       0.459          2       229         266    E  ospf_external_lsa_originate_timer\n       3.203         60        53         305   T   ospf_maxage_lsa_remover\n     108.341       9772        11          65   T   ospf_ls_upd_timer\n      33.302        525        63        8628  W    vty_flush\n       0.101          1       101         101   T   ospf_router_lsa_update_timer\n       0.016          1        16          16   T   ospf_router_id_update_timer\n      26.970        407        66         176   T   ospf_lsa_maxage_walker\n     381.949      12244        31          69   T   ospf_hello_timer\n       0.114         22         5          14   T   ospf_inactivity_timer\n      34.290       1223        28         310   T   ospf_lsa_refresh_walker\n     470.645       6592        71         665 R     ospf_read\n    3119.791     180693        17      490696 RWTEX TOTAL\nospfd#\n\nbgpd# sh t c TeX\n Runtime(ms)    Invoked Avg uSecs   Max uSecs  Type Thread\n      21.504        476        45          71   T   bgp_keepalive_timer\n      17.784       1157        15         131   T   bgp_reuse_timer\n      29.080        193       150         249   T   bgp_scan\n      23.606        995        23         420    E  bgp_event\n     317.734      28572        11          69   T   bgp_routeadv_timer\n       0.084          1        84          84    E  zlookup_connect\n       0.526          1       526         526    E  zclient_connect\n       1.348         13       103         147   T   bgp_start_timer\n      19.443        142       136         420   T   bgp_connect_timer\n      16.032        772        20          27   T   bgp_import\n     447.141      32322        13         526   TEX TOTAL\nbgpd#\nbgpd# show thread cpu rw\n Runtime(ms)    Invoked Avg uSecs   Max uSecs  Type Thread\n     155.043          7     22149      150659 R     bgp_accept\n     129.638        180       720       53844 R     vty_read\n       1.734         56        30         129 R     zclient_read\n       0.255          2       127         148 R     vty_accept\n      58.483        983        59         340 R     bgp_read\n     171.495      29190         5         245  W    bgp_write\n      13.884        181        76        2542  W    vty_flush\n     530.532      30599        17      150659 RW    TOTAL\nbgpd#\n--------------------------------\n"
    },
    {
      "commit": "00df0c1e80811f3cf5eca0b28e720bf1bcc84a53",
      "tree": "d03bbabe82d8526b1f5472d38a59ed24f9c8c42b",
      "parents": [
        "8bd9c714365883e405af7c7c4257e404a1053469"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 21:07:36 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 21:07:36 2002 +0000"
      },
      "message": "[zebra 14631] Generic PtP and RFC3021 interface addressing support\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"
    }
  ]
}
