diff options
author | Yash Tibrewal <yashkt@google.com> | 2018-11-27 12:56:56 -0800 |
---|---|---|
committer | Yash Tibrewal <yashkt@google.com> | 2018-11-27 12:56:56 -0800 |
commit | 66b2005cbb322bc1d783b90a574b0e14df906bcb (patch) | |
tree | 0cb04777d6c51e9cfbe65c48db39ccf606e4f116 /src/core/lib/iomgr/internal_errqueue.cc | |
parent | a93b6012cc1ae0259118ba5bb4eff4c8634bd18c (diff) |
Enable errqueue support for linux kernel versions 4.0.0 and above
Diffstat (limited to 'src/core/lib/iomgr/internal_errqueue.cc')
-rw-r--r-- | src/core/lib/iomgr/internal_errqueue.cc | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/src/core/lib/iomgr/internal_errqueue.cc b/src/core/lib/iomgr/internal_errqueue.cc index 99c22e9055..982d709f09 100644 --- a/src/core/lib/iomgr/internal_errqueue.cc +++ b/src/core/lib/iomgr/internal_errqueue.cc @@ -20,17 +20,50 @@ #include "src/core/lib/iomgr/port.h" +#include <grpc/impl/codegen/log.h> #include "src/core/lib/iomgr/internal_errqueue.h" #ifdef GRPC_POSIX_SOCKET_TCP -bool kernel_supports_errqueue() { +#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include <sys/utsname.h> + +namespace grpc_core { +static bool errqueue_supported = false; + +bool kernel_supports_errqueue() { return errqueue_supported; } + +void grpc_errqueue_init() { +/* Both-compile time and run-time linux kernel versions should be atleast 4.0.0 + */ #ifdef LINUX_VERSION_CODE #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0) - return true; + struct utsname buffer; + if (uname(&buffer) != 0) { + gpr_log(GPR_ERROR, "uname: %s", strerror(errno)); + return; + } + char* release = buffer.release; + if (release == nullptr) { + return; + } + + if (strtol(release, nullptr, 10) >= 4) { + errqueue_supported = true; + } else { + gpr_log(GPR_DEBUG, "ERRQUEUE support not enabled"); + } #endif /* LINUX_VERSION_CODE <= KERNEL_VERSION(4, 0, 0) */ #endif /* LINUX_VERSION_CODE */ - return false; } +} /* namespace grpc_core */ + +#else + +namespace grpc_core { +void grpc_errqueue_init() {} +} /* namespace grpc_core */ #endif /* GRPC_POSIX_SOCKET_TCP */ |