From patchwork Sat Feb 8 10:32:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966352 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6DB91B3725; Sat, 8 Feb 2025 10:32:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010757; cv=none; b=KuQEvlEB1PYsSw+uHOK9oXIFbtRS+tzLeHeuFu3LlLemEKsqugm1sXB3Sl6qg2BjY7x+6mUB5zo8mRtaZdiqfzN3SasmzHqRHLHuLvEzYJRAD4NGp/dBfs49tjjFXJwtOBY0jIzw5qshFQFn0N1TPoKR04llhxhWR5MUoVS+mgg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010757; c=relaxed/simple; bh=O/LtVesONaxr1pxjJg4rCojavnafUIXIpZWNOirrbIg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ErSJ2wwFF7M43OuPHKCau2XhaCAKYo22OyS18AJxLBpUF3c0XyS2OMJoh4mSjY0g+v25CRN/PnpH2rfssz2NBiKUglDtigVEoOpi63spRYR4nqVcS96WvMjSbfoBpSjBnN49G93X6i8O1FMi5/Lqn0jEynNBQfZHc4uUqytPmwQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QllGzVGz; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QllGzVGz" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-21f48ebaadfso42257845ad.2; Sat, 08 Feb 2025 02:32:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010755; x=1739615555; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=K1wHAm6t1sH0pAL4Ah9aBiIUBjLdmS33qQ+4mCf5Cy4=; b=QllGzVGzjm2tGTC9bZhbJ4w5zmNDDWXif9UlrSH2jfbFvB33za8vBFbVckQ+CZtDtP FNxdyrK1DA6mTQmH79R9J1VSLrVokeTRSzYFITyOUoLutHz9JsQ2qzaFmXKGdc94TvWD qC4n8fa8XbF9fvVCtQ9kKntHMkdBi1LwvjrKd3ej4ubWSoIzZpFmARla+aC+set/O8sG MaEhleY5KzTuZmK1dmHcxZx50R2x/rHj6tFg5f3RPMSjei0SyJTxABfZFZ1IQlmaQh/w IByhGjEzovpOChWVg9MPePd+vl27ZTjM94aY/dPEIa3V7hYWCRxpoWL9vvcn9tlsuy8m mDjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010755; x=1739615555; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=K1wHAm6t1sH0pAL4Ah9aBiIUBjLdmS33qQ+4mCf5Cy4=; b=SO5BvdAEQmfJmTRm7pV7fZl2dZQT8wjVYWIhjHMPY0gYroknGkUTLqbUATYWirywJt ELIe+A9nW0c5FPOjl1Jp346dbEbP5y10SQ5+ggOiTVu6RhxxCVXbl1IGw/V2cn8pCKMr xhSp5lxEprd7U9MYqsG4UGm/FwOKtOUAJl0ZDwlWysHP8XJUwMsDHhiSdB+naXkGTHoM fM2SOA937aGSR3bvc0t1Eh1OcObUUcFTceG4dJ4WqN4pCZKTtz9HJ8rCu0z5rvJvqNq1 DiXAr2fUwnzPHLmNMauBnOxIiFviQnBJnWsMuF3QGCzmQFOt6FNcebeoqT+rEXWsnrj3 7AtA== X-Forwarded-Encrypted: i=1; AJvYcCV5tM4elBVRxBI7OSEKYgelfbBmvQ1KcGQP7YELivpY5jd+gdaTvS75WsC6Y2uWmRNZi1JfW0A=@vger.kernel.org X-Gm-Message-State: AOJu0YxYv/jXOmcIfjSFmd3r6wDcox106/ZF2AUbnXr0qSDeHAnf3mPL dpeaqtYkdcsTkVpISU5ErwAsAzt31E70bi8hD32YvWSY+gkhk7BC X-Gm-Gg: ASbGnctvkw2408QSbz1TL8CSirRYGX2onIkLKJFGVzy8eozdu7AnUjl5zGSP12zVXd+ NJkwAQ8fmFgWVrGiwgHy5IU5jWmKcXOFgUu/cjSeXdLs1w+4pM+KMA5dR3aLSHQE3E19S1Hg7oX j25xYvfXqlHSXyQtJt4SlzwW3W8PNGNtaN7GXas3a/x6/dHOb+GHh2IWrjTbwKyr4aebDY9jhH3 0AQ7KXIgFqd8T42wJX/eR/0eRqnGE/uybokLHQ5BHxY8FNANA9AAgwf78HDct16o7ymSkAhyW1R k8Y2K4n876NWLM8R/dLlupzhf/QcyLCzMLprZwcVuSFAxn7SjwKP1g== X-Google-Smtp-Source: AGHT+IF/7oWaDMVS4Q+Sw8OKIn/jZMjfqdQgnZwzHquzfMcLKoILeWZLmfTfPkgNOUEz5e33Am95aA== X-Received: by 2002:a17:903:41c7:b0:21f:6c81:f6c with SMTP id d9443c01a7336-21f6c811232mr33437925ad.41.1739010755050; Sat, 08 Feb 2025 02:32:35 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.32.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:32:34 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 01/12] bpf: add support for bpf_setsockopt() Date: Sat, 8 Feb 2025 18:32:09 +0800 Message-Id: <20250208103220.72294-2-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Users can write the following code to enable the bpf extension: int flags = SK_BPF_CB_TX_TIMESTAMPING; int opts = SK_BPF_CB_FLAGS; bpf_setsockopt(skops, SOL_SOCKET, opts, &flags, sizeof(flags)); Signed-off-by: Jason Xing --- include/net/sock.h | 3 +++ include/uapi/linux/bpf.h | 8 ++++++++ net/core/filter.c | 23 +++++++++++++++++++++++ tools/include/uapi/linux/bpf.h | 1 + 4 files changed, 35 insertions(+) diff --git a/include/net/sock.h b/include/net/sock.h index 8036b3b79cd8..7916982343c6 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -303,6 +303,7 @@ struct sk_filter; * @sk_stamp: time stamp of last packet received * @sk_stamp_seq: lock for accessing sk_stamp on 32 bit architectures only * @sk_tsflags: SO_TIMESTAMPING flags + * @sk_bpf_cb_flags: used in bpf_setsockopt() * @sk_use_task_frag: allow sk_page_frag() to use current->task_frag. * Sockets that can be used under memory reclaim should * set this to false. @@ -445,6 +446,8 @@ struct sock { u32 sk_reserved_mem; int sk_forward_alloc; u32 sk_tsflags; +#define SK_BPF_CB_FLAG_TEST(SK, FLAG) ((SK)->sk_bpf_cb_flags & (FLAG)) + u32 sk_bpf_cb_flags; __cacheline_group_end(sock_write_rxtx); __cacheline_group_begin(sock_write_tx); diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 2acf9b336371..6116eb3d1515 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -6913,6 +6913,13 @@ enum { BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7F, }; +/* Definitions for bpf_sk_cb_flags */ +enum { + SK_BPF_CB_TX_TIMESTAMPING = 1<<0, + SK_BPF_CB_MASK = (SK_BPF_CB_TX_TIMESTAMPING - 1) | + SK_BPF_CB_TX_TIMESTAMPING +}; + /* List of known BPF sock_ops operators. * New entries can only be added at the end */ @@ -7091,6 +7098,7 @@ enum { TCP_BPF_SYN_IP = 1006, /* Copy the IP[46] and TCP header */ TCP_BPF_SYN_MAC = 1007, /* Copy the MAC, IP[46], and TCP header */ TCP_BPF_SOCK_OPS_CB_FLAGS = 1008, /* Get or Set TCP sock ops flags */ + SK_BPF_CB_FLAGS = 1009, /* Used to set socket bpf flags */ }; enum { diff --git a/net/core/filter.c b/net/core/filter.c index 2ec162dd83c4..1c6c07507a78 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -5222,6 +5222,25 @@ static const struct bpf_func_proto bpf_get_socket_uid_proto = { .arg1_type = ARG_PTR_TO_CTX, }; +static int sk_bpf_set_get_cb_flags(struct sock *sk, char *optval, bool getopt) +{ + u32 sk_bpf_cb_flags; + + if (getopt) { + *(u32 *)optval = sk->sk_bpf_cb_flags; + return 0; + } + + sk_bpf_cb_flags = *(u32 *)optval; + + if (sk_bpf_cb_flags & ~SK_BPF_CB_MASK) + return -EINVAL; + + sk->sk_bpf_cb_flags = sk_bpf_cb_flags; + + return 0; +} + static int sol_socket_sockopt(struct sock *sk, int optname, char *optval, int *optlen, bool getopt) @@ -5238,6 +5257,7 @@ static int sol_socket_sockopt(struct sock *sk, int optname, case SO_MAX_PACING_RATE: case SO_BINDTOIFINDEX: case SO_TXREHASH: + case SK_BPF_CB_FLAGS: if (*optlen != sizeof(int)) return -EINVAL; break; @@ -5247,6 +5267,9 @@ static int sol_socket_sockopt(struct sock *sk, int optname, return -EINVAL; } + if (optname == SK_BPF_CB_FLAGS) + return sk_bpf_set_get_cb_flags(sk, optval, getopt); + if (getopt) { if (optname == SO_BINDTODEVICE) return -EINVAL; diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 2acf9b336371..70366f74ef4e 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -7091,6 +7091,7 @@ enum { TCP_BPF_SYN_IP = 1006, /* Copy the IP[46] and TCP header */ TCP_BPF_SYN_MAC = 1007, /* Copy the MAC, IP[46], and TCP header */ TCP_BPF_SOCK_OPS_CB_FLAGS = 1008, /* Get or Set TCP sock ops flags */ + SK_BPF_CB_FLAGS = 1009, /* Used to set socket bpf flags */ }; enum { From patchwork Sat Feb 8 10:32:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966353 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04893192D8E; Sat, 8 Feb 2025 10:32:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010762; cv=none; b=gMgJmstrAWUZVd6d251F0Vki1eXiDADbITBleXauN8uudBZ9ygcFvpAN4ihOUeOZEYEOagtFuXwud3zKayobhM1Vk+JdyS4PPEcimux2lAVp+aya/emrMwTcexO+zN5jhpvsTGVfNkFlRXIROgMMpscYD5SlIYPNMS8IGYtapyE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010762; c=relaxed/simple; bh=r4VaYJrwHCXDlAcfMr7sr6lS0pk7V2NSw4LKzmX9i5o=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QYOxpv3H1nVkbGfi1NhwVby0rOkP85OgYD8CXQkxbPhtb2hMMu1CP+q04K25aBDIMxuWe2doZvr8dD1cI71LQHNoLcO6kgvGLPN6RNmpu3SPyzFe2/tOkCrnnvaHT6P4N1D+CCpqJFLpZanbS4Zn/bTCuJ5Nq4wdCelkx6I375s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NkReZ84S; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NkReZ84S" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-21f4a4fbb35so33156825ad.0; Sat, 08 Feb 2025 02:32:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010760; x=1739615560; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FM0Dc99ZK+Ah2fMPgdFn/MAVtyk4O2Sk7UtUiTgjHeU=; b=NkReZ84S4VauNZI2oTtxfR/iHzw/AxnkPXfvzCExlI0g3NE8zzlqm5NToV+B9IYlQR d7m0dKGVKThlGr24Iyjxkyc+JGS5bYUOHhV1i926UHCBeqYqx9bXn6drhg9nAwPgMeoc j8zIkD9EhuTynbeFJZrkO0HLWqaOvKrmjPKjVxNCNx4WXI19V7CTQPVVGfyyBic1oFaU RXgHVVszVHtM/N4wZScvYEFKghhaqVgLmbAqsURnIA1OORF2Rq7bhyU6ZQ2v4zDYTNhk 4wF0AtmS1RD8zOPfQY1amtKchnVRCUTXAxsTqixNkJPGk0CMfdzSFdVjkeavEFVUKsah dxIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010760; x=1739615560; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FM0Dc99ZK+Ah2fMPgdFn/MAVtyk4O2Sk7UtUiTgjHeU=; b=VR2fCm2cSLo5bG8NW22L/YmJ5HR6NnyJPqtOsGRROROXr0IOKLiYso8c0W7i0UJClm sW9YwLjs6Oh30BSgFpuLcrVQz8pmZ8lxpD/UZHA/qaJHy4mdf0wCac+BmnpY6UnyrGkh tbQ011+zV+jGBIFXvt7SgGP+P9FeoAomJ/uhBOMt2C30SJvtFXAT7Z3gKU002dwbPseG sEW29EbU4u7ecbfrMm2d2zNSB80bw0n3pfBQ1yPZXCvr7q74ZVYok7u/0jK0nbIKn1dB RDlIXq1VD8aY6i5qVhT2aOyOvq0O+LFkta4i5UEfW5m+DdcPUHy9aLJAkRm5fpr6B715 YGpA== X-Forwarded-Encrypted: i=1; AJvYcCUwwZdNB4EkkID8g4R6f6qLjpsvcsXGr4E1H/LDre+w8K+pvL80S/0C2mL8hkTacjWSH0aqlfs=@vger.kernel.org X-Gm-Message-State: AOJu0YwySMcrpJ/o68pUIFYDgERAjShxDw5MWzQPN7Y5bLj+ZsYIFlze 1jw5alCSkL67tHfEw4SFSx2/bYMc8xUEDrsiKeBzpiG5IkjzOW33lUw14VUmqwQ= X-Gm-Gg: ASbGnctwipURYyG4YrpiCoMIjkXpPzMzz1gT54TXgiezSJmIK4U0RH6qKrBbP/m4Jlk gAN6HzY+AMIlCwCbzdWTrxVCWaYCQq4Ed+kn+YvkS2Y4WfhMoH84bvAkC+/Wapv19lNdTQHZzbK 0uqGh4MCewhtGmgiRaKG4g5Bs0LuxY56glpyTsWTcyllntlEaokg9+TmmLtPKJ0yGoBoPBR+rW7 Ck5t8Q+iBMAeVlzGyipRwQpnns2jFeq4gz1LbOm3RinYXi6N7AcjfMpBxTK7b7aQeWvune92/S7 lNDhnAsVmcFW5DEeLMzT2EX4nZ45BF/hihsVObNy/c/y1zbdDY3NGA== X-Google-Smtp-Source: AGHT+IGgSiVktLlqw0nSJT28srkIGTZ5xlwxIo9az+0pFTqB/sonF9/JDP6rar2LVl+mLfj+fw5KTw== X-Received: by 2002:a17:902:db12:b0:21f:65b0:de38 with SMTP id d9443c01a7336-21f65b104c0mr43348365ad.21.1739010760140; Sat, 08 Feb 2025 02:32:40 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.32.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:32:39 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 02/12] bpf: prepare for timestamping callbacks use Date: Sat, 8 Feb 2025 18:32:10 +0800 Message-Id: <20250208103220.72294-3-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Later, four callback points to report information to user space based on this patch will be introduced. As to skb initialization here, users can follow these three steps as below to fetch the shared info from the exported skb in the bpf prog: 1. skops_kern = bpf_cast_to_kern_ctx(skops); 2. skb = skops_kern->skb; 3. shinfo = bpf_core_cast(skb->head + skb->end, struct skb_shared_info); More details can be seen in the last selftest patch of the series. Signed-off-by: Jason Xing --- include/net/sock.h | 7 +++++++ net/core/sock.c | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/net/sock.h b/include/net/sock.h index 7916982343c6..6f4d54faba92 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2923,6 +2923,13 @@ int sock_set_timestamping(struct sock *sk, int optname, struct so_timestamping timestamping); void sock_enable_timestamps(struct sock *sk); +#if defined(CONFIG_CGROUP_BPF) +void bpf_skops_tx_timestamping(struct sock *sk, struct sk_buff *skb, int op); +#else +static inline void bpf_skops_tx_timestamping(struct sock *sk, struct sk_buff *skb, int op) +{ +} +#endif void sock_no_linger(struct sock *sk); void sock_set_keepalive(struct sock *sk); void sock_set_priority(struct sock *sk, u32 priority); diff --git a/net/core/sock.c b/net/core/sock.c index eae2ae70a2e0..41db6407e360 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -948,6 +948,21 @@ int sock_set_timestamping(struct sock *sk, int optname, return 0; } +#if defined(CONFIG_CGROUP_BPF) +void bpf_skops_tx_timestamping(struct sock *sk, struct sk_buff *skb, int op) +{ + struct bpf_sock_ops_kern sock_ops; + + memset(&sock_ops, 0, offsetof(struct bpf_sock_ops_kern, temp)); + sock_ops.op = op; + sock_ops.is_fullsock = 1; + sock_ops.sk = sk; + bpf_skops_init_skb(&sock_ops, skb, 0); + /* Timestamping bpf extension supports only TCP and UDP full socket */ + __cgroup_bpf_run_filter_sock_ops(sk, &sock_ops, CGROUP_SOCK_OPS); +} +#endif + void sock_set_keepalive(struct sock *sk) { lock_sock(sk); From patchwork Sat Feb 8 10:32:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966354 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 958C1192D76; Sat, 8 Feb 2025 10:32:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010769; cv=none; b=hUz0KZHE8J0sdU/dMcVhCULThbXp/FF5zPoDwiJtVYP+Ibqt1h6naB0JcLmCgQXCD2ZD4ntFarQvOtKTyEMf9QKyg9+bdpEFgy8PYCh1eh3F/5jveDP/RrLUsn/0bqA0S3qsszF1qnIgJKI7bJrf3CUWUVhPruc9m/E+OhCYvW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010769; c=relaxed/simple; bh=qebGorEVmhaLcbNODRfEQPtuqwcjndyNILJZilkRnRc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TzXdvFtulnE045JO9LjPPMPZZOCmVLE28h5vBlLnrNvxAtEY+Q/rPhPoF2h8MSAQ9Y1/3CHBWK69sDuFPuE3/OonJq9hJU8+aHtI8Aw6m4jkKuZAjWxKjUrhnAaRYDHpNKaI45zlZzFMSmfAogu4+9DhWwze+tSyK87cxas0bQA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=C7KgVad/; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="C7KgVad/" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-21f40deb941so54404515ad.2; Sat, 08 Feb 2025 02:32:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010767; x=1739615567; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eZ27h7SBKv7V7VURx8pxVTy3b3Nbl5mN4WLzXEPAFFc=; b=C7KgVad/BFju11QiGz43ScBCcqEwOvAYdddpj+TNk7hyfSqRibG9mVzT5Ju29Xwf66 8YIp1xsVxizQMm6C1mXzg5MfErpEeqcoeHostM89hVp7saJr7pTyqTxOjFJ8yCnJdXOV LA5va16ZyVFeHtlNkf4tdByqQpXjNOUfpOGpl9idU+KlLkbTHfilLfE9mUwoiFPTzdaJ 8x5smU1Djq00QTkl3C+sxwUylbndQYmE2boFCbDaBrarjl4Fw9oclTlM/r1xOLKW2m9m JwozLaxiXXlXIOsl42ng3T0tjTxY/y48xBdLU/kQL/3V3ODXFYQDulTNvdi7pPPtByp+ XfBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010767; x=1739615567; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eZ27h7SBKv7V7VURx8pxVTy3b3Nbl5mN4WLzXEPAFFc=; b=QeWW+bHdj1ic+94W8qGPJ+CuBpQkYBpUrRGsb7QkSHJdSEHOUhTRTEDJJ6FsCttMm4 QabNPzxz6L/hWCOiQ+guK4R4+mQ7tRerjrgnq3/L8c34vV9TKhSMjeWSogkXmt6m0tla bkwTu3Wrq/Kz9Q+Azv9482H+5m9aG+867a3xsP6zbQqiDjA12wAsUnVn+5zIbZM3Q9vY vg+ZyYS/MPrmJF1qptQsSGnXqhqrz8a7V/M59D+OJ6IBP9aTjx5EIHtZBOaGY2XO5vcT RCj+rNh5Ulpx/JVbMh2ab0gxEuvoB8M2of/nUasL0wUW2aHPdWlGddEh8YYCHh4G6Uiz 325A== X-Forwarded-Encrypted: i=1; AJvYcCVGb06/XLF/F3uHFqyE2cIE4qYmRbQgDqvU+Na9wmBt38N0rymta56eEVSCWacmgNFbEWTae0o=@vger.kernel.org X-Gm-Message-State: AOJu0YyT9tyI4sPTn4JDE3QKbP6eLJdVkmstm+mxn28g1D3CnQnTd0uz a6XFXEHAXuutFrxcVB2Em8GxBAL/dEVyrCTypoL6Laf3aR30Vkg3 X-Gm-Gg: ASbGncui4voDoIBYT+dXslitcgqSTAjhykCu88HN4opvO0z9gi0JETx9/m+HEm0LDQ3 50P2KOoDp/KZbSiqenH77kUgq7DCEyx6KN/dhMDSBPR8Nk6rVAN1ogjEZoNRkLkdjRwh+nLnC0w qgaB9ym8aHAxtbl9jZ6gW+3qip8hP7sX0FLiC6/o2g//KmmbeayxhxH7BZq2+JlGNMYogdcY22o nfVoQOZJ4Ucj2icMwG/IA1db6d6UuILXAiY2kILVrf0mNRfWMb4cTOMNWFbEboAHCinENZzzBJd UxPjlsEIIqH5tqSDIJDQlS56PzVMiF5IdI0HPW5MYsjtHFZzWXIpoQ== X-Google-Smtp-Source: AGHT+IFuXzRORga5Dmk9/L+Pxcwu+xMHqKLCGya8YJ2Rs88eamAIkwNoUBbM8v62BYkf8O24nioegA== X-Received: by 2002:a17:903:41c7:b0:21f:6c81:f63 with SMTP id d9443c01a7336-21f6c8111aamr24510375ad.16.1739010765249; Sat, 08 Feb 2025 02:32:45 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.32.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:32:44 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 03/12] bpf: stop unsafely accessing TCP fields in bpf callbacks Date: Sat, 8 Feb 2025 18:32:11 +0800 Message-Id: <20250208103220.72294-4-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net The "is_locked_tcp_sock" flag is added to indicate that the callback site has a tcp_sock locked. Apply the new member is_locked_tcp_sock in the existing callbacks where is_fullsock is set to 1 can stop UDP socket accessing struct tcp_sock and stop TCP socket without sk lock protecting does the similar thing, or else it could be catastrophe leading to panic. To keep it simple, instead of distinguishing between read and write access, users aren't allowed all read/write access to the tcp_sock through the older bpf_sock_ops ctx. The new timestamping callbacks can use newer helpers to read everything from a sk (e.g. bpf_core_cast), so nothing is lost. Signed-off-by: Jason Xing --- include/linux/filter.h | 1 + include/net/tcp.h | 1 + net/core/filter.c | 8 ++++---- net/ipv4/tcp_input.c | 2 ++ net/ipv4/tcp_output.c | 2 ++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/linux/filter.h b/include/linux/filter.h index a3ea46281595..d36d5d5180b1 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -1508,6 +1508,7 @@ struct bpf_sock_ops_kern { void *skb_data_end; u8 op; u8 is_fullsock; + u8 is_locked_tcp_sock; u8 remaining_opt_len; u64 temp; /* temp and everything after is not * initialized to 0 before calling diff --git a/include/net/tcp.h b/include/net/tcp.h index 5b2b04835688..4c4dca59352b 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -2649,6 +2649,7 @@ static inline int tcp_call_bpf(struct sock *sk, int op, u32 nargs, u32 *args) memset(&sock_ops, 0, offsetof(struct bpf_sock_ops_kern, temp)); if (sk_fullsock(sk)) { sock_ops.is_fullsock = 1; + sock_ops.is_locked_tcp_sock = 1; sock_owned_by_me(sk); } diff --git a/net/core/filter.c b/net/core/filter.c index 1c6c07507a78..8631036f6b64 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -10381,10 +10381,10 @@ static u32 sock_ops_convert_ctx_access(enum bpf_access_type type, } \ *insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF( \ struct bpf_sock_ops_kern, \ - is_fullsock), \ + is_locked_tcp_sock), \ fullsock_reg, si->src_reg, \ offsetof(struct bpf_sock_ops_kern, \ - is_fullsock)); \ + is_locked_tcp_sock)); \ *insn++ = BPF_JMP_IMM(BPF_JEQ, fullsock_reg, 0, jmp); \ if (si->dst_reg == si->src_reg) \ *insn++ = BPF_LDX_MEM(BPF_DW, reg, si->src_reg, \ @@ -10469,10 +10469,10 @@ static u32 sock_ops_convert_ctx_access(enum bpf_access_type type, temp)); \ *insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF( \ struct bpf_sock_ops_kern, \ - is_fullsock), \ + is_locked_tcp_sock), \ reg, si->dst_reg, \ offsetof(struct bpf_sock_ops_kern, \ - is_fullsock)); \ + is_locked_tcp_sock)); \ *insn++ = BPF_JMP_IMM(BPF_JEQ, reg, 0, 2); \ *insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF( \ struct bpf_sock_ops_kern, sk),\ diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index eb82e01da911..95733dcdfb4b 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -169,6 +169,7 @@ static void bpf_skops_parse_hdr(struct sock *sk, struct sk_buff *skb) memset(&sock_ops, 0, offsetof(struct bpf_sock_ops_kern, temp)); sock_ops.op = BPF_SOCK_OPS_PARSE_HDR_OPT_CB; sock_ops.is_fullsock = 1; + sock_ops.is_locked_tcp_sock = 1; sock_ops.sk = sk; bpf_skops_init_skb(&sock_ops, skb, tcp_hdrlen(skb)); @@ -185,6 +186,7 @@ static void bpf_skops_established(struct sock *sk, int bpf_op, memset(&sock_ops, 0, offsetof(struct bpf_sock_ops_kern, temp)); sock_ops.op = bpf_op; sock_ops.is_fullsock = 1; + sock_ops.is_locked_tcp_sock = 1; sock_ops.sk = sk; /* sk with TCP_REPAIR_ON does not have skb in tcp_finish_connect */ if (skb) diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 0e5b9a654254..75e935ec7916 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -522,6 +522,7 @@ static void bpf_skops_hdr_opt_len(struct sock *sk, struct sk_buff *skb, sock_owned_by_me(sk); sock_ops.is_fullsock = 1; + sock_ops.is_locked_tcp_sock = 1; sock_ops.sk = sk; } @@ -567,6 +568,7 @@ static void bpf_skops_write_hdr_opt(struct sock *sk, struct sk_buff *skb, sock_owned_by_me(sk); sock_ops.is_fullsock = 1; + sock_ops.is_locked_tcp_sock = 1; sock_ops.sk = sk; } From patchwork Sat Feb 8 10:32:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966355 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1E6A2192D8E; Sat, 8 Feb 2025 10:32:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010772; cv=none; b=PXT4fEyl+yHqBYEZ1InQ5lvglSEOmy+HgXsxKw65telQKfZqbGUg70MqaGc3ny7n8wB1/ltdzpR8zM5+Si8kfTx+7y2EBA5nqrRYGOyT5fjrV0aVhJKbvHzXDoMAXxNjx6Sv1bocJnX1CwOXOPxV9BfaVWqD7Ei2RSBFuvBZQbM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010772; c=relaxed/simple; bh=IOkmfI06LTb3oz7n3bh7mmcfKsas5MSQLjMjVkJ97Tc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=JDIRrzWj3ahIVzROFTOaLyqSLoXvRN95kjQPQUsNR61TWm+MR7E+xr4JvoYu2smlLAlyzlQElQz0P/tsD26OvsVBLJPxCuE4dS4Bp4wjAvWphzvHWKuoN7uvKpqWD7ROLI1dFtHq23inLwu90dlaGcJBk35PSQdFOAETABi5k44= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=HN+UYhqX; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HN+UYhqX" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-21f4a4fbb35so33158045ad.0; Sat, 08 Feb 2025 02:32:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010770; x=1739615570; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CbcQK4pzLWWZdECzEzWgcvFcvBHn89f2+AyACM8EpXs=; b=HN+UYhqXVWh2wuoJ7Kx5z+fBE+fByWTKlmhtjnjXCaivVUy1eXpQY3qExUkpCCQ5rA sjMJU2fSnfon14pbsLjZcHNxJy5tuXX0cK86r2bWSdKQjXbclRbW86wHx/rec8i22CB4 GqGWfhR0sGJoK6kX7T2OIcMqnWW+8wcpGvMu/GfE5H6k+4jztPHFhpVZmkCL8s+Kakf+ t8/fx4sCltIz5j3p4QZ+c13MgCfueRGB2f3J1fFacMOEKMq7PiUQYr2fUJuchoW+qUrK I19/orr0/AglUS4Jxsy2knhfnKcvUWsa8D1puLMCtoj/soPYCrZ+7MyoAtFhOxWcZ/yH igXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010770; x=1739615570; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CbcQK4pzLWWZdECzEzWgcvFcvBHn89f2+AyACM8EpXs=; b=VDzMcJY7N5xyMIiqCBV7/6flG064cuVD2nWaVOzJNbxTwg6sKmOsz8YqZYev3nlDyB uD7+CGilmVvmivAE88SnCbqwbk8zYc+W/mPdYFDLClic0tfgbIosjBWh2JoQxm6CufEf /rm+uXYrytoUWAfyQiAO93EBlFQPn+M8ATPmhTRhUWc31FXy+qKGmPTUuvplDjPCBDOV xVIp0g6T/O/1sF93AqY5BkRg0uFfDUfgPUzr7X1dE15/fZe1s4MMlxRNR6xOREzy0f9D LEYdr891ry641e2ZFGh08x58v3O0RG1QlBynKmciUUy2sZZ/efxh8xTii3HlbTpYZwxI 1Gqw== X-Forwarded-Encrypted: i=1; AJvYcCXUDF7bVwLqXrmdzmXCCJh8jq/bsyWxu/K7bO3GDfxSbUrkzV7DYB4wpjFoVIJ9KZs0Nhw7XQA=@vger.kernel.org X-Gm-Message-State: AOJu0YyRVFUBysgWIL8uoPiwnEd+Ws+3r8N0q00X5PKHePQvw00pEb5Q ZFzaMBpTQGhOZWUmjnaXTMG0/aPAnqrFEzfhC5fJzDx4YHUi46iC X-Gm-Gg: ASbGncsQxAqNwccF8MJbGoiL8r1qh7Nhw5OVnhXGKSbXvcKUVLjKLJoOWDl2phiQHrQ TqM/HUS3ITroCF9JcHzEoujJCnx6Fb96RWHG/o6J2oWfcNu/UCVMYP54EnIfVT51TrVyNvnw5Mg 5av8OpOfC7/XFrloq5Oj4UWaQLbpUbIFqQY9W6ViEeTwjt02WAzSdbloVjtVTnfttoYm1FJpSlp cPmGznevC22j0yFeb3sHCR8/SfLgVA41ecJQNgg+l9/3GzIpcJ9kNC4EWK01T6Nx4odOcy/BL+Y KIND4X7xUjFsKQhx6d35sTWNtY0te78MPXUrfyNuU/K9/UzSX4Oixg== X-Google-Smtp-Source: AGHT+IG4HpZoRkaFIPNndD1O70EDddx2yARzPOjix+npb+O7Stop94umbKsb0ovUs+BGDuFZ4mD6KA== X-Received: by 2002:a17:903:2b0c:b0:215:7287:67bb with SMTP id d9443c01a7336-21f4eff38cdmr113028535ad.0.1739010770324; Sat, 08 Feb 2025 02:32:50 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.32.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:32:50 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 04/12] bpf: stop calling some sock_op BPF CALLs in new timestamping callbacks Date: Sat, 8 Feb 2025 18:32:12 +0800 Message-Id: <20250208103220.72294-5-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Considering the potential invalid access issues, calling bpf_sock_ops_setsockopt/getsockopt, bpf_sock_ops_cb_flags_set, and the bpf_sock_ops_load_hdr_opt in the new timestamping callbacks will return -EOPNOTSUPP error value. It also prevents the UDP socket trying to access TCP fields in the bpf extension for SO_TIMESTAMPING for the same consideration. Signed-off-by: Jason Xing --- net/core/filter.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/net/core/filter.c b/net/core/filter.c index 8631036f6b64..7f56d0bbeb00 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -5523,6 +5523,11 @@ static int __bpf_setsockopt(struct sock *sk, int level, int optname, return -EINVAL; } +static bool is_locked_tcp_sock_ops(struct bpf_sock_ops_kern *bpf_sock) +{ + return bpf_sock->op <= BPF_SOCK_OPS_WRITE_HDR_OPT_CB; +} + static int _bpf_setsockopt(struct sock *sk, int level, int optname, char *optval, int optlen) { @@ -5673,6 +5678,9 @@ static const struct bpf_func_proto bpf_sock_addr_getsockopt_proto = { BPF_CALL_5(bpf_sock_ops_setsockopt, struct bpf_sock_ops_kern *, bpf_sock, int, level, int, optname, char *, optval, int, optlen) { + if (!is_locked_tcp_sock_ops(bpf_sock)) + return -EOPNOTSUPP; + return _bpf_setsockopt(bpf_sock->sk, level, optname, optval, optlen); } @@ -5758,6 +5766,9 @@ static int bpf_sock_ops_get_syn(struct bpf_sock_ops_kern *bpf_sock, BPF_CALL_5(bpf_sock_ops_getsockopt, struct bpf_sock_ops_kern *, bpf_sock, int, level, int, optname, char *, optval, int, optlen) { + if (!is_locked_tcp_sock_ops(bpf_sock)) + return -EOPNOTSUPP; + if (IS_ENABLED(CONFIG_INET) && level == SOL_TCP && optname >= TCP_BPF_SYN && optname <= TCP_BPF_SYN_MAC) { int ret, copy_len = 0; @@ -5800,6 +5811,9 @@ BPF_CALL_2(bpf_sock_ops_cb_flags_set, struct bpf_sock_ops_kern *, bpf_sock, struct sock *sk = bpf_sock->sk; int val = argval & BPF_SOCK_OPS_ALL_CB_FLAGS; + if (!is_locked_tcp_sock_ops(bpf_sock)) + return -EOPNOTSUPP; + if (!IS_ENABLED(CONFIG_INET) || !sk_fullsock(sk)) return -EINVAL; @@ -7609,6 +7623,9 @@ BPF_CALL_4(bpf_sock_ops_load_hdr_opt, struct bpf_sock_ops_kern *, bpf_sock, u8 search_kind, search_len, copy_len, magic_len; int ret; + if (!is_locked_tcp_sock_ops(bpf_sock)) + return -EOPNOTSUPP; + /* 2 byte is the minimal option len except TCPOPT_NOP and * TCPOPT_EOL which are useless for the bpf prog to learn * and this helper disallow loading them also. From patchwork Sat Feb 8 10:32:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966356 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 312F6192D8E; Sat, 8 Feb 2025 10:32:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010777; cv=none; b=InG1Y9F1mPoEFmoifjlXwyq2NI4elzyjIp9KqrQ9sjX//82fLHBmwk2KalJ1graRa23fZU+MZ9X1s5rIXUf/JxJtjkLRsTehwSAm6MS83AbPShUmB6h4aaMhOKEyfWPibdP5ZPd/TKJG+VE5j1Xy+Dx8TUonGa8YT3y0zM0rMUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010777; c=relaxed/simple; bh=2yACaHlYU3DQCar4Rg/fj5s7Lo6Jqz4AAg09SpiT4RQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TNPK3BQdT2I3V9aaLbeRaJd9jl8JaeVoh94MFdmnatEfIVzgbbCbOdjIp0ilvjiLl02NCGgWSKw9hBQZrUAFWj4eiZQBNo6WwtZOcIgGu+UYErp2k5T3/E8Ak8C+p9fSGuUhuZqO7R1uHg9u6MnZzsogLzDtD9CEvECpvnaWdTc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OVaN5jFY; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OVaN5jFY" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-21f6d2642faso8568715ad.1; Sat, 08 Feb 2025 02:32:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010775; x=1739615575; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=q6ICXH97ERqVQSJEE7W5tq5n4W9Xmuun5ioNK6Zh9pI=; b=OVaN5jFYxZis610SYznlYoes1X41/0cWRXfX3ABDSITgWTKtTyHUsA08V9lgH2obbM XsiH0OSjcwChocc8xUwCF8u6AS/GnRQsuaLhaa9C0IvwiFmIMBf+Ea/koimBLFv5KbpK To+RjelPJ6PghfWnoVm9POKN7NEGlTfyjJPQLanSxeEagoPTpV3pf3hxCMx/aKD+ej7g e0lNpJrPWW9oah08RAxDkxVjkjjcl8D9U2H6RAOZt2FLOVme3sl4xhIVSMkndETm/u2m C0OV/1Kj4cExJm4zCusiIqV4tcL3qlRhgqcKFubP7SV24FdS317dW6aQfKsGUYhTONge YEVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010775; x=1739615575; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q6ICXH97ERqVQSJEE7W5tq5n4W9Xmuun5ioNK6Zh9pI=; b=BtDR8raB0/e+sY/LDG4cE8C4BYBOeD8Nay5tqczgM6xCBHleTKrDi0m6MVeIpLHvl0 9ktZnV5DBcM/SYN0Jp3jYXNeiP/2e09I42ZsOzW/Cjz84UDhuWbRm/QBPvIRGo2C6uU1 b5P3e+wd95N+9vDN+rrzULy3UXwYBoOR+Zanq/lFqw9aJ4MpAPTa+VQrowrv/qFT6dtX 53wWzPvaAL9Q43UEIzyBoV8oaPxbis7zL4KEZbOfYMnsjbKRWkbZMWmsLGJQWbRMOaRk v0vPHJ6EoWroNA4P64R3t/0wWlY9sCAIZlnG1A0ZRPGSx/tV9VTdccwM1nbxJVb/XMqK 0lRQ== X-Forwarded-Encrypted: i=1; AJvYcCVSTiPRk7ofng/7kfpqPhBXPs36vwH1vimlB57JC5etvXESs2RefzE1dpSROdWJUbXUg0H2Qio=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9UZtmAgyCUZ+dnVYryEwYyEH5HzcZIe62dXQkv+peDKM3YIY9 zcUbH+MYEqm/cp6zudyGXFv0O0qkyHPx2gr1MGRAXOilPjJNXJ24 X-Gm-Gg: ASbGncuRWc5VLwFizlTdkzfzU2YTWh6+KHbNVgO5RGQH287YXvgEh/fN5VK1pxm2LcQ k1ShSc8m6nKWwKZUMmlWbP4gL37TBmjbvg/bSSbPW7Q6kglXpS7ikuLdRaNm3V9n2xIzNiTLUm9 2x7ubyJdlaf9Yvgks/2bn2VN+JypLXXOkyLBvqJ8KCeecTNJ1kNfBEf/f0WO53broCRe8skltrx 6crQrrMGGBhMnlJSgEB6c0sZuEfBmxSnhweoFA6Rdzftj+bTX7LjqsIOk6K5xr9T8QB96vYqAzd h1JlriPka4MxzupFH88dcJwNPldEdjfes+iYVUMv/B8AQdSLlgyyfw== X-Google-Smtp-Source: AGHT+IEzIEXBtWj7Ks3TOd0MzUbQ2JmJQsw75N8176HVgyWuQVnUOS94wD7a+aXnXKM4nh/qHe0vWg== X-Received: by 2002:a17:902:f541:b0:21f:49bd:4bbf with SMTP id d9443c01a7336-21f4e7dced2mr94707315ad.50.1739010775439; Sat, 08 Feb 2025 02:32:55 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.32.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:32:55 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 05/12] net-timestamp: prepare for isolating two modes of SO_TIMESTAMPING Date: Sat, 8 Feb 2025 18:32:13 +0800 Message-Id: <20250208103220.72294-6-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net No functional changes here, only add test to see if the orig_skb matches the usage of application SO_TIMESTAMPING. And it's good to support two modes in parallel later in this series. Signed-off-by: Jason Xing --- net/core/skbuff.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/net/core/skbuff.c b/net/core/skbuff.c index a441613a1e6c..46530d516909 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5539,18 +5539,37 @@ void skb_complete_tx_timestamp(struct sk_buff *skb, } EXPORT_SYMBOL_GPL(skb_complete_tx_timestamp); +static bool skb_tstamp_tx_report_so_timestamping(struct sk_buff *skb, + int tstype, bool sw) +{ + switch (tstype) { + case SCM_TSTAMP_SCHED: + return skb_shinfo(skb)->tx_flags & SKBTX_SCHED_TSTAMP; + case SCM_TSTAMP_SND: + return skb_shinfo(skb)->tx_flags & (sw ? SKBTX_SW_TSTAMP : + SKBTX_HW_TSTAMP); + case SCM_TSTAMP_ACK: + return TCP_SKB_CB(skb)->txstamp_ack; + } + + return false; +} + void __skb_tstamp_tx(struct sk_buff *orig_skb, const struct sk_buff *ack_skb, struct skb_shared_hwtstamps *hwtstamps, struct sock *sk, int tstype) { + bool tsonly, opt_stats = false, sw = hwtstamps ? false : true; struct sk_buff *skb; - bool tsonly, opt_stats = false; u32 tsflags; if (!sk) return; + if (!skb_tstamp_tx_report_so_timestamping(orig_skb, tstype, sw)) + return; + tsflags = READ_ONCE(sk->sk_tsflags); if (!hwtstamps && !(tsflags & SOF_TIMESTAMPING_OPT_TX_SWHW) && skb_shinfo(orig_skb)->tx_flags & SKBTX_IN_PROGRESS) From patchwork Sat Feb 8 10:32:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966357 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B7721B0F19; Sat, 8 Feb 2025 10:33:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010783; cv=none; b=WTIafP0zrw49uOILNOIefPdF0+9uTkApGtNNw2znV1LbFT+x3fpZoc3m+zVB3IkmOcRNQCX2CWZ/eq/z5opPAt9tMaBIVzkc7IUcmj4dOfVDw/ZepiBDPF3M7cLAOZy3FOPT59zi5QTfSWB/yaIkKR7AzTANihlt38xJ+/k30Fc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010783; c=relaxed/simple; bh=aHyAM5svxhWj2sF7AHGWfOZftFC4LgmiePb1+qDeyVE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=BwpcWe2yEoTIPlOZoEy/5+V7woHFnXU8Pa5fywstjj/LOSLFIzDw/7bPIrytUBGP4YWjJQ8Ea4S0wbcDbMx5S/szW3nXQ5wbdZutfI1eGBoyJuI9sCUk++2QcsDrgZsTyh3MqQeL/Zx9jOErRH2BU11+hoFmqylE49rX65Df0F0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=V63/dkL4; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="V63/dkL4" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-21f0444b478so42884705ad.0; Sat, 08 Feb 2025 02:33:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010781; x=1739615581; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SFM1macd022s7HGXie9TIhcIgvi8V+I1eZg2vJ35r2U=; b=V63/dkL4mBXVqsHB7lS1cqK3r+Vrw78uCO4JotouUqnUqOTgFSNdDcm9/eU3qXFS/E xfiX6CcAIzbspy6h+hRBJUo2ImpIi4bvP+wiv7ETGzzni0Cq55druKosvo1zIJnNjXDK LjtrYVWYqobOI1uM23uMjMxeSfy/SkRK9lxBQabG3yk3kk+VDuVDQ3TxAx4Bt9r2IwQo aRvq4bVohdrRCwKpzc6BeXUfx5XuEHAzA5GunrwytBLG85T9GPDY6uL4sO19eWA5N0i/ rBTdU3VgJoZDncG0wnHT2SDD93YH70GQIXGbqxFi5MF14y0ZXBDxnqFo2ddV+0hLNbEu RJIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010781; x=1739615581; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SFM1macd022s7HGXie9TIhcIgvi8V+I1eZg2vJ35r2U=; b=tHLReBeroAUiLBYSfoGWN2hNmQhe/4+doenFkfZnmiwRkOJOC5FQQ+HVFqsDI6l9rv 9+Wwei7cs1oAM07khnAdcKqLZ972ztm5um3bf7Fhxg8QBn2yTyfcOmmsXOAnAX+JqqfP 3f7MYpjXQq+xaFk57Mor0HgpigDaYcIbxs7FxZPm3Tdw/dKisNlkoWxhcEFXvaIuUloU Nd6uZkPrxabT2++vDTB7c8ZJ0wccGSfPVmL2uQLTLvLKt2u9k6K3LXlfvroWBBavoP5W i5JVl/5aqTRCZmRPypp6fw+6FOQKrBcoNzPih+SoEWpcz4hP5k8rOiS5Vv+nQSEb8AT9 x1uA== X-Forwarded-Encrypted: i=1; AJvYcCWLDrZYXRX2iNUwhf3n6aWjnXJnclqzK8HGA+AHaPVCHdpJ2wUJGz7hyAJAEybwfZh2P/y3VBI=@vger.kernel.org X-Gm-Message-State: AOJu0YwvytDOA0llPDFI3O5/A+/ET4z6tum7rTBB+hPJ92fT3+y7v5gt j3KC7a8PdzmRJBnOoCuyBnPVWaqJFqrmcf9MZgcl7+CAuMV7bS0l X-Gm-Gg: ASbGncv/QqxG4jxhlTB/+rx/m17PMayeeOX48ou2QrzOkjsRqMGook315L/2bTmw546 VdGfxNusoCvUDoTRdqZgme4FztNTQPojrHchgz6isNEzgAGzeG5Cj2obhdYGdvQJnOjzeSbc0j1 VILZD/7WIEQ15mEY38q7r5x536t9OtXYGhomCA5eS7V1LZHEcZUl7RY5luaEWgppROgS/YXCIKT QwbUuKFdFxEXj/5KKfOZ9g7bKiZEsBMt+KOHjOtUcpPzx1X3hav1/PHbzq/vxrYDJLw5DroYmYi lYe0WSZIk6mkBMpGCZujPWYBe13UEjSlWFj62k+MDPQWf8taDfQW4w== X-Google-Smtp-Source: AGHT+IE6zHffg6eatYFb3uOH4TJZ59KqBT6RcSCgi1MgezaJ6VbRuVJfyvyUrAbMjxJGfss03JYMNQ== X-Received: by 2002:a17:902:e5c8:b0:21f:1ae1:dd26 with SMTP id d9443c01a7336-21f4e7a1157mr94770325ad.52.1739010780709; Sat, 08 Feb 2025 02:33:00 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.32.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:33:00 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 06/12] bpf: support SCM_TSTAMP_SCHED of SO_TIMESTAMPING Date: Sat, 8 Feb 2025 18:32:14 +0800 Message-Id: <20250208103220.72294-7-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Support SCM_TSTAMP_SCHED case. Introduce SKBTX_BPF used as an indicator telling us whether the skb should be traced by the bpf prog. Signed-off-by: Jason Xing --- include/linux/skbuff.h | 6 +++++- include/uapi/linux/bpf.h | 4 ++++ net/core/dev.c | 3 ++- net/core/skbuff.c | 20 ++++++++++++++++++++ tools/include/uapi/linux/bpf.h | 4 ++++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index bb2b751d274a..52f6e033e704 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -489,10 +489,14 @@ enum { /* generate software time stamp when entering packet scheduling */ SKBTX_SCHED_TSTAMP = 1 << 6, + + /* used for bpf extension when a bpf program is loaded */ + SKBTX_BPF = 1 << 7, }; #define SKBTX_ANY_SW_TSTAMP (SKBTX_SW_TSTAMP | \ - SKBTX_SCHED_TSTAMP) + SKBTX_SCHED_TSTAMP | \ + SKBTX_BPF) #define SKBTX_ANY_TSTAMP (SKBTX_HW_TSTAMP | \ SKBTX_HW_TSTAMP_USE_CYCLES | \ SKBTX_ANY_SW_TSTAMP) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 6116eb3d1515..30d2c078966b 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -7032,6 +7032,10 @@ enum { * by the kernel or the * earlier bpf-progs. */ + BPF_SOCK_OPS_TS_SCHED_OPT_CB, /* Called when skb is passing through + * dev layer when SK_BPF_CB_TX_TIMESTAMPING + * feature is on. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect diff --git a/net/core/dev.c b/net/core/dev.c index afa2282f2604..d57946c96511 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -4500,7 +4500,8 @@ int __dev_queue_xmit(struct sk_buff *skb, struct net_device *sb_dev) skb_reset_mac_header(skb); skb_assert_len(skb); - if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_SCHED_TSTAMP)) + if (unlikely(skb_shinfo(skb)->tx_flags & + (SKBTX_SCHED_TSTAMP | SKBTX_BPF))) __skb_tstamp_tx(skb, NULL, NULL, skb->sk, SCM_TSTAMP_SCHED); /* Disable soft irqs for various locks below. Also diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 46530d516909..6f55eb90a632 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5555,6 +5555,23 @@ static bool skb_tstamp_tx_report_so_timestamping(struct sk_buff *skb, return false; } +static void skb_tstamp_tx_report_bpf_timestamping(struct sk_buff *skb, + struct sock *sk, + int tstype) +{ + int op; + + switch (tstype) { + case SCM_TSTAMP_SCHED: + op = BPF_SOCK_OPS_TS_SCHED_OPT_CB; + break; + default: + return; + } + + bpf_skops_tx_timestamping(sk, skb, op); +} + void __skb_tstamp_tx(struct sk_buff *orig_skb, const struct sk_buff *ack_skb, struct skb_shared_hwtstamps *hwtstamps, @@ -5567,6 +5584,9 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb, if (!sk) return; + if (skb_shinfo(orig_skb)->tx_flags & SKBTX_BPF) + skb_tstamp_tx_report_bpf_timestamping(orig_skb, sk, tstype); + if (!skb_tstamp_tx_report_so_timestamping(orig_skb, tstype, sw)) return; diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 70366f74ef4e..eed91b7296b7 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -7025,6 +7025,10 @@ enum { * by the kernel or the * earlier bpf-progs. */ + BPF_SOCK_OPS_TS_SCHED_OPT_CB, /* Called when skb is passing through + * dev layer when SK_BPF_CB_TX_TIMESTAMPING + * feature is on. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect From patchwork Sat Feb 8 10:32:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966358 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 785941B0F19; Sat, 8 Feb 2025 10:33:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010788; cv=none; b=pqyu/1wSWvu7X9GixHReWiwXy9jSfhwgu3mBj87LMKZ9jIrDCLRnwY7FPLojNYt1hi3O9SbOSgppXT9Ir6Q0+yHSTGj5kxp8HzWEg8Wdz+e1t1jsBL2DbC6MYAJXjHUU7MIuehiqKM+nX8aODwptJLNYDq5QlZf3yoNtKH6YE0A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010788; c=relaxed/simple; bh=IlqaLcRRZSP5Rth+fhpwWXcyQ+Z4wQMk2AP6Txtu+Po=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dbnvJrnrwc7/8wnOSwK+srTlM6HCOxf+dJa97JKXWcujxrQZzb0TnnfBFzLGJdzXL0ZL/4LRhsmbEHjXptwrFXc2G7cFf5fLUXRRbCSg6nv4A16TiWAbbaOFYxQK9Gx3g/cJGmzOGjQBA8f8e0U52Ee/BLu9QqOtEp6Oteksy0E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MrJzXeSX; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MrJzXeSX" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-21f62cc4088so15856815ad.3; Sat, 08 Feb 2025 02:33:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010786; x=1739615586; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7FALFc4HhQbB1E7bCuhAiI1KaUPwu7ksfpIboAbt+Xo=; b=MrJzXeSXxlOhNfu/kbRN4A5/R/GWcKbpbAiIc5cnAINpneIWy45wo9NKZkXb5/y06C Y0MyDXep4/4rhi7yh8DDUlpB9jYGrs9mKyOeN7njUdmWRtkz9hz+PL05oSNvJl9IgQot +MlMupzAsnU8Bxno2sFYy2xah8Bv2MTQ/PtaXdc9tf/INPY0cnLrn1rO40Oa77WZ9QxO 64M4rZMQMTPG5g8tEshq0yVgZJ8VBWKeUx5KlazYMcSqu2BVGS0vAQ86ar/sSELgMnjr 0LjAgnF8Z0LNt81ZqSjH6x4bXwEQUgA07JT7ZyZOu/gTxeWJWCvNlcvPRUmbFzhNHfLX GlJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010786; x=1739615586; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7FALFc4HhQbB1E7bCuhAiI1KaUPwu7ksfpIboAbt+Xo=; b=baJjuW3kVdL+AURDTRrZMZpuvAtzs9CpcLRZVlky2cjNffKd6WDo/K0LU6Qvst8/O9 BeG4kF+ZV3dzluSrQLghmqANAvNp3x8TAov+EXDcn4vBJflBUKTh7k2YIcRr4xMvvRYv s9vM0P8ulSEK9W91Qz71V9yi3tWgsT3hofsY7L+jUQ+Zx/vwK4475ItdQPLrxYi4duEc bZZmIO7UOJNnrKHxgvJ2tuHftdBb8yJxk24aqBtV6gfoDUDHiBeBik6FG6kZCRxLIj4b mKY0g7bP7G19x7p8XUE/9qd4iOKjQtXe/YFltrtDSJznbzB3B5OtZb2BIbhZM1R83HkQ uS2A== X-Forwarded-Encrypted: i=1; AJvYcCU5MpUEyIzAkw1m4XOmzF/ErnaUalQLIWqtYvdhs8hoD7Ccve0Hqh4gSBXM+uJDlkR6l9yKGKU=@vger.kernel.org X-Gm-Message-State: AOJu0YzL2qN9NHu+IHYr5L2DKp7JY2NTJio50u/WfVd/gRAc2GGiPtO1 iBHNoaz4FmVH5W2rovM9Yfr64lhmVDEvQfqmp6JcGGiIt9Ap66qr X-Gm-Gg: ASbGncvotovcwp1bjj9yc4+bbAvPJ6xmkUpzbQGNFp3B77XrXtfEKcQJj7dZdHWO1Le a2s1A58EAW/P27JAU2r60yYgNC/n6NTi+HTlKKNXoaG9gKKIx76rJOITKx5woJP11HPI5BQO6KW PoE+V0VPxyi2LLJdmtr+/J9SvMwxKD7zCoHyKkG5NTOiNLnDhfYO827uLj0XSx9DJU+DHPhdqW3 az3JBKS33YM8OucKMEmwTjhc0OErilFzstEEPDs6oszMeGVyt1BL9lc5Fz5G0caGPd0di+RI3TJ Ahm80dBRmpPgsGBAgaD1VfTHEqQhJ6nJLWbXqNUn42IK7yp+7VpSVw== X-Google-Smtp-Source: AGHT+IFSS7nzQWnjGPfhfhv4YXupBemOjbZLWXCIUZ61GJoQM9lnWcYGfKxfI2hoMeigvjlknGLv9A== X-Received: by 2002:a17:902:d48d:b0:21e:ffaf:8908 with SMTP id d9443c01a7336-21f4e73b55fmr91253625ad.34.1739010785820; Sat, 08 Feb 2025 02:33:05 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.33.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:33:05 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 07/12] bpf: support sw SCM_TSTAMP_SND of SO_TIMESTAMPING Date: Sat, 8 Feb 2025 18:32:15 +0800 Message-Id: <20250208103220.72294-8-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Support sw SCM_TSTAMP_SND case. Then users will get the software timestamp when the driver is about to send the skb. Later, the hardware timestamp will be supported. Signed-off-by: Jason Xing --- include/linux/skbuff.h | 2 +- include/uapi/linux/bpf.h | 4 ++++ net/core/skbuff.c | 10 ++++++++-- tools/include/uapi/linux/bpf.h | 4 ++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 52f6e033e704..76582500c5ea 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -4568,7 +4568,7 @@ void skb_tstamp_tx(struct sk_buff *orig_skb, static inline void skb_tx_timestamp(struct sk_buff *skb) { skb_clone_tx_timestamp(skb); - if (skb_shinfo(skb)->tx_flags & SKBTX_SW_TSTAMP) + if (skb_shinfo(skb)->tx_flags & (SKBTX_SW_TSTAMP | SKBTX_BPF)) skb_tstamp_tx(skb, NULL); } diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 30d2c078966b..6a1083bcf779 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -7036,6 +7036,10 @@ enum { * dev layer when SK_BPF_CB_TX_TIMESTAMPING * feature is on. */ + BPF_SOCK_OPS_TS_SW_OPT_CB, /* Called when skb is about to send + * to the nic when SK_BPF_CB_TX_TIMESTAMPING + * feature is on. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 6f55eb90a632..74c04cbe5acd 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5557,7 +5557,8 @@ static bool skb_tstamp_tx_report_so_timestamping(struct sk_buff *skb, static void skb_tstamp_tx_report_bpf_timestamping(struct sk_buff *skb, struct sock *sk, - int tstype) + int tstype, + bool sw) { int op; @@ -5565,6 +5566,11 @@ static void skb_tstamp_tx_report_bpf_timestamping(struct sk_buff *skb, case SCM_TSTAMP_SCHED: op = BPF_SOCK_OPS_TS_SCHED_OPT_CB; break; + case SCM_TSTAMP_SND: + if (!sw) + return; + op = BPF_SOCK_OPS_TS_SW_OPT_CB; + break; default: return; } @@ -5585,7 +5591,7 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb, return; if (skb_shinfo(orig_skb)->tx_flags & SKBTX_BPF) - skb_tstamp_tx_report_bpf_timestamping(orig_skb, sk, tstype); + skb_tstamp_tx_report_bpf_timestamping(orig_skb, sk, tstype, sw); if (!skb_tstamp_tx_report_so_timestamping(orig_skb, tstype, sw)) return; diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index eed91b7296b7..9bd1c7c77b17 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -7029,6 +7029,10 @@ enum { * dev layer when SK_BPF_CB_TX_TIMESTAMPING * feature is on. */ + BPF_SOCK_OPS_TS_SW_OPT_CB, /* Called when skb is about to send + * to the nic when SK_BPF_CB_TX_TIMESTAMPING + * feature is on. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect From patchwork Sat Feb 8 10:32:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966359 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A275C1B4153; Sat, 8 Feb 2025 10:33:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010793; cv=none; b=dHToWWYpD/yvvjEYtctFogMKkZL86vGq+XsGTB2PQOB621ZfRqKPG6KIZPActtys/vKvgPLBLlTPOgy82iYWVTn2YsR32SQXftvx6F5SwDSnPddM2obaT8wTSjdCPxUr16d5+Uey/1lfKRU3CNHqN6otUSX85D/qAY6/fEbt8YU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010793; c=relaxed/simple; bh=3nZS3vqGw8yHludq8kN8FHhfniImBxyp98kTkdC6ZPU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=payz4bI7mnnSQ6fv4LOrz4Sl2FPaOUyqI7fcXjZ58Gvy/CxId1nQvtXmMhZghxDO+l85nVyKHLSTgssugwb6Mgr1FtN5rlACK3zXt+R2MJL+flU+lGlgNTNIh0yzaSFz4LyiALlM0q/8xSyZXEh1u+c3iE0INXEIdh0uWdDeKIo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dAANAoUu; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dAANAoUu" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-21f2339dcfdso46288375ad.1; Sat, 08 Feb 2025 02:33:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010791; x=1739615591; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tbohNPgSlhgIpWwmcL0JHmqTvviK0stebjaAV2QRRy4=; b=dAANAoUupDOl3BfjvAHn0nfI7t0dZIlkmUukC/r/LHz2aFQdtY3tHOi4e0Br3Ccqkm vbXbteCEXIZn6gP3ItWhKkSTtfGn+qBQBbL0GwG+pe8VJPifzKkYMEqWmKPhz/k39BDx LoZKEgGzyveJdiPuLCqCCAg9T+5DDUy4QF1+wP1mN+R3PBKc3ONR0+GCF2SJm+59vYxw jNgNAqlktEKo2radCnMEnLD15bZ3bM53zm2K5qqmikdokpS6XpPl7k2BiJXbz2TAILwZ MfWOjB4LWJyR9UGfkqRHKFl6/fbjJpxxt1vYzYwq2kWFIMdoBEjD5iNS8o1VlRtqOWQ4 ao0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010791; x=1739615591; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tbohNPgSlhgIpWwmcL0JHmqTvviK0stebjaAV2QRRy4=; b=NBPfJN7MDTyhK78/u9G9Y5q/HmIsBhJnaz3smJgXjaCENzB6DL5rBucl1aGevOxzYl KyzNQmqzXYSY4iCydSFOGLbjv0Fq/Ymlo1HtFTl5RHLSeiexWaBgboWBkY3vwfRvOKWW UWBAgD3KetRWem+JTm7rHcaWeTg1laElSZhup9iR+yNWh0PWfJO/XHKMOmbrBUdTTCM8 CmEbrOlYH6CkwxDr5jXIKxM1rx4plsXVplJr2QRl0meG6ijfDuJhAkSeCB5/caen2HIG 0I9IdDDy//rydR+Qf1RpmVUa7xisXyEv5TSWYoI3QdUEBY/c+AJadY4RBk2+UME5cTaa g+EQ== X-Forwarded-Encrypted: i=1; AJvYcCWxdwB7EE13bFJenbjDyLrr9V6XULWS/qlNvT5DllQ5eN/XhSlx/vxVZx+rzVeGz2DZOOBizZI=@vger.kernel.org X-Gm-Message-State: AOJu0YzgvOVavSzldVX0j/Y24ZuOnvgtAWafi32eLeeLfqgsTFJS8085 nta5gjS3IoKO5upN8F6k6m2MyHQ5HWde15OqiIhyGTJluedBC7Qi X-Gm-Gg: ASbGncv/53fuPuuHo8QgHWvw5MjpzIB6CGU1TWQ6r0z7dvRVGYo1M643G48MQaUmOyB lPkBkrToYm2jnZHP8eeVzHVGKCN8VnZ+D/ThstzWfVwMqf4zlyU2kxMeD5smmwlcmDstw7olamj QZm5hDkZe+4P/wcCJ8PfVQWEeBRCyOUAcbzzO2rvSS4AMrU1iFaL5IQbJzdM7DXn8VhkwdOICzf r+p0UFRSmGPRPwclOCunHn8U8P4xYwb0qpif28NGG6BcbAgqYNc0OCkEb+LWbGzZDcSUVnCFwhG LkqL9an9w4dreLLa9ogVYOTvPo7KpnnSTxMgM7beFUKNd1pfZYtfqw== X-Google-Smtp-Source: AGHT+IHq54v9ZG8GjBYERmaqIh8DqVG3l2dPh07XBMK+jwr0TN2GWz6qsqc4MpfrRlT8AG7D1r17Lg== X-Received: by 2002:a17:903:251:b0:21f:4c8b:c4da with SMTP id d9443c01a7336-21f4f7a25acmr88014095ad.18.1739010790870; Sat, 08 Feb 2025 02:33:10 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.33.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:33:10 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 08/12] bpf: support hw SCM_TSTAMP_SND of SO_TIMESTAMPING Date: Sat, 8 Feb 2025 18:32:16 +0800 Message-Id: <20250208103220.72294-9-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Support hw SCM_TSTAMP_SND case. Then bpf program can fetch the hwstamp from skb directly. To avoid changing so many callers using SKBTX_HW_TSTAMP from drivers, replace SKBTX_HW_TSTAMP with SKBTX_HW_TSTAMP_NOBPF. Signed-off-by: Jason Xing --- include/linux/skbuff.h | 4 +++- include/uapi/linux/bpf.h | 4 ++++ net/core/skbuff.c | 6 ++---- net/dsa/user.c | 2 +- net/socket.c | 2 +- tools/include/uapi/linux/bpf.h | 4 ++++ 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 76582500c5ea..0b4f1889500d 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -470,7 +470,7 @@ struct skb_shared_hwtstamps { /* Definitions for tx_flags in struct skb_shared_info */ enum { /* generate hardware time stamp */ - SKBTX_HW_TSTAMP = 1 << 0, + SKBTX_HW_TSTAMP_NOBPF = 1 << 0, /* generate software time stamp when queueing packet to NIC */ SKBTX_SW_TSTAMP = 1 << 1, @@ -494,6 +494,8 @@ enum { SKBTX_BPF = 1 << 7, }; +#define SKBTX_HW_TSTAMP (SKBTX_HW_TSTAMP_NOBPF | SKBTX_BPF) + #define SKBTX_ANY_SW_TSTAMP (SKBTX_SW_TSTAMP | \ SKBTX_SCHED_TSTAMP | \ SKBTX_BPF) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 6a1083bcf779..e71a9b53e7bc 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -7040,6 +7040,10 @@ enum { * to the nic when SK_BPF_CB_TX_TIMESTAMPING * feature is on. */ + BPF_SOCK_OPS_TS_HW_OPT_CB, /* Called in hardware phase when + * SK_BPF_CB_TX_TIMESTAMPING feature + * is on. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 74c04cbe5acd..ca1ba4252ca5 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5547,7 +5547,7 @@ static bool skb_tstamp_tx_report_so_timestamping(struct sk_buff *skb, return skb_shinfo(skb)->tx_flags & SKBTX_SCHED_TSTAMP; case SCM_TSTAMP_SND: return skb_shinfo(skb)->tx_flags & (sw ? SKBTX_SW_TSTAMP : - SKBTX_HW_TSTAMP); + SKBTX_HW_TSTAMP_NOBPF); case SCM_TSTAMP_ACK: return TCP_SKB_CB(skb)->txstamp_ack; } @@ -5567,9 +5567,7 @@ static void skb_tstamp_tx_report_bpf_timestamping(struct sk_buff *skb, op = BPF_SOCK_OPS_TS_SCHED_OPT_CB; break; case SCM_TSTAMP_SND: - if (!sw) - return; - op = BPF_SOCK_OPS_TS_SW_OPT_CB; + op = sw ? BPF_SOCK_OPS_TS_SW_OPT_CB : BPF_SOCK_OPS_TS_HW_OPT_CB; break; default: return; diff --git a/net/dsa/user.c b/net/dsa/user.c index 291ab1b4acc4..794fe553dd77 100644 --- a/net/dsa/user.c +++ b/net/dsa/user.c @@ -897,7 +897,7 @@ static void dsa_skb_tx_timestamp(struct dsa_user_priv *p, { struct dsa_switch *ds = p->dp->ds; - if (!(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) + if (!(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP_NOBPF)) return; if (!ds->ops->port_txtstamp) diff --git a/net/socket.c b/net/socket.c index 262a28b59c7f..517de433d4bb 100644 --- a/net/socket.c +++ b/net/socket.c @@ -676,7 +676,7 @@ void __sock_tx_timestamp(__u32 tsflags, __u8 *tx_flags) u8 flags = *tx_flags; if (tsflags & SOF_TIMESTAMPING_TX_HARDWARE) { - flags |= SKBTX_HW_TSTAMP; + flags |= SKBTX_HW_TSTAMP_NOBPF; /* PTP hardware clocks can provide a free running cycle counter * as a time base for virtual clocks. Tell driver to use the diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 9bd1c7c77b17..7b9652ce7e3c 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -7033,6 +7033,10 @@ enum { * to the nic when SK_BPF_CB_TX_TIMESTAMPING * feature is on. */ + BPF_SOCK_OPS_TS_HW_OPT_CB, /* Called in hardware phase when + * SK_BPF_CB_TX_TIMESTAMPING feature + * is on. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect From patchwork Sat Feb 8 10:32:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966360 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE0FB1B041F; Sat, 8 Feb 2025 10:33:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010798; cv=none; b=FwokpeaWJpI1tbNXhikftzJMkHwAXt7Us4tC4WmZKbaYF+R9/Uyve6dKrZVJLC5cKJv1TByO1pBsTXxN48Ip/F57tphL6+O6OodcSg7Z3hqEGeJ6AVLDkoZ/pm24Et5UpEPh6rjcCGqHJ4TtNUXc1cSVbwKpvBsKMKxkQNhbqFI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010798; c=relaxed/simple; bh=qgsv1VqKjRs+Ff0Exskc85JfkVurnlKkg4zVvXfcb2I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VjNzo9HfjOo1fP2yptq3jNUjPrZLojznizspA4pXEGCCL74aBhEu9kwedRLDaSTMTzbhBk7Hl8VHts6vXuVcQWvRGaFtW8b6TwERzQuQx12kpBREMgNj8GpAEMRFQwgSx5pU8vZchisr6YOs56k3xVLHmANO9WE1KOm1ESWkcWA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NVQ29rh0; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NVQ29rh0" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-21f4500a5c3so51602015ad.3; Sat, 08 Feb 2025 02:33:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010796; x=1739615596; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1qhv0JTaoXaPlF6nnBulWKhjTUAKBoxL0OOJBGDySDA=; b=NVQ29rh0/tB02882zs2Y99m6CL5O0Iw9SxovxUFDxMI0wj7bw6Zwj2limnQwqBl9dm wvbqon5sSgxoYPI/pYcxnxqV+kDa0WXbGvazre24WHl1nRmHGAFt0kJlKhuo4gpVmt1Z rtOaXiB6QrQKeyt9lPBrJ3JLqjtARwf33BzGpxr7090x+KLnRzpDLA57NOh3+O7GDV/a C5TqO1k5Vg2MwLptjpzaBtMvGiggkiYWSTMkoobdWI+ZTeHL0RxfxZ3XorBmqmq+5evT ZGp8MU41k6UJnNXedM2FAxuCFa10Qq5r7Ww+29VYId8OfBMGcjSR1fbaRuncf3YOtFMC zUZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010796; x=1739615596; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1qhv0JTaoXaPlF6nnBulWKhjTUAKBoxL0OOJBGDySDA=; b=C1VZ14sEZX8QrYW5Eb4EEwIo6xaVaCaf+wGY3QHiU2ZvQQvbzrgs97vOErGVvD2OMe bHS8G/ZlvEhiX0xGfB09eqvuS/GHoKFwV5wmlCX2wm8GsF4OHxSq+fbdqrP3JIqUhUw2 I6kUZTgXW6AtAE1whki1S5hYEND3oculDKOEPeI1A3tEd0stOCgOQFeaJglwhDpLZbgr ZCMi6kjnlEJQun2n/uBY7lZsOlhGauRAeBPp/ou4IrNanW9bqawIhvuz5CINuzbru9Nz T7JqQa07o9S2YE6bgB0RQ+Ouv8lNVmsq5BywNybyYrS2aYMVdWHk/FiYPn70ou/HxO7y erAQ== X-Forwarded-Encrypted: i=1; AJvYcCVdQSXGIiGOSseyh5BQCjnEXxvP2GJV118eQVo8ofpLtRRQneA1AgtBbL2BpOE7thP6gFgHQ7g=@vger.kernel.org X-Gm-Message-State: AOJu0Yyqo2fYnTZQg5GNNg4XUUhBhz/Qji+XCPhhLwVR0qGSf055m//e IEsbT2cPuh040Q05KQwwhoxr9uuqgl0N6Xluu9fNTSz5B0T45EWLHZ1JH9jZRUY= X-Gm-Gg: ASbGncvlz0fZ0DHNwNfJruCHJwogb5qDmJISETjSolIbNM+JXYir9x55kY6w+xxpEnW 7uNvTi3UCog/FUzCDr5cu5YdWgJm3sE740MCah66d2IZcCJx4RWbrosWeWB9bVPEdlAeEUSG7nL QCaDNnKsLkfTo6DcLq9v3dUhVz6j9Bgm2QpUm+pNiJ64aIg29snYU5yNVq+7U1V5H7bhDUD2/3/ oI7yOmbNXbFqRW++rQt5+DBSj5/FSMaJf83DLK2BRHmiUznKvigel9r4psZWwxUgvL9/KH7rkaD 0QJdD52q91L476O6RxDLwN624X+OWJRwEaB9hx+muuBDgN6IUA59Mw== X-Google-Smtp-Source: AGHT+IHb9WdZ1K55BL0VgR1gV0QW7f7s0aNeNML6KRctipBIoqhHel2eFO1uKVvgQi23DRl6r9R/mg== X-Received: by 2002:a17:902:d2cb:b0:21f:60cd:e8b with SMTP id d9443c01a7336-21f60cd2b67mr65273465ad.14.1739010795926; Sat, 08 Feb 2025 02:33:15 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.33.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:33:15 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 09/12] bpf: support SCM_TSTAMP_ACK of SO_TIMESTAMPING Date: Sat, 8 Feb 2025 18:32:17 +0800 Message-Id: <20250208103220.72294-10-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Support the ACK timestamp case. Extend txstamp_ack to two bits: 1 stands for SO_TIMESTAMPING mode, 2 bpf extension. The latter will be used later. Signed-off-by: Jason Xing --- include/net/tcp.h | 4 ++-- include/uapi/linux/bpf.h | 5 +++++ net/core/skbuff.c | 5 ++++- tools/include/uapi/linux/bpf.h | 5 +++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index 4c4dca59352b..ef30f3605e04 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -958,10 +958,10 @@ struct tcp_skb_cb { __u8 sacked; /* State flags for SACK. */ __u8 ip_dsfield; /* IPv4 tos or IPv6 dsfield */ - __u8 txstamp_ack:1, /* Record TX timestamp for ack? */ + __u8 txstamp_ack:2, /* Record TX timestamp for ack? */ eor:1, /* Is skb MSG_EOR marked? */ has_rxtstamp:1, /* SKB has a RX timestamp */ - unused:5; + unused:4; __u32 ack_seq; /* Sequence number ACK'd */ union { struct { diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index e71a9b53e7bc..c04e788125a7 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -7044,6 +7044,11 @@ enum { * SK_BPF_CB_TX_TIMESTAMPING feature * is on. */ + BPF_SOCK_OPS_TS_ACK_OPT_CB, /* Called when all the skbs in the + * same sendmsg call are acked + * when SK_BPF_CB_TX_TIMESTAMPING + * feature is on. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect diff --git a/net/core/skbuff.c b/net/core/skbuff.c index ca1ba4252ca5..c0f4d6f6583d 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5549,7 +5549,7 @@ static bool skb_tstamp_tx_report_so_timestamping(struct sk_buff *skb, return skb_shinfo(skb)->tx_flags & (sw ? SKBTX_SW_TSTAMP : SKBTX_HW_TSTAMP_NOBPF); case SCM_TSTAMP_ACK: - return TCP_SKB_CB(skb)->txstamp_ack; + return TCP_SKB_CB(skb)->txstamp_ack == 1; } return false; @@ -5569,6 +5569,9 @@ static void skb_tstamp_tx_report_bpf_timestamping(struct sk_buff *skb, case SCM_TSTAMP_SND: op = sw ? BPF_SOCK_OPS_TS_SW_OPT_CB : BPF_SOCK_OPS_TS_HW_OPT_CB; break; + case SCM_TSTAMP_ACK: + op = BPF_SOCK_OPS_TS_ACK_OPT_CB; + break; default: return; } diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 7b9652ce7e3c..d3e2988b3b4c 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -7037,6 +7037,11 @@ enum { * SK_BPF_CB_TX_TIMESTAMPING feature * is on. */ + BPF_SOCK_OPS_TS_ACK_OPT_CB, /* Called when all the skbs in the + * same sendmsg call are acked + * when SK_BPF_CB_TX_TIMESTAMPING + * feature is on. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect From patchwork Sat Feb 8 10:32:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966361 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BF8B41B0F11; Sat, 8 Feb 2025 10:33:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010803; cv=none; b=FSgrK3ML3+j+I+spO1dlS9FtIlEWQVow1VPRwQxPb0+9H8GmPPxzfElGRNuLiz2dM2K3pnRmyF6lm7spzNieJXgPpCVodYtSPWPK8XdWgoloGOkRfRujurT8y2RVj6mPMfgG8xT6ysZiZ/voC4drjSlFHx4mYrB8gYwneGp5r/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010803; c=relaxed/simple; bh=WY8yUDz7yc8gviHSfkBQwlWcLRw//ShDhYG8DXRFLV8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IQ/A+HLR1KTsJuV40XoArHDxDh+M8JO1F+JJgZ7k4Rrm3mcG2Nh+WwFEJuqEHdxfG7bpHSnbLCV06JRONXbnRHgDMxVO+qgMImePs/M/MfNFOsGaparc/R1SnS6ofo8yquQo2LZn1Tryz0M5TyuvGSEvBWxWYAEf5YhnUQ/L/FA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dCaj6jRX; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dCaj6jRX" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-21f6d264221so3470005ad.1; Sat, 08 Feb 2025 02:33:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010801; x=1739615601; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AknKlNj2i8ni4+T0IaTF/FB2qHRc7HV6m3tejtC5b0w=; b=dCaj6jRXisQTP5R3pK8gdVoasqyNz7oO3r0e+E3+zTnRXOjdIr2leBwdVTl/i554V+ Nx2VIJ5KPcUXLAMYE5ba7sd/PvjaoQG8Edn3XzUr7b5AMUr7mWxZtVGRu8W3ZNmLQNUX 5rlSfY0fT1lUro114Rg5LvqcHDPeKX/cwM+shK9f+8IFtjNL7QPDICx2G1DBWWfskJmg 6sQEAWMARkD5GCEYlxjL6bg+CUf7hL7Gfs3luFxOlCsmSAf+Xcsl/2McsVnj6yeRsbY+ EcTDuiK7KkWRAYwYiZUL+KxHWiMfBWLdXTDKFMG2hhmUlvUhGSi2Fj1hYEv16hzReuD8 qFEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010801; x=1739615601; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AknKlNj2i8ni4+T0IaTF/FB2qHRc7HV6m3tejtC5b0w=; b=GYM13aikQ/VhLPXoLyoKE4Vm4PTjJGkWADPTR82k2g8jez9NDky2dBW9BYnE0omS/F zxEcSz5lhJAPHyYsF/H+QIhBuRQCFdZEmaH8D3Ia5N+cvvmYwsSNGdVgrKqqFvzFOGWH uyM0OEz/OnxMtV/tEI+9nMNNPhbE3PVl8F/Pyvomh9FYg7BpbpPPueRJW6qZqoZP+cuz pPVcGWrSn2recvXO+BRa6obV0CrVVJgfJGlKxsILTjZEvD3LESsvUbWbbfUG8WIDi2v4 Nfs62pffLGiKAVIB2P5a9mt+8EeL2DAnjCEUjLavUM+ZSV72EJpwH9VYzlkAorL9c5r5 bTfw== X-Forwarded-Encrypted: i=1; AJvYcCX5e99daPhnqPOx8X21mUsRVzbuyzdG4+X03mOHy6Ju51y/r3cuY/wDeHzy+vbenmdd4EWXoX0=@vger.kernel.org X-Gm-Message-State: AOJu0YzW9ov0Cuhg7/pONIYQ7EwP37VxkH1Y3UpcrcU2EGGWZOUAtSz8 KElPHd+cZNJFu44TGYTEm6/BOuqTSyuubSCB1yBPkSJGkBHUqF2d X-Gm-Gg: ASbGncuxlaZSTz6dNCjulVbptFlEtmeb7aYGad3FwnLkeAtru4mhO8Yukp1VdW4INri FOXo6RLIFHCPNZoiLG50kE3zm5giFIhdBLBzGOsDAA53RooMi9ZAhHbF6wfAZG/bVrc/ymMS7Bs K/X/ADmUkSZzJiFT8Af6rZIPmrh6voMUhMawbdY1V5B9ynI9E+bun18m6BKJXNHxK/gW8P8lz63 j30Y9YUAxXBpUJEVu3Y+CXaNMd3DY2eZntvKfUB/bMVtyOqT0okRpT66LYsAz6MBJvrpg8w9Pvp PbVlpfsY/lyqeJsKFyLOLYIHti5mUOV5RgNgoZsQ+2grt3BuSiyRAA== X-Google-Smtp-Source: AGHT+IFc7ayT+TxLuuHRzy+mhlKx59C4tK3K9Q+Km5PSRdVV3s8dlXlnf6nxBFOXACG+ohYfbRVO7w== X-Received: by 2002:a17:902:cccb:b0:215:7446:2151 with SMTP id d9443c01a7336-21f4e1ce6cemr125558075ad.4.1739010801117; Sat, 08 Feb 2025 02:33:21 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.33.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:33:20 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 10/12] bpf: add a new callback in tcp_tx_timestamp() Date: Sat, 8 Feb 2025 18:32:18 +0800 Message-Id: <20250208103220.72294-11-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Introduce the callback to correlate tcp_sendmsg timestamp with other points, like SND/SW/ACK. For instance, let bpf prog trace the beginning of tcp_sendmsg_locked() and then store the sendmsg timestamp at the bpf_sk_storage, so that in tcp_tx_timestamp() we can correlate the timestamp with tskey which can be found in other sending points. More details can be found in the selftest. Signed-off-by: Jason Xing --- include/uapi/linux/bpf.h | 5 +++++ net/ipv4/tcp.c | 4 ++++ tools/include/uapi/linux/bpf.h | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index c04e788125a7..7b1a7dd68c0d 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -7049,6 +7049,11 @@ enum { * when SK_BPF_CB_TX_TIMESTAMPING * feature is on. */ + BPF_SOCK_OPS_TS_SND_CB, /* Called when every sendmsg syscall + * is triggered. It's used to correlate + * sendmsg timestamp with corresponding + * tskey. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 0d704bda6c41..4895d7a6327b 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -492,6 +492,10 @@ static void tcp_tx_timestamp(struct sock *sk, struct sockcm_cookie *sockc) if (tsflags & SOF_TIMESTAMPING_TX_RECORD_MASK) shinfo->tskey = TCP_SKB_CB(skb)->seq + skb->len - 1; } + + if (cgroup_bpf_enabled(CGROUP_SOCK_OPS) && + SK_BPF_CB_FLAG_TEST(sk, SK_BPF_CB_TX_TIMESTAMPING) && skb) + bpf_skops_tx_timestamping(sk, skb, BPF_SOCK_OPS_TS_SND_CB); } static bool tcp_stream_is_readable(struct sock *sk, int target) diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index d3e2988b3b4c..2739ee0154a0 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -7042,6 +7042,11 @@ enum { * when SK_BPF_CB_TX_TIMESTAMPING * feature is on. */ + BPF_SOCK_OPS_TS_SND_CB, /* Called when every sendmsg syscall + * is triggered. It's used to correlate + * sendmsg timestamp with corresponding + * tskey. + */ }; /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect From patchwork Sat Feb 8 10:32:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966362 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E5C551B392B; Sat, 8 Feb 2025 10:33:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010808; cv=none; b=eT2rgBq0Nou6NWkCUAlbybIIG4WJQsj27XdzctgeibixLSIjoCEeDRV7AB9/KREqHFcquyX0tpOuqpuAtOaky1rg0xG2Z9WRXtCADqpwjWSPZSXdU1ykoGO25X2NxA2OIMRz44cist5xf0iQ2mk+RpmJLVGo2/50yE1WHlTHejc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010808; c=relaxed/simple; bh=rQhkzZC0XwepZLpR15aNKbaCjAhsCesfAKmrbNdL94Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=OHq/hxC/rGqTN+rR4QZ0xkm2EMUMIH+5jdqXx62RvtZj/hkmSp5e/DIn76p8TuHoAV1cicFRM63RT57+Y/QU5VkWbi7LhARhUFdwBfPcB/WK8EGvwmMegZxewbw1L+0mt57GGIwjzx1qgNyem16NqU0Q9uoCfKtuVRQ1iJPbDb0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=a+qOeDWh; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="a+qOeDWh" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-21f49bd087cso33258525ad.0; Sat, 08 Feb 2025 02:33:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010806; x=1739615606; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jZ/kKM4K/pezqgv9p+bZB0MGsAMTBtR8FE1S3tCeUM8=; b=a+qOeDWhPr5sSmqKbPP8w9g3qFnqEvYsR/CFzWjT1/hIK/bR5+X1bYpGYdLtc8j7qd QzTA/cyCtnEUbW99Qr2ze53Qp24so+3+HVMbUQTSGWGRT01z4idnJ5hmd+dqP7umgKIY g3Av9KmoaVgJY780UfFmqTQcANtI3eZKyjYtcZC8lw5LDHaBRraptyw/S+pbLWTL7e+G cYyKwTxWwh/e3nX4UsrP5X6hS5pitN/QAHHXcf96SmIwbDKHBOrOo5WqbBCiZhYy6z2l t+acT3MSherift6OBXm8aLEW5CePYvxAqE2YyBy1MCDXD5xgFUbDvsP1DbdpXlFfcf0s VFmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010806; x=1739615606; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jZ/kKM4K/pezqgv9p+bZB0MGsAMTBtR8FE1S3tCeUM8=; b=rL33IJopZlShuK8jQed2YxzLiOWIi6lB8S+ru5RdhXrah//jAKeEn7uXB1iN8gopxW 19muGuUQNgKmd1WEGITpvKhZiVzKsBunOBjqHvhepldWFvBLp4jneLeJyQWzkLPjfx75 eWDPwCpzY9KZrEvzvKfKbed/6F9D97jvK9C3RAEWhVmKWmAFDptEkuYmykeEIftTg5s2 jGLjYDKly1PG+hCJhU+F4PPkBC1phcDqPanJ4HaMuoxnobKGIInHH/rUPFIh6JLRkUOb 709M+CawJgRNqvzb0pApqPIO6o9qzCFVG4yvZM4CTeXuYlo8eoxJCdL1b8E6J3cGnqc0 NPqQ== X-Forwarded-Encrypted: i=1; AJvYcCVn0rSd7yQ22NxVSDBxrfGYL2rqmwNc48dGuXoLTuAhpr9IWoDWxqJSUzAozIP5nTnswaTCcQc=@vger.kernel.org X-Gm-Message-State: AOJu0YyXVtglMn+YXl85SogzddFOspQePlSax3rqieb3vu0567pVId7G rZ/2gOQWPynA6hU7XaGbEvQ+M4S2iUfBqxUvXeUm1zH1EdcBmapL X-Gm-Gg: ASbGncuiXrlahs6B2OdMuvt/9ErYU0k3vB1npa0bUhUU+UIFaPfDxzlHwzebQm0tW5G c0tcVFVWCJTGQeZwoun/cZ4b1Wz5g0p5cIDmt7MIeleoa4hDMJ1cArNpdv0hq/VfSWEzXKXl8BZ gXdfVpXNG8xFzjJQWwTk2c/GkS+JzWqfgWB51Tj0ve6rGBaSPveCM/YuuSINohlfsWUQcMwAPt+ Oz7xpH3jPljQd1fP5RJTbBOqdzeMXOIFGYgAn4Ads361H66jP8vLa5mI5tJEfWT9LdNyraT4FyZ EQBvBI9UH5ErRG/zI6lbSX8MiMYeou48kZbHuXK+2msgH31pytknOQ== X-Google-Smtp-Source: AGHT+IH6V2ZaQtGEJ9gkdP+GjNe/hzcgfocw9H3auyhUiwNYHTtVkwPh+GJiWZLjgu5vKphZzylK0Q== X-Received: by 2002:a17:902:e943:b0:216:6901:d588 with SMTP id d9443c01a7336-21f4e6afb39mr107336875ad.15.1739010806205; Sat, 08 Feb 2025 02:33:26 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.33.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:33:25 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 11/12] bpf: support selective sampling for bpf timestamping Date: Sat, 8 Feb 2025 18:32:19 +0800 Message-Id: <20250208103220.72294-12-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Use __bpf_kfunc feature to allow bpf prog dynamically and selectively to sample/track the skb. For example, the bpf prog will limit tracking X numbers of packets and then will stop there instead of tracing all the sendmsgs of matched flow all along. Signed-off-by: Jason Xing --- kernel/bpf/btf.c | 1 + net/core/filter.c | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 8396ce1d0fba..a65e2eeffb88 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -8535,6 +8535,7 @@ static int bpf_prog_type_to_kfunc_hook(enum bpf_prog_type prog_type) case BPF_PROG_TYPE_CGROUP_SOCK_ADDR: case BPF_PROG_TYPE_CGROUP_SOCKOPT: case BPF_PROG_TYPE_CGROUP_SYSCTL: + case BPF_PROG_TYPE_SOCK_OPS: return BTF_KFUNC_HOOK_CGROUP; case BPF_PROG_TYPE_SCHED_ACT: return BTF_KFUNC_HOOK_SCHED_ACT; diff --git a/net/core/filter.c b/net/core/filter.c index 7f56d0bbeb00..db20a947e757 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -12102,6 +12102,21 @@ __bpf_kfunc int bpf_sk_assign_tcp_reqsk(struct __sk_buff *s, struct sock *sk, #endif } +__bpf_kfunc int bpf_sock_ops_enable_tx_tstamp(struct bpf_sock_ops_kern *skops) +{ + struct sk_buff *skb; + + if (skops->op != BPF_SOCK_OPS_TS_SND_CB) + return -EOPNOTSUPP; + + skb = skops->skb; + TCP_SKB_CB(skb)->txstamp_ack = 2; + skb_shinfo(skb)->tx_flags |= SKBTX_BPF; + skb_shinfo(skb)->tskey = TCP_SKB_CB(skb)->seq + skb->len - 1; + + return 0; +} + __bpf_kfunc_end_defs(); int bpf_dynptr_from_skb_rdonly(struct __sk_buff *skb, u64 flags, @@ -12135,6 +12150,10 @@ BTF_KFUNCS_START(bpf_kfunc_check_set_tcp_reqsk) BTF_ID_FLAGS(func, bpf_sk_assign_tcp_reqsk, KF_TRUSTED_ARGS) BTF_KFUNCS_END(bpf_kfunc_check_set_tcp_reqsk) +BTF_KFUNCS_START(bpf_kfunc_check_set_sock_ops) +BTF_ID_FLAGS(func, bpf_sock_ops_enable_tx_tstamp, KF_TRUSTED_ARGS) +BTF_KFUNCS_END(bpf_kfunc_check_set_sock_ops) + static const struct btf_kfunc_id_set bpf_kfunc_set_skb = { .owner = THIS_MODULE, .set = &bpf_kfunc_check_set_skb, @@ -12155,6 +12174,11 @@ static const struct btf_kfunc_id_set bpf_kfunc_set_tcp_reqsk = { .set = &bpf_kfunc_check_set_tcp_reqsk, }; +static const struct btf_kfunc_id_set bpf_kfunc_set_sock_ops = { + .owner = THIS_MODULE, + .set = &bpf_kfunc_check_set_sock_ops, +}; + static int __init bpf_kfunc_init(void) { int ret; @@ -12173,7 +12197,8 @@ static int __init bpf_kfunc_init(void) ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_XDP, &bpf_kfunc_set_xdp); ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_CGROUP_SOCK_ADDR, &bpf_kfunc_set_sock_addr); - return ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_SCHED_CLS, &bpf_kfunc_set_tcp_reqsk); + ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_SCHED_CLS, &bpf_kfunc_set_tcp_reqsk); + return ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_SOCK_OPS, &bpf_kfunc_set_sock_ops); } late_initcall(bpf_kfunc_init); From patchwork Sat Feb 8 10:32:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Xing X-Patchwork-Id: 13966363 X-Patchwork-Delegate: bpf@iogearbox.net Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 310E37DA8C; Sat, 8 Feb 2025 10:33:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010813; cv=none; b=qO91JiUk3B4tUnZ+SYMLJkcMGeiJBjeMZkU5Yhuqmqetvmtk8v3dkTfOgBFaCEqQl5z39yISq3Vab18RMKuSLBDP4rHqo9hOYdmwOo85ukDFGdPln+Fct1nfuPtG5MktREtKLlaQUGmGMLueZCJCoAz4JN34QeJgP/Jmbsg0da0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739010813; c=relaxed/simple; bh=dlSRdpt2ITUSt5diLpEoyrE1DpZZ8Oi8bS8bS6JqHC0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=g3dSLtA0mHCPra289vdyB+O1rocfK86x8iN/aeJDGv9pStPk4Bi571kgAVr8GjL7uIB9V53Yguk4jaaurrLPl2JcB/R1xq627MaSdOirPr+EPZMFGmmzyZ0mJVH5KVzu6in6V/usXcTx0CFhmYkKjYP92C/Hl5EQK4S8GQVD7Bo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ecc0Qo8a; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ecc0Qo8a" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-21f6a47d617so6908825ad.2; Sat, 08 Feb 2025 02:33:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739010811; x=1739615611; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=trnKcvL/7ZWLD7eydlcY8QHFZw3zVQLPacf8LkGaFu8=; b=ecc0Qo8agJZlh2t3WSY+lT5HeOAZ1moQsdbZJbu9PEBYFAPAz5UVZZNE1BAhXlqbSD YfAfiUW0z7yaFtHajO5fLmeQfy3/ZJNbgZ9E22Erc3IsUfAwY4UPkZhrt0H2MMvq6Jif QF0H6MZQ45MYEhcu5qdvbyNm4mXw8HeJQKp9lceeJ6L/RefrvnMPRr825NhiynZTmDrc XDFRxT4TtPuAuBu03IHhEZD1sHwZ4gEc0hEc++nsus2f23pu28yxg+SyzE+hQN0CIKCk C6ig+6Q7wKtDr2AiSuw51MfsDdDsmTLsvtrNQeaC637PsUgUWF6DdZwvcChHjozwCs3t krOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739010811; x=1739615611; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=trnKcvL/7ZWLD7eydlcY8QHFZw3zVQLPacf8LkGaFu8=; b=I3M3Dn5GV0cMSr/CMgXMDUkRgdL+IKNZbaZQOobID1S8a3BryCQIVKIM3P/4wwp/0d IQW20N/NuVb3g8vbQO4dqWX0uDfhDH9RppOz6ZJCtr8+BV+VK068zE0g5Yjd5DqqOrWj zss5RcD9mzosO7/8845yn/gKAeJ1Qvmxso8YLgbR0NbDXUXlode4rB2gcdF0zm64kg8n bJSSlsYB40L1pHSOUc2/LjRF3lI2oplwL+PATuPDV8RKWNyXEAsbtdRBLEXY1zXYH9QB 7TQUVNFyGnUCwvITNPwQc3WEjsqUo+O1Fd6Xj07Wt22GZdLmPDhtjgUuPofRIgc66ptA ahGg== X-Forwarded-Encrypted: i=1; AJvYcCVD6WC6eF+IA+nOD3RpiBbtRkXDG32XV0f3mWOu5YbLYDGDhmi/ZKVFtHkNC2YAIAuztifYZkc=@vger.kernel.org X-Gm-Message-State: AOJu0YxpP8Nhz6Vk5PDfuEHLboFRegXpE+UYQ0MU6vZUF/3VfuNERJEM FaeSLV3kMOwh17TmI/+dFCvDVqaMAr5Z3A5iITXzlRaQ8Z4MCpxs X-Gm-Gg: ASbGncuRyFuNQwpWUhGE21fKdQt93r6BHD2wKg7rbvd44sWXENDd59XYnIci+sJ68aD Ne+PXD33pUE1d0/Rh4UtgrSOII+qqS0WhGG63wr27AuQ7l4vWnIyo8lKJrlUy8KM+ld6TdWFH7a ptG0hIGoWMI8n9vp30vlPCF/NjmqRr0HDDEb9i3l+Rex3NgI/BSFKzZ4Iz9cAF2IOWcOUMXpVR8 yl6SE4711WixFALBjOhmmaUmTvO2kBIGIORfJLf/6X+c+710nm2oW0A0IAZVphNCZzHx0wnmvDX mxn0uxpVDYvcPkwrCaaTq1fEGmRBny2jm2MWLK6jHCn4W37780dNTg== X-Google-Smtp-Source: AGHT+IEtkPAboRQ7FDT6VZmfM+tfR2H0lM2xM0ZY77w9cllZvXrLbM26Hcb8B4VW7agd5x8dCVkmnw== X-Received: by 2002:a17:903:234e:b0:216:4883:fb43 with SMTP id d9443c01a7336-21f4e7594e5mr114626615ad.32.1739010811311; Sat, 08 Feb 2025 02:33:31 -0800 (PST) Received: from KERNELXING-MC1.tencent.com ([111.201.25.167]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21f3653af58sm44527835ad.70.2025.02.08.02.33.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Feb 2025 02:33:30 -0800 (PST) From: Jason Xing To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, dsahern@kernel.org, willemdebruijn.kernel@gmail.com, willemb@google.com, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, horms@kernel.org Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, Jason Xing Subject: [PATCH bpf-next v9 12/12] selftests/bpf: add simple bpf tests in the tx path for timestamping feature Date: Sat, 8 Feb 2025 18:32:20 +0800 Message-Id: <20250208103220.72294-13-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250208103220.72294-1-kerneljasonxing@gmail.com> References: <20250208103220.72294-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net Bpf prog calculates a couple of latency delta between each tx points which SO_TIMESTAMPING feature has already implemented. It can be used in the real world to diagnose the behaviour in the tx path. Also, check the safety issues by accessing a few bpf calls in bpf_test_access_bpf_calls(). There remains a few realistic things[1][2] to highlight: 1. in general a packet may pass through multiple qdiscs. For instance with bonding or tunnel virtual devices in the egress path. 2. packets may be resent, in which case an ACK might precede a repeat SCHED and SND. 3. erroneous or malicious peers may also just never send an ACK. [1]: https://lore.kernel.org/all/67a389af981b0_14e0832949d@willemb.c.googlers.com.notmuch/ [2]: https://lore.kernel.org/all/c329a0c1-239b-4ca1-91f2-cb30b8dd2f6a@linux.dev/ Signed-off-by: Jason Xing --- .../bpf/prog_tests/so_timestamping.c | 79 +++++ .../selftests/bpf/progs/so_timestamping.c | 312 ++++++++++++++++++ 2 files changed, 391 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/so_timestamping.c create mode 100644 tools/testing/selftests/bpf/progs/so_timestamping.c diff --git a/tools/testing/selftests/bpf/prog_tests/so_timestamping.c b/tools/testing/selftests/bpf/prog_tests/so_timestamping.c new file mode 100644 index 000000000000..1829f93bc52e --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/so_timestamping.c @@ -0,0 +1,79 @@ +#include "test_progs.h" +#include "network_helpers.h" + +#include "so_timestamping.skel.h" + +#define CG_NAME "/so-timestamping-test" + +static const char addr4_str[] = "127.0.0.1"; +static const char addr6_str[] = "::1"; +static struct so_timestamping *skel; + +static void test_tcp(int family) +{ + struct so_timestamping__bss *bss = skel->bss; + char buf[] = "testing testing"; + int sfd = -1, cfd = -1; + int n; + + memset(bss, 0, sizeof(*bss)); + + sfd = start_server(family, SOCK_STREAM, + family == AF_INET6 ? addr6_str : addr4_str, 0, 0); + if (!ASSERT_OK_FD(sfd, "start_server")) + goto out; + + cfd = connect_to_fd(sfd, 0); + if (!ASSERT_OK_FD(cfd, "connect_to_fd_server")) + goto out; + + n = write(cfd, buf, sizeof(buf)); + if (!ASSERT_EQ(n, sizeof(buf), "send to server")) + goto out; + + ASSERT_EQ(bss->nr_active, 1, "nr_active"); + ASSERT_EQ(bss->nr_snd, 2, "nr_snd"); + ASSERT_EQ(bss->nr_sched, 1, "nr_sched"); + ASSERT_EQ(bss->nr_txsw, 1, "nr_txsw"); + ASSERT_EQ(bss->nr_ack, 1, "nr_ack"); + +out: + if (sfd >= 0) + close(sfd); + if (cfd >= 0) + close(cfd); +} + +void test_so_timestamping(void) +{ + struct netns_obj *ns; + int cg_fd; + + cg_fd = test__join_cgroup(CG_NAME); + if (!ASSERT_OK_FD(cg_fd, "join cgroup")) + return; + + ns = netns_new("so_timestamping_ns", true); + if (!ASSERT_OK_PTR(ns, "create ns")) + goto done; + + skel = so_timestamping__open_and_load(); + if (!ASSERT_OK_PTR(skel, "open and load skel")) + goto done; + + if (!ASSERT_OK(so_timestamping__attach(skel), "attach skel")) + goto done; + + skel->links.skops_sockopt = + bpf_program__attach_cgroup(skel->progs.skops_sockopt, cg_fd); + if (!ASSERT_OK_PTR(skel->links.skops_sockopt, "attach cgroup")) + goto done; + + test_tcp(AF_INET6); + test_tcp(AF_INET); + +done: + so_timestamping__destroy(skel); + netns_free(ns); + close(cg_fd); +} diff --git a/tools/testing/selftests/bpf/progs/so_timestamping.c b/tools/testing/selftests/bpf/progs/so_timestamping.c new file mode 100644 index 000000000000..4974552cdecb --- /dev/null +++ b/tools/testing/selftests/bpf/progs/so_timestamping.c @@ -0,0 +1,312 @@ +#include "vmlinux.h" +#include "bpf_tracing_net.h" +#include +#include +#include "bpf_misc.h" +#include "bpf_kfuncs.h" +#define BPF_PROG_TEST_TCP_HDR_OPTIONS +#include "test_tcp_hdr_options.h" +#include + +#define SK_BPF_CB_FLAGS 1009 +#define SK_BPF_CB_TX_TIMESTAMPING 1 + +int nr_active; +int nr_snd; +int nr_passive; +int nr_sched; +int nr_txsw; +int nr_ack; + +struct sockopt_test { + int opt; + int new; +}; + +static const struct sockopt_test sol_socket_tests[] = { + { .opt = SK_BPF_CB_FLAGS, .new = SK_BPF_CB_TX_TIMESTAMPING, }, + { .opt = 0, }, +}; + +struct loop_ctx { + void *ctx; + const struct sock *sk; +}; + +struct sk_stg { + __u64 sendmsg_ns; /* record ts when sendmsg is called */ +}; + +struct sk_tskey { + u64 cookie; + u32 tskey; +}; + +struct delay_info { + u64 sendmsg_ns; /* record ts when sendmsg is called */ + u32 sched_delay; /* SCHED_OPT_CB - sendmsg_ns */ + u32 sw_snd_delay; /* SW_OPT_CB - SCHED_OPT_CB */ + u32 ack_delay; /* ACK_OPT_CB - SW_OPT_CB */ +}; + +struct { + __uint(type, BPF_MAP_TYPE_SK_STORAGE); + __uint(map_flags, BPF_F_NO_PREALLOC); + __type(key, int); + __type(value, struct sk_stg); +} sk_stg_map SEC(".maps"); + +struct { + __uint(type, BPF_MAP_TYPE_HASH); + __type(key, struct sk_tskey); + __type(value, struct delay_info); + __uint(max_entries, 1024); +} time_map SEC(".maps"); + +static u64 delay_tolerance_nsec = 10000000000; /* 10 second as an example */ + +extern int bpf_sock_ops_enable_tx_tstamp(struct bpf_sock_ops_kern *skops) __ksym; + +static int bpf_test_sockopt_int(void *ctx, const struct sock *sk, + const struct sockopt_test *t, + int level) +{ + int new, opt, tmp; + + opt = t->opt; + new = t->new; + + if (bpf_setsockopt(ctx, level, opt, &new, sizeof(new))) + return 1; + + if (bpf_getsockopt(ctx, level, opt, &tmp, sizeof(tmp)) || + tmp != new) + return 1; + + return 0; +} + +static int bpf_test_socket_sockopt(__u32 i, struct loop_ctx *lc) +{ + const struct sockopt_test *t; + + if (i >= ARRAY_SIZE(sol_socket_tests)) + return 1; + + t = &sol_socket_tests[i]; + if (!t->opt) + return 1; + + return bpf_test_sockopt_int(lc->ctx, lc->sk, t, SOL_SOCKET); +} + +static int bpf_test_sockopt(void *ctx, const struct sock *sk) +{ + struct loop_ctx lc = { .ctx = ctx, .sk = sk, }; + int n; + + n = bpf_loop(ARRAY_SIZE(sol_socket_tests), bpf_test_socket_sockopt, &lc, 0); + if (n != ARRAY_SIZE(sol_socket_tests)) + return -1; + + return 0; +} + +static bool bpf_test_access_sockopt(void *ctx) +{ + const struct sockopt_test *t; + int tmp, ret, i = 0; + int level = SOL_SOCKET; + + t = &sol_socket_tests[i]; + + for (; t->opt;) { + ret = bpf_setsockopt(ctx, level, t->opt, (void *)&t->new, sizeof(t->new)); + if (ret != -EOPNOTSUPP) + return true; + + ret = bpf_getsockopt(ctx, level, t->opt, &tmp, sizeof(tmp)); + if (ret != -EOPNOTSUPP) + return true; + + if (++i >= ARRAY_SIZE(sol_socket_tests)) + break; + } + + return false; +} + +/* Adding a simple test to see if we can get an expected value */ +static bool bpf_test_access_load_hdr_opt(struct bpf_sock_ops *skops) +{ + struct tcp_opt reg_opt; + int load_flags = 0; + int ret; + + reg_opt.kind = TCPOPT_EXP; + reg_opt.len = 0; + reg_opt.data32 = 0; + ret = bpf_load_hdr_opt(skops, ®_opt, sizeof(reg_opt), load_flags); + if (ret != -EOPNOTSUPP) + return true; + + return false; +} + +/* Adding a simple test to see if we can get an expected value */ +static bool bpf_test_access_cb_flags_set(struct bpf_sock_ops *skops) +{ + int ret; + + ret = bpf_sock_ops_cb_flags_set(skops, 0); + if (ret != -EOPNOTSUPP) + return true; + + return false; +} + +/* In the timestamping callbacks, we're not allowed to call the following + * BPF CALLs for the safety concern. Return false if expected. + */ +static bool bpf_test_access_bpf_calls(struct bpf_sock_ops *skops, + const struct sock *sk) +{ + if (bpf_test_access_sockopt(skops)) + return true; + + if (bpf_test_access_load_hdr_opt(skops)) + return true; + + if (bpf_test_access_cb_flags_set(skops)) + return true; + + return false; +} + +static bool bpf_test_delay(struct bpf_sock_ops *skops, const struct sock *sk) +{ + struct bpf_sock_ops_kern *skops_kern; + u64 timestamp = bpf_ktime_get_ns(); + struct skb_shared_info *shinfo; + struct delay_info dinfo = {0}; + struct sk_tskey key = {0}; + struct delay_info *val; + struct sk_buff *skb; + struct sk_stg *stg; + u64 prior_ts, delay; + + if (bpf_test_access_bpf_calls(skops, sk)) + return false; + + skops_kern = bpf_cast_to_kern_ctx(skops); + skb = skops_kern->skb; + shinfo = bpf_core_cast(skb->head + skb->end, struct skb_shared_info); + + key.cookie = bpf_get_socket_cookie(skops); + if (!key.cookie) + return false; + + if (skops->op == BPF_SOCK_OPS_TS_SND_CB) { + stg = bpf_sk_storage_get(&sk_stg_map, (void *)sk, 0, 0); + if (!stg) + return false; + dinfo.sendmsg_ns = stg->sendmsg_ns; + bpf_sock_ops_enable_tx_tstamp(skops_kern); + key.tskey = shinfo->tskey; + if (!key.tskey) + return false; + bpf_map_update_elem(&time_map, &key, &dinfo, BPF_ANY); + return true; + } + + key.tskey = shinfo->tskey; + if (!key.tskey) + return false; + + val = bpf_map_lookup_elem(&time_map, &key); + if (!val) + return false; + + switch (skops->op) { + case BPF_SOCK_OPS_TS_SCHED_OPT_CB: + delay = val->sched_delay = timestamp - val->sendmsg_ns; + break; + case BPF_SOCK_OPS_TS_SW_OPT_CB: + prior_ts = val->sched_delay + val->sendmsg_ns; + delay = val->sw_snd_delay = timestamp - prior_ts; + break; + case BPF_SOCK_OPS_TS_ACK_OPT_CB: + prior_ts = val->sw_snd_delay + val->sched_delay + val->sendmsg_ns; + delay = val->ack_delay = timestamp - prior_ts; + break; + } + + if (delay >= delay_tolerance_nsec) + return false; + + /* Since it's the last one, remove from the map after latency check */ + if (skops->op == BPF_SOCK_OPS_TS_ACK_OPT_CB) + bpf_map_delete_elem(&time_map, &key); + + return true; +} + +SEC("fentry/tcp_sendmsg_locked") +int BPF_PROG(trace_tcp_sendmsg_locked, struct sock *sk, struct msghdr *msg, size_t size) +{ + u64 timestamp = bpf_ktime_get_ns(); + u32 flag = sk->sk_bpf_cb_flags; + struct sk_stg *stg; + + if (!flag) + return 0; + + stg = bpf_sk_storage_get(&sk_stg_map, sk, 0, + BPF_SK_STORAGE_GET_F_CREATE); + if (!stg) + return 0; + + stg->sendmsg_ns = timestamp; + nr_snd += 1; + return 0; +} + +SEC("sockops") +int skops_sockopt(struct bpf_sock_ops *skops) +{ + struct bpf_sock *bpf_sk = skops->sk; + const struct sock *sk; + + if (!bpf_sk) + return 1; + + sk = (struct sock *)bpf_skc_to_tcp_sock(bpf_sk); + if (!sk) + return 1; + + switch (skops->op) { + case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB: + nr_active += !bpf_test_sockopt(skops, sk); + break; + case BPF_SOCK_OPS_TS_SND_CB: + if (bpf_test_delay(skops, sk)) + nr_snd += 1; + break; + case BPF_SOCK_OPS_TS_SCHED_OPT_CB: + if (bpf_test_delay(skops, sk)) + nr_sched += 1; + break; + case BPF_SOCK_OPS_TS_SW_OPT_CB: + if (bpf_test_delay(skops, sk)) + nr_txsw += 1; + break; + case BPF_SOCK_OPS_TS_ACK_OPT_CB: + if (bpf_test_delay(skops, sk)) + nr_ack += 1; + break; + } + + return 1; +} + +char _license[] SEC("license") = "GPL";