From patchwork Thu Sep 2 22:15:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vadim Fedorenko X-Patchwork-Id: 506965 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0ED5AC433EF for ; Thu, 2 Sep 2021 22:16:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E41A460FDC for ; Thu, 2 Sep 2021 22:16:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243701AbhIBWRR (ORCPT ); Thu, 2 Sep 2021 18:17:17 -0400 Received: from novek.ru ([213.148.174.62]:60350 "EHLO novek.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231684AbhIBWRP (ORCPT ); Thu, 2 Sep 2021 18:17:15 -0400 Received: from nat1.ooonet.ru (gw.zelenaya.net [91.207.137.40]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by novek.ru (Postfix) with ESMTPSA id DDE09504080; Fri, 3 Sep 2021 01:13:02 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 novek.ru DDE09504080 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=novek.ru; s=mail; t=1630620787; bh=htM0bYVvpwMhmEKqwtiX3u6zhNVDYeI3Ra0nrYVVTdw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jDxTmyBK8yvpX9BlsHpUSFzOKczFvySlS9592lCToBOI3YUGVRlvPraNlTEY6ne3t wR4kJr8NpJlsnxTOc/2r4PNutToIj/8Bj1zPMa12YM69HGIOBo8kWb76m1LQ7pjJNR tXIFQ8J3ccUoTPDSSmkYx53ZoHK2g9MJpdO5h1jw= From: Vadim Fedorenko To: Martin KaFai Lau Cc: Vadim Fedorenko , Alexei Starovoitov , Song Liu , Yonghong Song , John Fastabend , Jakub Kicinski , netdev@vger.kernel.org, bpf@vger.kernel.org Subject: [PATCH bpf-next 1/2] bpf: add hardware timestamp field to __sk_buff Date: Fri, 3 Sep 2021 01:15:50 +0300 Message-Id: <20210902221551.15566-2-vfedorenko@novek.ru> X-Mailer: git-send-email 2.18.4 In-Reply-To: <20210902221551.15566-1-vfedorenko@novek.ru> References: <20210902221551.15566-1-vfedorenko@novek.ru> Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org BPF programs may want to know hardware timestamps if NIC supports such timestamping. Expose this data as hwtstamp field of __sk_buff the same way as gso_segs/gso_size. Also update BPF_PROG_TEST_RUN tests of the feature. Signed-off-by: Vadim Fedorenko --- include/uapi/linux/bpf.h | 2 ++ net/core/filter.c | 11 +++++++++++ tools/include/uapi/linux/bpf.h | 2 ++ 3 files changed, 15 insertions(+) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 791f31dd0abe..c7d05b49f557 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -5284,6 +5284,8 @@ struct __sk_buff { __u32 gso_segs; __bpf_md_ptr(struct bpf_sock *, sk); __u32 gso_size; + __u32 padding; /* Padding, future use. */ + __u64 hwtstamp; }; struct bpf_tunnel_key { diff --git a/net/core/filter.c b/net/core/filter.c index 2e32cee2c469..1d8f8494d325 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -8884,6 +8884,17 @@ static u32 bpf_convert_ctx_access(enum bpf_access_type type, si->dst_reg, si->src_reg, offsetof(struct sk_buff, sk)); break; + case offsetof(struct __sk_buff, hwtstamp): + BUILD_BUG_ON(sizeof_field(struct skb_shared_hwtstamps, hwtstamp) != 8); + BUILD_BUG_ON(offsetof(struct skb_shared_hwtstamps, hwtstamp) != 0); + + insn = bpf_convert_shinfo_access(si, insn); + *insn++ = BPF_LDX_MEM(BPF_DW, + si->dst_reg, si->dst_reg, + bpf_target_off(struct skb_shared_info, + hwtstamps, 8, + target_size)); + break; } return insn - insn_buf; diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 791f31dd0abe..c7d05b49f557 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -5284,6 +5284,8 @@ struct __sk_buff { __u32 gso_segs; __bpf_md_ptr(struct bpf_sock *, sk); __u32 gso_size; + __u32 padding; /* Padding, future use. */ + __u64 hwtstamp; }; struct bpf_tunnel_key {