From patchwork Fri Jan 28 17:50:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 50537 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AB7033948010 for ; Fri, 28 Jan 2022 17:54:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AB7033948010 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1643392484; bh=WkwMn0o+oLbY9+9rkbVCoouqKs9xKmH2Ynii3BMxCGM=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=CZeFY9YsxR6ammt56MQAKGqgk37sSRCNrDeuh68rkpchYEBRukyIhq7yJkJ9BSgqI WikOFBtGptPt22njP4KVPR30DOjyXLBplwVk31W3KHdr8d5EMfUwXnKJO79u8TGi3Y sf+5xbwzUUSSk9lSO9O+405bIteaUIn6IhbG2DWE= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-ot1-x335.google.com (mail-ot1-x335.google.com [IPv6:2607:f8b0:4864:20::335]) by sourceware.org (Postfix) with ESMTPS id 54F4F385E010 for ; Fri, 28 Jan 2022 17:50:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 54F4F385E010 Received: by mail-ot1-x335.google.com with SMTP id j38-20020a9d1926000000b0059fa6de6c71so6419070ota.10 for ; Fri, 28 Jan 2022 09:50:50 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WkwMn0o+oLbY9+9rkbVCoouqKs9xKmH2Ynii3BMxCGM=; b=eS+ybal5IwtTKpCTsev6abMg+Sgjpv8FWmfatjVvd5x2a6z81RQDCBHyxhIUhB7yLm XABnLxT4xwTCnmnm6je3pFGw3sbTwDJs2jc6gQH9l+Nly8MNWVH8uRmh7mSrFZLKDQBt JMHOAA+srSo3hx66u/MU1XGnDyUWxLoVocrzkz/R5SZJ51IvgYy/LCXeE0arBCNtVHVK hs1GQOqyMgwHK3GombNGcgGCDdapsmtIy2fXeSd4QyB8I+uoWClrUXaubeCdVhv/8iYD uv85X+qJFZp+t8knFBKVwFWXN/h+iY8ooINrQ041q0HkWmeZF7v6ipgVhfUOTS0nvctA +qpg== X-Gm-Message-State: AOAM532/gEyAu3hYq4IwTam+WoVYGoXPJ01pspN36fyKtRGI9hNmRW7H zi77iBQFGs5hOr9uHpa1bEKr5GIFQPrjlw== X-Google-Smtp-Source: ABdhPJxjXZ0gQYOBIWRcsQzhCKRdK8YG22s978O2EOUNvRcpT0z6ZJnkVeY79p2P4vuzIQRCXbX3xw== X-Received: by 2002:a9d:a36:: with SMTP id 51mr5625060otg.21.1643392249589; Fri, 28 Jan 2022 09:50:49 -0800 (PST) Received: from birita.. ([2804:431:c7ca:709a:aad4:4e8:bc05:17ad]) by smtp.gmail.com with ESMTPSA id x12sm8223755otq.6.2022.01.28.09.50.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Jan 2022 09:50:49 -0800 (PST) To: libc-alpha@sourceware.org, Florian Weimer Subject: [PATCH v6 1/3] support: Add support_socket_so_timestamp_time64 Date: Fri, 28 Jan 2022 14:50:41 -0300 Message-Id: <20220128175043.161446-2-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220128175043.161446-1-adhemerval.zanella@linaro.org> References: <20220128175043.161446-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Check if the socket support 64-bit network packages timestamps (SO_TIMESTAMP and SO_TIMESTAMPNS). This will be used on recvmsg and recvmmsg tests to check if the timestamp should be generated. Reviewed-by: Florian Weimer --- support/Makefile | 1 + support/support.h | 4 ++ support/support_socket_so_timestamp_time64.c | 48 ++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 support/support_socket_so_timestamp_time64.c diff --git a/support/Makefile b/support/Makefile index 6dc6c9d49a..5ddcb8d158 100644 --- a/support/Makefile +++ b/support/Makefile @@ -80,6 +80,7 @@ libsupport-routines = \ support_set_small_thread_stack_size \ support_shared_allocate \ support_small_stack_thread_attribute \ + support_socket_so_timestamp_time64 \ support_stat_nanoseconds \ support_subprocess \ support_test_compare_blob \ diff --git a/support/support.h b/support/support.h index ee27149d98..73b9fc48f0 100644 --- a/support/support.h +++ b/support/support.h @@ -183,6 +183,10 @@ extern bool support_select_modifies_timeout (void); tv_usec larger than 1000000. */ extern bool support_select_normalizes_timeout (void); +/* Return true if socket FD supports 64-bit timestamps with the SOL_SOCKET + and SO_TIMESTAMP/SO_TIMESTAMPNS. */ +extern bool support_socket_so_timestamp_time64 (int fd); + /* Create a timer that trigger after SEC seconds and NSEC nanoseconds. If REPEAT is true the timer will repeat indefinitely. If CALLBACK is not NULL, the function will be called when the timer expires; otherwise a diff --git a/support/support_socket_so_timestamp_time64.c b/support/support_socket_so_timestamp_time64.c new file mode 100644 index 0000000000..54bf3f4272 --- /dev/null +++ b/support/support_socket_so_timestamp_time64.c @@ -0,0 +1,48 @@ +/* Return whether socket supports 64-bit timestamps. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include +#include +#ifdef __linux__ +# include +#endif + +bool +support_socket_so_timestamp_time64 (int fd) +{ +#ifdef __linux__ +# if __LINUX_KERNEL_VERSION >= 0x050100 \ + || __WORDSIZE == 64 \ + || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) + return true; +# else + int level = SOL_SOCKET; + int optname = COMPAT_SO_TIMESTAMP_NEW; + int optval; + socklen_t len = sizeof (optval); + + int r = syscall (__NR_getsockopt, fd, level, optname, &optval, &len); + return r != -1; +# endif +#else + return false; +#endif +}