components/python/oslo.utils/patches/keepalive.patch
branchs11u3-sru
changeset 6035 c9748fcc32de
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/oslo.utils/patches/keepalive.patch	Fri May 20 17:42:29 2016 -0400
@@ -0,0 +1,80 @@
+In-house patch to allow the TCP keepalive parameters to be used on Solaris.
+Patch has not yet been submitted upstream.
+
+--- oslo.utils-1.4.0/oslo_utils/netutils.py.orig	2015-10-21 10:11:23.275736933 -0600
++++ oslo.utils-1.4.0/oslo_utils/netutils.py	2015-10-21 10:11:26.709349827 -0600
+@@ -20,6 +20,7 @@ Network-related utilities and helper fun
+ import logging
+ import os
+ import socket
++import sys
+
+ import netaddr
+ import netifaces
+@@ -317,26 +317,44 @@ def set_tcp_keepalive(sock, tcp_keepaliv
+     if not tcp_keepalive:
+         return
+ 
+-    # These options aren't available in the OS X version of eventlet,
+-    # Idle + Count * Interval effectively gives you the total timeout.
+-    if tcp_keepidle is not None:
+-        if hasattr(socket, 'TCP_KEEPIDLE'):
+-            sock.setsockopt(socket.IPPROTO_TCP,
+-                            socket.TCP_KEEPIDLE,
+-                            tcp_keepidle)
+-        else:
+-            LOG.warning(_LW('tcp_keepidle not available on your system'))
+-    if tcp_keepalive_interval is not None:
+-        if hasattr(socket, 'TCP_KEEPINTVL'):
+-            sock.setsockopt(socket.IPPROTO_TCP,
+-                            socket.TCP_KEEPINTVL,
+-                            tcp_keepalive_interval)
+-        else:
+-            LOG.warning(_LW('tcp_keepintvl not available on your system'))
+-    if tcp_keepalive_count is not None:
+-        if hasattr(socket, 'TCP_KEEPCNT'):
+-            sock.setsockopt(socket.IPPROTO_TCP,
+-                            socket.TCP_KEEPCNT,
+-                            tcp_keepalive_count)
++    if sys.platform == 'sunos5':
++        # Should match definitions in <netinet/tcp.h>
++        TCP_KEEPALIVE_THRESHOLD = 0x16
++        TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17
++
++        if tcp_keepidle is not None:
++            sock.setsockopt(socket.IPPROTO_TCP, TCP_KEEPALIVE_THRESHOLD,
++                            tcp_keepidle * 1000)
++        if tcp_keepalive_interval is None and tcp_keepalive_count is None:
++            return
++        if tcp_keepalive_interval is None or tcp_keepalive_count is None:
++            LOG.warning(_LW('tcp_keepintvl and tcp_keepknt must be set '
++                            'together'))
+         else:
+-            LOG.warning(_LW('tcp_keepcnt not available on your system'))
++            sock.setsockopt(
++                socket.IPPROTO_TCP, TCP_KEEPALIVE_ABORT_THRESHOLD,
++                tcp_keepalive_interval * tcp_keepalive_count * 1000)
++    else:
++        # These options aren't available in the OS X version of eventlet,
++        # Idle + Count * Interval effectively gives you the total timeout.
++        if tcp_keepidle is not None:
++            if hasattr(socket, 'TCP_KEEPIDLE'):
++                sock.setsockopt(socket.IPPROTO_TCP,
++                                socket.TCP_KEEPIDLE,
++                                tcp_keepidle)
++            else:
++                LOG.warning(_LW('tcp_keepidle not available on your system'))
++        if tcp_keepalive_interval is not None:
++            if hasattr(socket, 'TCP_KEEPINTVL'):
++                sock.setsockopt(socket.IPPROTO_TCP,
++                                socket.TCP_KEEPINTVL,
++                                tcp_keepalive_interval)
++            else:
++                LOG.warning(_LW('tcp_keepintvl not available on your system'))
++        if tcp_keepalive_count is not None:
++            if hasattr(socket, 'TCP_KEEPCNT'):
++                sock.setsockopt(socket.IPPROTO_TCP,
++                                socket.TCP_KEEPCNT,
++                                tcp_keepalive_count)
++            else:
++                LOG.warning(_LW('tcp_keepcnt not available on your system'))