From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DD67AC2D0EC for ; Tue, 7 Apr 2020 22:40:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B24242063A for ; Tue, 7 Apr 2020 22:40:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="c2mymi+f" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726426AbgDGWkp (ORCPT ); Tue, 7 Apr 2020 18:40:45 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:45825 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726380AbgDGWko (ORCPT ); Tue, 7 Apr 2020 18:40:44 -0400 Received: by mail-wr1-f65.google.com with SMTP id v5so5631692wrp.12 for ; Tue, 07 Apr 2020 15:40:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=k10jgGbYqkTndyv5IIaRsp+WP+wxIV5rccMvUT9I9OY=; b=c2mymi+fmL4MtaHqf81zhu5LHOpEFMZEy7fCUf3gIPpEDSWvf0p5Fidz+KKUT4z/2s YzEJW3rr+RMS0Si3nIvrqf+0nla2bkYM4NO1SM/ryWhExJUmyftSs1rV8D2L8AVIoYYX hRewwIT78Bx9xqjYMZ4ejELf8XRipaSyxOALpusyFS4a0U+ReltKnIxBz0erCMMgpVCi BZ0Z5sdJWnqO0qT5d7kR0QJVhKmcUC+7ET/mWw9Jzu2dqR/LSojrFYnFyIFYp+ebOolv 9Yq5KlTZWzT91AVTClGhsgti7CDY1NMJFC6QTHzWjhP0x8k4YBFMf+C5ZaWgJRehY9GB GqKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=k10jgGbYqkTndyv5IIaRsp+WP+wxIV5rccMvUT9I9OY=; b=AH9mcz8dD6t6m3V2C7eo+MG762iL69GfYiP/v2nbMo/+nc2kbzR8/yOzhvNQMsFOUx 0RM7Z6V16EOyUwmLgRUT1Bls3xUVO/+ttj+Gg+hHo/AIOS2FUZ2jGcS2ko102HGbh+lc rWkIFItKusK3Y9iKf1K9ip3CqNfxd+e1XWdsZJ33o8Xqw4de23Xbw2MuA37ogleBPvzg MfUdWBG/+2PZf2BmndYLzM3U/zM4XTSS/1Z/c+82VC0FsHrfiI4LQ95uc+1k2noOUjVH J7Gy0wULyYWF2pevkX6XpIf0DqFoB7JloOunfJD/vZ0AK9yLi7Z7487MXGqwXTTexKHQ ZeSQ== X-Gm-Message-State: AGi0PuZlT+owBFwtTB46K4NWicJX9+zSUfexahEFMoWDiDdQyVHPbXdO hbSKzIRf1ctn8+syoPcu80Ev7Xh+ X-Google-Smtp-Source: APiQypJk0Qp6jZ4AGFR9fWH3UD0Rgi0mebyqp7ndu/CoEj2eOBoFzMuTpdzFFz/GTwJIGhak/qJpLw== X-Received: by 2002:adf:ee8d:: with SMTP id b13mr5305888wro.251.1586299240036; Tue, 07 Apr 2020 15:40:40 -0700 (PDT) Received: from ?IPv6:2003:ea:8f29:6000:21d6:ac8b:719c:fbba? (p200300EA8F29600021D6AC8B719CFBBA.dip0.t-ipconnect.de. [2003:ea:8f29:6000:21d6:ac8b:719c:fbba]) by smtp.googlemail.com with ESMTPSA id v16sm4156389wml.30.2020.04.07.15.40.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 07 Apr 2020 15:40:39 -0700 (PDT) Subject: Re: [PATCH net] r8169: fix multicast tx issue with macvlan interface From: Heiner Kallweit To: Charles DAYMAND Cc: Eric Dumazet , Eric Dumazet , netdev References: <20200327090800.27810-1-charles.daymand@wifirst.fr> <0bab7e0b-7b22-ad0f-2558-25602705e807@gmail.com> <42f81a4a-24fc-f1fb-11db-ea90a692f249@gmail.com> Message-ID: Date: Wed, 8 Apr 2020 00:40:32 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On 07.04.2020 08:22, Heiner Kallweit wrote: > On 07.04.2020 01:20, Eric Dumazet wrote: >> >> >> On 4/6/20 3:16 PM, Heiner Kallweit wrote: >> >>> >>> In a similar context Realtek made me aware of a hw issue if IP header >>> has the options field set. You mentioned problems with multicast packets, >>> and based on the following code the root cause may be related. >>> >>> br_ip4_multicast_alloc_query() >>> -> iph->ihl = 6; >>> >>> I'd appreciate if you could test (with HW tx checksumming enabled) >>> whether this experimental patch fixes the issue with invalid/lost >>> multicasts. >>> >>> >>> diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c >>> index e40e8eaeb..dd251ddb8 100644 >>> --- a/drivers/net/ethernet/realtek/r8169_main.c >>> +++ b/drivers/net/ethernet/realtek/r8169_main.c >>> @@ -4319,6 +4319,10 @@ static netdev_features_t rtl8169_features_check(struct sk_buff *skb, >>> rtl_chip_supports_csum_v2(tp)) >>> features &= ~NETIF_F_ALL_TSO; >>> } else if (skb->ip_summed == CHECKSUM_PARTIAL) { >>> + if (ip_hdrlen(skb) > sizeof(struct iphdr)) { >> >> Packet could be non IPv4 at this point. (IPv6 for instance) >> > Right, I should have mentioned it: > This experimental patch is for IPv4 only. In a final version (if it indeed > fixes the issue) I had to extend the condition and check for IPv4. > >>> + pr_info("hk: iphdr has options field set\n"); >>> + features &= ~NETIF_F_CSUM_MASK; >>> + } >>> if (skb->len < ETH_ZLEN) { >>> switch (tp->mac_version) { >>> case RTL_GIGA_MAC_VER_11: >>> > Here comes an updated version of the experimental patch that checks for IPv4. It's part of a bigger experimental patch here, therefore it's not fully optimized. diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index e40e8eaeb..69e35da6c 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -4307,6 +4307,23 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, return NETDEV_TX_BUSY; } +static netdev_features_t rtl8168evl_features_check(struct sk_buff *skb, + netdev_features_t features) +{ + __be16 proto = vlan_get_protocol(skb); + + if (skb->ip_summed == CHECKSUM_PARTIAL) { + if (proto == htons(ETH_P_IP)) { + if (ip_hdrlen(skb) > sizeof(struct iphdr)) { + pr_info("hk: iphdr has options field set\n"); + features &= ~NETIF_F_CSUM_MASK; + } + } + } + + return features; +} + static netdev_features_t rtl8169_features_check(struct sk_buff *skb, struct net_device *dev, netdev_features_t features) @@ -4314,6 +4331,9 @@ static netdev_features_t rtl8169_features_check(struct sk_buff *skb, int transport_offset = skb_transport_offset(skb); struct rtl8169_private *tp = netdev_priv(dev); + if (tp->mac_version == RTL_GIGA_MAC_VER_34) + features = rtl8168evl_features_check(skb, features); + if (skb_is_gso(skb)) { if (transport_offset > GTTCPHO_MAX && rtl_chip_supports_csum_v2(tp)) -- 2.26.0