From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.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 ACB382D23A6 for ; Sun, 14 Jun 2026 04:01:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781409665; cv=none; b=ad2CUX/6Cd2XBXNw+Oct0QPmVugoa7bYHiBDkvN/RxMzDp7aGVLs6Pyl15X3Cz49CIJQEUwyDXy8+sLCuC0AVRDXM//y3KLZFTx8ov1GW06LhSfEEIzJ2NY0eBu4/Ushuhj3Guhzl2wVwQk8+oYlIKNtSg3x+xJprLpNeA4laig= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781409665; c=relaxed/simple; bh=Xorc83DyKC5CVv0vRC6G/GNTsWPDQX1OaR8pahneVNc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qlaORe8LUyNVZOS2vLGW5w7vZct/JZ/kzbVgHS8XhmR03X3DsTpWq+0lK2B8R/M7pkv16pIq8Svx/3WPjDNJRNyt0+yNlxRoVbcyQMJkPiBPm7lCJpU3sCzB/Zr6wqw0dHyaEx6AuM3chKbmxL7UKtMIop7q4LQajd+YXPi4wx0= 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=poMOWH1q; arc=none smtp.client-ip=209.85.215.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="poMOWH1q" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-c8585cd8400so628576a12.3 for ; Sat, 13 Jun 2026 21:01:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781409663; x=1782014463; 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=4LFlYonGJq08punhtqW4trLrplu83bZHlBhA/KZ1Aiw=; b=poMOWH1qz3uvX8RXz75gweVdD7a/yweZNHruSt0JU+L1jePop/xqHgzDvQVfJ+SHCb 7srBlVxsfeToLODkeu0PtXX5+FMma6EKJmPdgLrwMAV75wr1ZwsAW71oMepfeVjLVf4i eVHV6np7xhY5R0ZAc5aFkq/F8HUCwNUkUdwf/fk5+YiUN9i9rrn/W7JfdFZk3s/FIwPz YPwFSFAY8po8xZmb04zgJ0YysGFaOdHupOdpda2BkaWMBLfoT5FjeVnqzBVQD+1pEwnl ef731kpin0SQWc8hPJSt9Ij30cA6l3cwZoczGt6uF4fbbUxOS17HgmlUmOq9kOGezPNR ENbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781409663; x=1782014463; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=4LFlYonGJq08punhtqW4trLrplu83bZHlBhA/KZ1Aiw=; b=tIxQi1P1jxqKT/himjTH+6snYZnxNmFdOif4wgLzY8XuxXcv7yRs9Cklz1qxmvc+So JfKP06ITgExJ3sA9WgAyJoGMwVtMTCB8MD6PUBWV9DKoWrKKfW1BrXRzZZEzuqgC1J1L 0snAnuI1Sa8UVQrEm1M8+66bu6zSv3JmjSTatTA4k2rDk8YThYjiM8cfSIkALpYdH5XZ jr1SA7shxi+6AAxwHedF67IdeispcxLFbpvBIlJ8gb7PJAlkg/9POACtusszTqSO7BkJ EDJgkQnLaweaq5CGN+GqXjC5SdB8TcMjATPChpBQfmcP85XAhHPrP5haGE7a+7JgEHUx XlBA== X-Forwarded-Encrypted: i=1; AFNElJ/0mo6NI/LcTR/xUwbw118WP9fV6zjjZyEN2rpLMngpqQ1EM8OWdzeTBvw3jVRxXr1K01hjtG985UumkAU=@vger.kernel.org X-Gm-Message-State: AOJu0Yzu9xD/WPtmEY+DiZudHDU1L2A7VrBEIcIL9S2G8yoIqeDtEaUG 9ppx4Gmqka0vp5l3j8c1tTlR71x9qz7vCaVRi5FXxSrUMvCXpOoX7da9 X-Gm-Gg: Acq92OH4fwIw7CZCj6gYmkPkNLWbU7bXWzBQR3GU9za/TqRjRfvNpU33IvYBkZGCdS7 sAzv6cYGntWJhe6kc7H0pDPOrPP3L9TdJd/GPug/SgbYtfXM6Q3s5vMx74NZxwFfloGQ0IwKLBi iwA4Wcly4gyFzZVloWMbghx/9TL/hkdUXUCTsvIRMVEFwrPh8xRCoNwbSyWckZs1Bdzj1a5bdtc YgVQj/hZ/J1J5mm/wADCvVjlW3ooK4zb9NMkVFif6xMUwCsVpZmEPMphu8xBqWyXjaNnuaZnFF3 Ld4zu90ma+aVgIyaUYYMc3rkaHuu70fGonW0UwIkt2eGuh5AHtcUHoQw7IB3fSoApVRglch+4FQ kAGLMfU5ch9UsYvB4e3IzEWZsbQLMWOB9YBytLsC2eGJzqsGj0HSTmAhtjTKjD2NShAxQAF8kUj U8Q/M3cR+gtnBOXsVBNMf2818JR042DA== X-Received: by 2002:a05:6300:228a:b0:3b4:895f:6ac8 with SMTP id adf61e73a8af0-3b783b220ebmr9694421637.3.1781409663062; Sat, 13 Jun 2026 21:01:03 -0700 (PDT) Received: from mincom1 ([115.4.79.42]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c8661a67603sm5676983a12.0.2026.06.13.21.00.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2026 21:01:02 -0700 (PDT) From: Jihong Min To: netdev@vger.kernel.org, Lorenzo Bianconi Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Lunn , Simon Horman , Herbert Xu , Steffen Klassert , Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, Matthias Brugger , AngeloGioacchino Del Regno , linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Christian Marangi , Felix Fietkau , linux-kernel@vger.kernel.org, Jihong Min Subject: [RFC PATCH net-next 1/7] xfrm: allow packet offload drivers to own transmit Date: Sun, 14 Jun 2026 13:00:26 +0900 Message-ID: <20260614040032.1567994-2-hurryman2212@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260614040032.1567994-1-hurryman2212@gmail.com> References: <20260614040032.1567994-1-hurryman2212@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Packet offload drivers can currently program state and validate whether an skb can be offloaded, but they cannot take ownership of a packet that needs driver-specific TX preparation before the regular XFRM output path continues. Add an optional xdo_dev_packet_xmit() callback. Drivers that implement it consume the skb and return the final TX status; all other drivers keep the existing XFRM output path. Signed-off-by: Jihong Min --- include/linux/netdevice.h | 8 ++++++++ net/xfrm/xfrm_output.c | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 7f4f0837c09f..1552eb81ddf0 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1048,6 +1048,14 @@ struct xfrmdev_ops { int (*xdo_dev_policy_add) (struct xfrm_policy *x, struct netlink_ext_ack *extack); void (*xdo_dev_policy_delete) (struct xfrm_policy *x); void (*xdo_dev_policy_free) (struct xfrm_policy *x); + /* Optional packet-offload TX path for devices that need + * driver-specific transmit preparation instead of continuing through + * the regular XFRM output path, such as adding offload metadata or + * steering the packet to a private transmit queue. The driver consumes + * skb and returns the final transmit status. + */ + int (*xdo_dev_packet_xmit)(struct sk_buff *skb, + struct xfrm_state *x); }; #endif diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c index cc35c2fcbbe0..9f11559b0221 100644 --- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c @@ -770,6 +770,17 @@ int xfrm_output(struct sock *sk, struct sk_buff *skb) } if (x->xso.type == XFRM_DEV_OFFLOAD_PACKET) { +#ifdef CONFIG_XFRM_OFFLOAD + const struct xfrmdev_ops *ops; +#endif + +#ifdef CONFIG_XFRM_OFFLOAD + ops = x->xso.dev->xfrmdev_ops; + /* Callback validates, consumes skb and returns final TX status. */ + if (ops && ops->xdo_dev_packet_xmit) + return ops->xdo_dev_packet_xmit(skb, x); +#endif + if (!xfrm_dev_offload_ok(skb, x)) { XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR); kfree_skb(skb); -- 2.53.0