From bd187a8272762d64f1cbe12da7c82fc86dcbe2bf Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 13 Oct 2017 12:52:28 -0700 Subject: LDPRELOAD: Add TCP_KEEPIDLE, TCP_KEEPINTVL, and SO_KEEPALIVE Implement the subject setsockopt by passing them to VCL Change-Id: Ida5136cb3a51d2bf30080e8c4af4239681ed2184 Signed-off-by: Steven --- .../src/libvcl-ldpreload/vcom_socket.c | 41 +++++++++++++++++----- 1 file changed, 32 insertions(+), 9 deletions(-) (limited to 'extras') diff --git a/extras/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c b/extras/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c index 5378548f9c2..1686c4fc3cf 100644 --- a/extras/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c +++ b/extras/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c @@ -1913,31 +1913,49 @@ vppcom_session_setsockopt (int __sid, int __level, int __optname, switch (__level) { + case SOL_TCP: + switch (__optname) + { + case TCP_KEEPIDLE: + rv = + vppcom_session_attr (__sid, VPPCOM_ATTR_SET_TCP_KEEPIDLE, 0, 0); + break; + case TCP_KEEPINTVL: + rv = + vppcom_session_attr (__sid, VPPCOM_ATTR_SET_TCP_KEEPINTVL, 0, 0); + break; + default: + break; + } + break; case SOL_IPV6: switch (__optname) { case IPV6_V6ONLY: rv = vppcom_session_attr (__sid, VPPCOM_ATTR_SET_V6ONLY, 0, 0); - return rv; + break; default: - return rv; + break; } break; case SOL_SOCKET: switch (__optname) { + case SO_KEEPALIVE: + rv = vppcom_session_attr (__sid, VPPCOM_ATTR_SET_KEEPALIVE, 0, 0); + break; case SO_REUSEADDR: rv = vppcom_session_attr (__sid, VPPCOM_ATTR_SET_REUSEADDR, 0, 0); - return rv; + break; case SO_BROADCAST: rv = vppcom_session_attr (__sid, VPPCOM_ATTR_SET_BROADCAST, 0, 0); - return rv; + break; default: - return rv; + break; } break; default: - return rv; + break; } return rv; @@ -1991,7 +2009,7 @@ vcom_socket_setsockopt (int __fd, int __level, int __optname, case IPV6_V6ONLY: rv = vppcom_session_setsockopt (vsock->sid, __level, __optname, __optval, __optlen); - return rv; + break; default: return -EOPNOTSUPP; } @@ -2001,6 +2019,11 @@ vcom_socket_setsockopt (int __fd, int __level, int __optname, { case TCP_NODELAY: return 0; + case TCP_KEEPIDLE: + case TCP_KEEPINTVL: + rv = vppcom_session_setsockopt (vsock->sid, __level, __optname, + __optval, __optlen); + break; default: return -EOPNOTSUPP; } @@ -2011,9 +2034,10 @@ vcom_socket_setsockopt (int __fd, int __level, int __optname, { case SO_REUSEADDR: case SO_BROADCAST: + case SO_KEEPALIVE: rv = vppcom_session_setsockopt (vsock->sid, __level, __optname, __optval, __optlen); - return rv; + break; /* * 1. for socket level options that are socket attributes, @@ -2028,7 +2052,6 @@ vcom_socket_setsockopt (int __fd, int __level, int __optname, case SO_SNDBUF: case SO_RCVBUF: case SO_REUSEPORT: - case SO_KEEPALIVE: case SO_TYPE: case SO_PROTOCOL: case SO_DOMAIN: -- cgit 1.2.3-korg