Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp232133pxb; Wed, 13 Jan 2021 02:08:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJzoBcN/C6yWFFi4uyx7OjifzIw56QI5fTUAp2N6cw1ZYrm6yq+6abQFlxsdVMpnQNejH0dR X-Received: by 2002:aa7:d354:: with SMTP id m20mr1109862edr.195.1610532539593; Wed, 13 Jan 2021 02:08:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610532539; cv=none; d=google.com; s=arc-20160816; b=Yzci3Hc7WHt+aAQDtx5SZOGSONDUg76i89VQjwth3TyAenWf32NXe8U1mi/J1VrglY hKsM/S0GpdaXkbcU9vUo1M0H03lRgcR4ebUvwEwdBgF4ZyjJvDBYCgf9CToLL5I4CbGe DPS14l/OaotklJnOimjmP/YGjIWSaDZkWZttyqtAd4UxjG2l67+U4QXJLv/RIuzZz4wl 9Pl6dgIMKxaN7PGRXKt9+IoiQ4Ml66cKE2utVXl8T8UknhdEgcLxdL6xaPEon9rvpTeW 8e0nmDm93Ynqc56Pow3MUlTdsfw8mpH7yuS+DbV11hGwjAK646dP4/a7aIVSC8LcYaMf YM7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:reply-to:cc:from:to :dkim-signature:date; bh=3cMP6aCGpwdrhC9aDRMC5OocIsu8kiFlHn7rlrVByGs=; b=R4ttm6pZ8pwJy3lrSm0GdE1Aae1ZH5S5gdfnVeZ4qkJXDqB/3g1mgbu3EzkSdYtV43 eJyM+cPVAgshIrS3W0oAu651CUG0o/e1ySRH0UidfBEoNakegxcJJY5x81ndwiy1wvNE PewUzuLsFwfuv7PUoT2ZDXUQCPXLZ2LZdAN1xS/mYuJ37DtJW4Zypoo3Xgb7RZUjxU/l 5C3Y2ke6PaGuXhFCvlUzyg5/Gv1/2LSmT1r8fuGYwtW85Gccb7JKcl2UgB08k8/eEp1x 2s1slhyNOVcew7kWss3b9W6Uhf0bzFdICgSXj51J5xn2vcxl9KmU8Sb8wey1iwDh7/ZA Dylg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@pm.me header.s=protonmail header.b=D8JWBbn9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=pm.me Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z11si697986ejw.19.2021.01.13.02.08.36; Wed, 13 Jan 2021 02:08:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@pm.me header.s=protonmail header.b=D8JWBbn9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=pm.me Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727342AbhAMKGT (ORCPT + 99 others); Wed, 13 Jan 2021 05:06:19 -0500 Received: from mail-40133.protonmail.ch ([185.70.40.133]:47804 "EHLO mail-40133.protonmail.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727315AbhAMKGR (ORCPT ); Wed, 13 Jan 2021 05:06:17 -0500 Date: Wed, 13 Jan 2021 10:05:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail; t=1610532327; bh=3cMP6aCGpwdrhC9aDRMC5OocIsu8kiFlHn7rlrVByGs=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=D8JWBbn9AoasAMJl2qT4ZipOZpgjg1guuhDDW691mwaz2qDzASMcvwm+OEfd1k+7g 66BRcC8oCghHEtSoEhAQfeGcHyJu0qxBBbyqRPSCfv/Zfs5vBFbdIKkEF864erZTIM P0bU/x+HjrTln5wjudx5TKY1++B/AbiBdnb3pxbePrBTml4vAH0f5WJJgWlJnhQGOt NyUuGGrJ9exILBDx4YRx3INS7Llgx/6tRdKqEsGQSeneAkVTgw3vdofTfzSpAEtmpj v7nPucVFA9N7xA/YYzSfh0zXjHYn+sja+Gx9+rFisYpHnquI2IuE9wQyqqBeDmTyVs eJkxFrjrsFC0Q== To: Dongseok Yi From: Alexander Lobakin Cc: 'Alexander Lobakin' , 'Alexander Duyck' , "'David S. Miller'" , 'Jakub Kicinski' , 'Eric Dumazet' , 'Edward Cree' , 'Willem de Bruijn' , 'Steffen Klassert' , 'Alexey Kuznetsov' , 'Hideaki YOSHIFUJI' , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Reply-To: Alexander Lobakin Subject: RE: [PATCH net-next] udp: allow forwarding of plain (non-fraglisted) UDP GRO packets Message-ID: <20210113100438.2061-1-alobakin@pm.me> In-Reply-To: <001401d6e960$87cab7b0$97602710$@samsung.com> References: <20210112211536.261172-1-alobakin@pm.me> <6fb72534-d4d4-94d8-28d1-aabf16e11488@gmail.com> <001401d6e960$87cab7b0$97602710$@samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "'Alexander Lobakin'" From: Dongseok Yi" Date: Wed, 13 Jan 2021 12:59:45 +0900 > On 2021-01-13 12:10, Alexander Duyck wrote: >> On 1/12/21 1:16 PM, Alexander Lobakin wrote: >>> Commit 9fd1ff5d2ac7 ("udp: Support UDP fraglist GRO/GSO.") actually >>> not only added a support for fraglisted UDP GRO, but also tweaked >>> some logics the way that non-fraglisted UDP GRO started to work for >>> forwarding too. >>> Tests showed that currently forwarding and NATing of plain UDP GRO >>> packets are performed fully correctly, regardless if the target >>> netdevice has a support for hardware/driver GSO UDP L4 or not. >>> Add the last element and allow to form plain UDP GRO packets if >>> there is no socket -> we are on forwarding path. >>> > > Your patch is very similar with the RFC what I submitted but has > different approach. My concern was NAT forwarding. > https://lore.kernel.org/patchwork/patch/1362257/ Not really. You tried to forbid forwarding of fraglisted UDP GRO packets, I allow forwarding of plain UDP GRO packets. With my patch on, you can switch between plain and fraglisted UDP GRO with the command: ethtool -K eth0 rx-gro-list on/off > Nevertheless, I agreed with your idea that allow fraglisted UDP GRO > if there is socket. Recheck my change. There's ||, not &&. As I said in the commit message, forwarding and NATing of plain UDP GRO packets are performed correctly, both with and without driver-side support, so it's safe to enable. Also, as I said in reply to your RFC, NATing of UDP GRO fraglists is performed correctly if driver is aware of it and advertises a support for fraglist GSO. If not, then there may be problems you described. But the idea to forbid forwarding and NATing of any UDP GRO skbs is an absolute overkill. >>> Plain UDP GRO forwarding even shows better performance than fraglisted >>> UDP GRO in some cases due to not wasting one skbuff_head per every >>> segment. >>> >>> Signed-off-by: Alexander Lobakin >>> --- >>> net/ipv4/udp_offload.c | 5 +++-- >>> 1 file changed, 3 insertions(+), 2 deletions(-) >>> >>> diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c >>> index ff39e94781bf..9d71df3d52ce 100644 >>> --- a/net/ipv4/udp_offload.c >>> +++ b/net/ipv4/udp_offload.c >>> @@ -460,12 +460,13 @@ struct sk_buff *udp_gro_receive(struct list_head = *head, struct sk_buff *skb, >>> =09if (skb->dev->features & NETIF_F_GRO_FRAGLIST) >>> =09=09NAPI_GRO_CB(skb)->is_flist =3D sk ? !udp_sk(sk)->gro_enabled: 1= ; > > is_flist can be true even if !sk. > >>> >>> -=09if ((sk && udp_sk(sk)->gro_enabled) || NAPI_GRO_CB(skb)->is_flist) = { >>> +=09if (!sk || (sk && udp_sk(sk)->gro_enabled) || > > Actually sk would be NULL by udp_encap_needed_key in udp4_gro_receive > or udp6_gro_receive. > >>> +=09 NAPI_GRO_CB(skb)->is_flist) { >>> =09=09pp =3D call_gro_receive(udp_gro_receive_segment, head, skb); > > udp_gro_receive_segment will check is_flist first and try to do > fraglisted UDP GRO. Can you check what I'm missing? I think you miss that is_flist is set to true *only* if the receiving netdevice has NETIF_F_GRO_FRAGLIST feature on. If it's not, stack will form a non-fraglisted UDP GRO skb. That was tested multiple times. >>> =09=09return pp; >>> =09} >>> >> >> The second check for sk in "(sk && udp_sk(sk)->gro_enabled)" is >> redundant and can be dropped. You already verified it is present when >> you checked for !sk before the logical OR. Alex are right, I'll simplify the condition in v2. Thanks! > Sorry, Alexander Duyck. I believe Alexander Lobakin will answer this. > >>> -=09if (!sk || NAPI_GRO_CB(skb)->encap_mark || >>> +=09if (NAPI_GRO_CB(skb)->encap_mark || >>> =09 (skb->ip_summed !=3D CHECKSUM_PARTIAL && >>> =09 NAPI_GRO_CB(skb)->csum_cnt =3D=3D 0 && >>> =09 !NAPI_GRO_CB(skb)->csum_valid) || >>> Al