/* * * Copyright 2018 gRPC authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ /* This file contains constants defined in and * so as to allow collecting network timestamps in the * kernel. This file allows tcp_posix.cc to compile on platforms that do not * have and . */ #ifndef GRPC_CORE_LIB_IOMGR_INTERNAL_ERRQUEUE_H #define GRPC_CORE_LIB_IOMGR_INTERNAL_ERRQUEUE_H #include #include "src/core/lib/iomgr/port.h" #ifdef GRPC_POSIX_SOCKET_TCP #include #include #ifdef GRPC_LINUX_ERRQUEUE #include #include #include #endif /* GRPC_LINUX_ERRQUEUE */ namespace grpc_core { #ifdef GRPC_LINUX_ERRQUEUE /* Redefining scm_timestamping in the same way that defines * it, so that code compiles on systems that don't have it. */ struct scm_timestamping { struct timespec ts[3]; }; /* Also redefine timestamp types */ /* The timestamp type for when the driver passed skb to NIC, or HW. */ constexpr int SCM_TSTAMP_SND = 0; /* The timestamp type for when data entered the packet scheduler. */ constexpr int SCM_TSTAMP_SCHED = 1; /* The timestamp type for when data acknowledged by peer. */ constexpr int SCM_TSTAMP_ACK = 2; /* Redefine required constants from */ constexpr uint32_t SOF_TIMESTAMPING_TX_SOFTWARE = 1u << 1; constexpr uint32_t SOF_TIMESTAMPING_SOFTWARE = 1u << 4; constexpr uint32_t SOF_TIMESTAMPING_OPT_ID = 1u << 7; constexpr uint32_t SOF_TIMESTAMPING_TX_SCHED = 1u << 8; constexpr uint32_t SOF_TIMESTAMPING_TX_ACK = 1u << 9; constexpr uint32_t SOF_TIMESTAMPING_OPT_TSONLY = 1u << 11; constexpr uint32_t kTimestampingSocketOptions = SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_OPT_ID | SOF_TIMESTAMPING_OPT_TSONLY; constexpr uint32_t kTimestampingRecordingOptions = SOF_TIMESTAMPING_TX_SCHED | SOF_TIMESTAMPING_TX_SOFTWARE | SOF_TIMESTAMPING_TX_ACK; #endif /* GRPC_LINUX_ERRQUEUE */ /* Returns true if kernel is capable of supporting errqueue and timestamping. * Currently allowing only linux kernels above 4.0.0 */ bool kernel_supports_errqueue(); } /* namespace grpc_core */ #endif /* GRPC_POSIX_SOCKET_TCP */ namespace grpc_core { /* Initializes errqueue support */ void grpc_errqueue_init(); } /* namespace grpc_core */ #endif /* GRPC_CORE_LIB_IOMGR_INTERNAL_ERRQUEUE_H */