{"id":2223080,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2223080/?format=json","project":{"id":26,"url":"http://patchwork.ozlabs.org/api/1.0/projects/26/?format=json","name":"Netfilter Development","link_name":"netfilter-devel","list_id":"netfilter-devel.vger.kernel.org","list_email":"netfilter-devel@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20260414112120.248744-1-ericwouds@gmail.com>","date":"2026-04-14T11:21:20","name":"[v2,nf] netfilter: nf_flow_table_ip: Introduce nf_flow_vlan_push()","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"2d6c9a3fdcc39ec9276a250aab0d1af15126cb12","submitter":{"id":87708,"url":"http://patchwork.ozlabs.org/api/1.0/people/87708/?format=json","name":"Eric Woudstra","email":"ericwouds@gmail.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/netfilter-devel/patch/20260414112120.248744-1-ericwouds@gmail.com/mbox/","series":[{"id":499821,"url":"http://patchwork.ozlabs.org/api/1.0/series/499821/?format=json","date":"2026-04-14T11:21:20","name":"[v2,nf] netfilter: nf_flow_table_ip: Introduce nf_flow_vlan_push()","version":2,"mbox":"http://patchwork.ozlabs.org/series/499821/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2223080/checks/","tags":{},"headers":{"Return-Path":"\n <netfilter-devel+bounces-11873-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","netfilter-devel@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=rvw8ESC3;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=netfilter-devel+bounces-11873-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com\n header.b=\"rvw8ESC3\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=209.85.208.50","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=gmail.com"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fw21H3lzZz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 21:22:11 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 801BC3034E1D\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 11:21:41 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 72B8D3DA5DC;\n\tTue, 14 Apr 2026 11:21:40 +0000 (UTC)","from mail-ed1-f50.google.com (mail-ed1-f50.google.com\n [209.85.208.50])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 35E193016FC\n\tfor <netfilter-devel@vger.kernel.org>; Tue, 14 Apr 2026 11:21:38 +0000 (UTC)","by mail-ed1-f50.google.com with SMTP id\n 4fb4d7f45d1cf-66f727d6849so8052222a12.1\n        for <netfilter-devel@vger.kernel.org>;\n Tue, 14 Apr 2026 04:21:38 -0700 (PDT)","from eric\n (2001-1c00-020d-1300-1b1c-4449-176a-89ea.cable.dynamic.v6.ziggo.nl.\n [2001:1c00:20d:1300:1b1c:4449:176a:89ea])\n        by smtp.gmail.com with ESMTPSA id\n a640c23a62f3a-b9d6e5c544asm389679366b.33.2026.04.14.04.21.35\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Tue, 14 Apr 2026 04:21:35 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776165700; cv=none;\n b=CYYto0gxIUokr0M0TVPecYtWkp6HTkS4OPoMJNzKhxkYjlJrLZu3F+O2IRyGnbYrwBJqcAlg09jKmDiAQYtr5IP3DD+0Amaz6PGPYc1+UZCtNML2iavj6PqrDUB4Kmi0I5iCnNokAY8im2QDjVz3ME0QHLEIH9nm7VPUmQsbFkA=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776165700; c=relaxed/simple;\n\tbh=HNw0+spdTOu60fa7PI1Xd858IwuDlVTKSwE3Fp5tlxA=;\n\th=From:To:Cc:Subject:Date:Message-ID:MIME-Version;\n b=Oc2EJCscsGwak4pX6lXNK3D2P/1VHhBVRpnITPDGzTBO7DYY2TOyUPN3F6fOZ7CaXDkbzl+X0Xivo9lZDqEiBPHyfhQEDV8rgJKoomNv5Xm988AuvBz9jBO6Gyj23Q8+noWn6QvrsOWALDB8vZkEeuomRjaiG7x6iUF0eXO62W4=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com;\n spf=pass smtp.mailfrom=gmail.com;\n dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com\n header.b=rvw8ESC3; arc=none smtp.client-ip=209.85.208.50","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=gmail.com; s=20251104; t=1776165697; x=1776770497;\n darn=vger.kernel.org;\n        h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n         :to:from:from:to:cc:subject:date:message-id:reply-to;\n        bh=R6fUbZJjiAUJqseR0AfY4kN5/jG1XsjI0aKzIVoGFQI=;\n        b=rvw8ESC38vPj4NcWY7znjv9Iuo7K7FAOAsKKRxd+ZnpTR5yfQHiDBFQKLD/FkWN9jd\n         oill3VmnfQNBbQ7XOtC7OZVbwXH8xjnEyVWm31IfT5ATpolFCuWNGnSxLD2vLDU89lbb\n         HiycfR7prbI2QLSI3upEwz9l+N94DO1LJ7kkP8q7aNRMFBmSCwLgJdOiJ3XubYas4Y8j\n         nM7UiUUy7NCzt0JD22sUguB1LghPY7nEDS5iwG3y0KOxRSJ+aJDUnQ+PevP0Q9EpEhiM\n         xWBsUYUSH5TNZwJ47OCAHNLkys/RLmmQIcmWDfyZ6Af/bAeSbOy3sxyaSSCUXtYdSJ4Z\n         DZ5Q==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1776165697; x=1776770497;\n        h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n         :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=R6fUbZJjiAUJqseR0AfY4kN5/jG1XsjI0aKzIVoGFQI=;\n        b=T4RMhltLBZMpe7EU7WveWtzTB54CCn9bMi0U5OadpHIU5nf5wiIDT1XpdebgIFMKvC\n         eCgXsZj6o+AC0/Jbcr98jyl9BMJdZWQajmJjeVosKFbLavdK2RNXWmsJQLmgn5zKYu+G\n         651I8D0mnttfDIvFW1sxJ63fCZy+wxG130OXvfYMj1OtYJFNPjGvxS1BzEPRjdS4qPgM\n         1qWwK2AlJ2HQZJ3hX985Qe2/KH6GAEB4wi/zexg6d85sOV15/kjE4B23tCpHt+U0+pCj\n         cJ/VQJoecCZ6sydYZEqbjlGMGB0QsBOFxB9kPIaNMKVGlq3YHeGXi7G8ffmiAZlrNcez\n         x17w==","X-Gm-Message-State":"AOJu0Yx4dd+hQtDkgfugZVwaRrR9ukBbrxlChTUkPMH3cqilxwid1cDG\n\t6Sqb9vSP+IlWGYiuA3HzSHxneGrrBpczJ3/wZnX5Bs4PQpOlQwfw6WitCthLPw==","X-Gm-Gg":"AeBDiesupB3QKp0LNVQXUZG7e9tDyAqW7mP1ThqxCQ3r2Ke2el6m77KJJ0fl21UcAfo\n\t0hiLuyH45Js5JM5613OCJBGoouDUO5EvKhjir000TPzW3G32/NIKK21IX1ENF7zkM8wQ/nJqPN8\n\t6vNl23Fk5WeuloUnfhZwNS9OGY6xmyFKTwzv3LtUtgo3DOc0n7iETA1bKGKzqGM5FowYK+XKX/D\n\toIT/y+E9cJ2Qq/P8Lvx/eTGSD75PJkoXUrkGUIZXpxSeSQJ8VT1f6IsvYSyz5C24adSB/6cKaBU\n\tUdD/GParpQ/OeelwGJC/DXPUesUIVdyPT0LJhpXpXNUUg1p03qYoL56updMCjyT+FsTInC9v0mY\n\tbvgwpUseVFbNgaZ004I4dq+vUlL37Lz2VII8O90cBOYW7LPMq8tI44s+4G7P7zpq0SWck5s56gA\n\tdiLAgoWDt0VbwRAf4jHWQAa1pBFRrswHVY5FMNAx/EHRpl4GVhJ1a8GeZ2SjwKENQp6vV39Ijkk\n\thNXuj+Dv3joojDFvammH4DLO4qxg17HK6Ihp872kyOWEJCnqeWxeXo=","X-Received":"by 2002:a17:907:1b08:b0:b98:6177:2f16 with SMTP id\n a640c23a62f3a-b9d72ad9ff6mr827094966b.53.1776165696277;\n        Tue, 14 Apr 2026 04:21:36 -0700 (PDT)","From":"Eric Woudstra <ericwouds@gmail.com>","To":"Pablo Neira Ayuso <pablo@netfilter.org>,\n\tFlorian Westphal <fw@strlen.de>,\n\tPhil Sutter <phil@nwl.cc>,\n\t\"David S. Miller\" <davem@davemloft.net>,\n\tEric Dumazet <edumazet@google.com>,\n\tJakub Kicinski <kuba@kernel.org>,\n\tPaolo Abeni <pabeni@redhat.com>,\n\tSimon Horman <horms@kernel.org>,\n\tEric Woudstra <ericwouds@gmail.com>","Cc":"netfilter-devel@vger.kernel.org,\n\tnetdev@vger.kernel.org","Subject":"[PATCH v2 nf] netfilter: nf_flow_table_ip: Introduce\n nf_flow_vlan_push()","Date":"Tue, 14 Apr 2026 13:21:20 +0200","Message-ID":"<20260414112120.248744-1-ericwouds@gmail.com>","X-Mailer":"git-send-email 2.53.0","Precedence":"bulk","X-Mailing-List":"netfilter-devel@vger.kernel.org","List-Id":"<netfilter-devel.vger.kernel.org>","List-Subscribe":"<mailto:netfilter-devel+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:netfilter-devel+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit"},"content":"Calling skb_reset_mac_header() before calling skb_vlan_push() does\nremove the error:\n\n\"skb_vlan_push got skb with skb->data not at mac header (offset 18)\"\n\nBut the inner vlan tag is still not inserted correctly.\n\nskb_vlan_push() uses __vlan_insert_inner_tag() to insert the tag\nat offset ETH_HLEN. But the inner tag should only be pushed, without\noffset, similar to nf_flow_pppoe_push().\n\nFixes: c653d5a78f34 (\"netfilter: flowtable: inline vlan encapsulation in xmit path\")\nFixes: a3aca98aec9a (\"netfilter: nf_flow_table_ip: reset mac header before vlan push\")\nSigned-off-by: Eric Woudstra <ericwouds@gmail.com>\n\n---\n\n net/netfilter/nf_flow_table_ip.c | 25 ++++++++++++++++++++++---\n 1 file changed, 22 insertions(+), 3 deletions(-)","diff":"diff --git a/net/netfilter/nf_flow_table_ip.c b/net/netfilter/nf_flow_table_ip.c\nindex fd56d663cb5b..0086f8a1a0d6 100644\n--- a/net/netfilter/nf_flow_table_ip.c\n+++ b/net/netfilter/nf_flow_table_ip.c\n@@ -544,6 +544,26 @@ static int nf_flow_offload_forward(struct nf_flowtable_ctx *ctx,\n \treturn 1;\n }\n \n+static int nf_flow_vlan_push(struct sk_buff *skb, __be16 proto, u16 id)\n+{\n+\tif (skb_vlan_tag_present(skb)) {\n+\t\tstruct vlan_hdr *vhdr;\n+\n+\t\tif (skb_cow_head(skb, VLAN_HLEN))\n+\t\t\treturn -1;\n+\n+\t\t__skb_push(skb, VLAN_HLEN);\n+\t\tskb_reset_network_header(skb);\n+\t\tvhdr = (struct vlan_hdr *)(skb->data);\n+\t\tvhdr->h_vlan_TCI = htons(id);\n+\t\tvhdr->h_vlan_encapsulated_proto = skb->protocol;\n+\t\tskb->protocol = proto;\n+\t} else {\n+\t\t__vlan_hwaccel_put_tag(skb, proto, id);\n+\t}\n+\treturn 0;\n+}\n+\n static int nf_flow_pppoe_push(struct sk_buff *skb, u16 id)\n {\n \tint data_len = skb->len + sizeof(__be16);\n@@ -738,9 +758,8 @@ static int nf_flow_encap_push(struct sk_buff *skb,\n \t\tswitch (tuple->encap[i].proto) {\n \t\tcase htons(ETH_P_8021Q):\n \t\tcase htons(ETH_P_8021AD):\n-\t\t\tskb_reset_mac_header(skb);\n-\t\t\tif (skb_vlan_push(skb, tuple->encap[i].proto,\n-\t\t\t\t\t  tuple->encap[i].id) < 0)\n+\t\t\tif (nf_flow_vlan_push(skb, tuple->encap[i].proto,\n+\t\t\t\t\t      tuple->encap[i].id) < 0)\n \t\t\t\treturn -1;\n \t\t\tbreak;\n \t\tcase htons(ETH_P_PPP_SES):\n","prefixes":["v2","nf"]}