From patchwork Tue Oct 16 18:20:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Khoronzhuk X-Patchwork-Id: 148978 Delivered-To: patch@linaro.org Received: by 2002:a2e:8595:0:0:0:0:0 with SMTP id b21-v6csp5435015lji; Tue, 16 Oct 2018 11:20:42 -0700 (PDT) X-Google-Smtp-Source: ACcGV60ARiMJq70TpxA3vKF5z1V34XTHlBUqvOKnk9tcQ2GHh+FnnHZginpgf+1B94CjZabZB6DF X-Received: by 2002:a17:902:9696:: with SMTP id n22-v6mr13928021plp.282.1539714042334; Tue, 16 Oct 2018 11:20:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539714042; cv=none; d=google.com; s=arc-20160816; b=CAB0QlufmP686M75TWbLq9Gt9qElzbdFwh7N8086lOLSbtxPUhD0XJ+03kFZslDYGY +s+Ax51KdQc6/SdT8+xFKyumKnXRypbmsfncjaxAYlQXG/6KTMjcZUymnLRYmKjgLAxU HG1dsQhbKYNNuCl+y/oRLO271s/s9AwH0PwbCIun/tnMmG7q5FigYh0QRawJy2lUewuD xhFzHuGyQSoKEwLuqR1SVObHIvsWDoujv4OWstQC2NQ0WlfOpPseHbnPCBL1EphFsXPe wVQkCD1PZ9uwAhunuPseMSLApYJ4WyL4fTjXct9ELGpsZXX0J6Krx0BjnfDRoYgYaIQL tHiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=0hJSCJb1LP0ObcdLd4/9veYEjRQvXzCQb4b6QhGgsf0=; b=CFMsGDP/tNQUapI2TRvGtyGNbsXITEenPg0aZ3iBvo3uAr6mIuw6z5iYnqqZY2/eM7 KgHX99rM2uAPcJ3/mqWmjGxYkJkWE7y7K4+kumMe1C5g3EmmV3ZLfAPVFkiu4Z16avOv VKzy+a6O1/7JCM242bhCe3PtQ/SwkrEjkfWxh2SuaBE0FwA9fQyR3RMUZKMTFK+ExhDy f5FroMTk8qkf4QMWepTHt5KTBg23eKkp+cDIVsOSpBec2eFIfKNneXOB84Jc8hoSqQbC kdm0xDFBzn5eVgQOaMVSfxKNOkO8DIkPm8RBa2Byp1tZnE/5CVkPrrFOkKBqDTpXi0LH mdUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IgzpuwVe; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n2-v6si14415901plk.255.2018.10.16.11.20.42; Tue, 16 Oct 2018 11:20:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IgzpuwVe; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727397AbeJQCMV (ORCPT + 10 others); Tue, 16 Oct 2018 22:12:21 -0400 Received: from mail-lj1-f195.google.com ([209.85.208.195]:44835 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727247AbeJQCMV (ORCPT ); Tue, 16 Oct 2018 22:12:21 -0400 Received: by mail-lj1-f195.google.com with SMTP id v6-v6so21814381ljc.11 for ; Tue, 16 Oct 2018 11:20:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=0hJSCJb1LP0ObcdLd4/9veYEjRQvXzCQb4b6QhGgsf0=; b=IgzpuwVeZdd//YHzrzdu6mgAuH4UjtyXtRFxHDI+YSMyg+24XxFA0ntztIfAAHEns+ BW93ur3BWEoDJSrbZ/HggdCmgoIcV7kbtbc0lE2RNZM2Q4NYaBztITDsF0mnGMvKermI 19UZRSARhDpcH57qoctDXTnmxhGz2Jf8ZfHcg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=0hJSCJb1LP0ObcdLd4/9veYEjRQvXzCQb4b6QhGgsf0=; b=HaQtgXJN9F9gPvg9DSH07fDY01jYmPEMybhgmHfmLU1W2MOB3sx/+57pYZTuwF+Ob9 X3PicNeahvaiTc382n6sKfk49ZoMTcmsXu2eH7b9YEaxGez8yWjpAPUeqXaGpBNY0T+r Zh8I+hfNCNy/RM5INCKyzzNMZPo+BveX2UZf07gOXaJwsc2GlGXTxjohuLUc03rj4AZj Cyoh2QMEUAZVnMxhh3XW+Z6o9K3YwLBghrd3tgEkurUdXkN14pMzHJfF0P0oegxKKffJ tdwZ8Zq+gnoOJRI6lsnNanh5a5uZ+UtEj3C3+kSEPBSLliBjUClJa9GTeLLB024QN+YB Gdpw== X-Gm-Message-State: ABuFfoh9t7ZGqJu2hBGVaW4d42GHP9VcWEUm/0hkfe12lJ2WeChim0Vq ZwlAxubXEmyDPYgSft8zsHRtiw== X-Received: by 2002:a2e:9a93:: with SMTP id p19-v6mr14544570lji.87.1539714038483; Tue, 16 Oct 2018 11:20:38 -0700 (PDT) Received: from localhost.localdomain (59-201-94-178.pool.ukrtel.net. [178.94.201.59]) by smtp.gmail.com with ESMTPSA id i27-v6sm3207844lfc.22.2018.10.16.11.20.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Oct 2018 11:20:37 -0700 (PDT) From: Ivan Khoronzhuk To: grygorii.strashko@ti.com, davem@davemloft.net Cc: linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, alexander.h.duyck@intel.com, Ivan Khoronzhuk Subject: [RFC PATCH net-next 0/4] net: ethernet: ti: cpsw: fix vlan mcast Date: Tue, 16 Oct 2018 21:20:31 +0300 Message-Id: <20181016182035.18234-1-ivan.khoronzhuk@linaro.org> X-Mailer: git-send-email 2.17.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The cpsw holds separate mcast entires for vlan entries. At this moment driver adds only not vlan mcast addresses, omitting vlan/mcast entries. As result mcast for vlans doesn't work. It can be fixed by adding same mcast entries for every created vlan, but this patchseries uses more sophisticated way and allows to create mcast entries only for vlans that really require it. Generic functions from this series can be reused for fixing vlan and macvlan unicast. Simple example of ALE table before and after this series, having same mcast entries as for vlan 100 as for real device (reserved vlan 2), and one mcast address only for vlan 100 - 01:1b:19:00:00:00. <---- Before this patchset ----> vlan , vid = 2, untag_force = 0x5, reg_mcast = 0x5, mem_list = 0x5 mcast, vid = 2, addr = ff:ff:ff:ff:ff:ff, port_mask = 0x1 ucast, vid = 2, addr = 74:da:ea:47:7d:9d, persistant, port_num = 0x0 vlan , vid = 0, untag_force = 0x7, reg_mcast = 0x0, mem_list = 0x7 mcast, vid = 2, addr = 33:33:00:00:00:01, port_mask = 0x1 mcast, vid = 2, addr = 01:00:5e:00:00:01, port_mask = 0x1 vlan , vid = 1, untag_force = 0x3, reg_mcast = 0x3, mem_list = 0x3 mcast, vid = 1, addr = ff:ff:ff:ff:ff:ff, port_mask = 0x1 ucast, vid = 1, addr = 74:da:ea:47:7d:9c, persistant, port_num = 0x0 mcast, vid = 1, addr = 33:33:00:00:00:01, port_mask = 0x1 mcast, vid = 1, addr = 01:00:5e:00:00:01, port_mask = 0x1 mcast, vid = 2, addr = 01:80:c2:00:00:00, port_mask = 0x1 mcast, vid = 2, addr = 01:80:c2:00:00:03, port_mask = 0x1 mcast, vid = 2, addr = 01:80:c2:00:00:0e, port_mask = 0x1 mcast, vid = 1, addr = 01:80:c2:00:00:00, port_mask = 0x1 mcast, vid = 1, addr = 01:80:c2:00:00:03, port_mask = 0x1 mcast, vid = 1, addr = 01:80:c2:00:00:0e, port_mask = 0x1 mcast, vid = 2, addr = 33:33:ff:47:7d:9d, port_mask = 0x1 mcast, vid = 2, addr = 33:33:00:00:00:fb, port_mask = 0x1 mcast, vid = 2, addr = 33:33:00:01:00:03, port_mask = 0x1 mcast, vid = 1, addr = 33:33:ff:47:7d:9c, port_mask = 0x1 mcast, vid = 1, addr = 33:33:00:00:00:fb, port_mask = 0x1 mcast, vid = 1, addr = 33:33:00:01:00:03, port_mask = 0x1 mcast, vid = 1, addr = 01:00:5e:00:00:fb, port_mask = 0x1 mcast, vid = 1, addr = 01:00:5e:00:00:fc, port_mask = 0x1 vlan , vid = 100, untag_force = 0x0, reg_mcast = 0x5, mem_list = 0x5 ucast, vid = 100, addr = 74:da:ea:47:7d:9d, persistant, port_num = 0x0 mcast, vid = 100, addr = ff:ff:ff:ff:ff:ff, port_mask = 0x1 mcast, vid = 2, addr = 01:1b:19:00:00:00, port_mask = 0x1 ^^^ Here mcast entry (ptpl2), has to be added only for vlan 100 but added for reserved vlan 2...that's not enough. <---- After this patchset ----> vlan , vid = 2, untag_force = 0x5, reg_mcast = 0x5, mem_list = 0x5 mcast, vid = 2, addr = ff:ff:ff:ff:ff:ff, port_mask = 0x1 ucast, vid = 2, addr = 74:da:ea:47:7d:9d, persistant, port_num = 0x0 vlan , vid = 0, untag_force = 0x7, reg_mcast = 0x0, mem_list = 0x7 mcast, vid = 2, addr = 33:33:00:00:00:01, port_mask = 0x1 mcast, vid = 2, addr = 01:00:5e:00:00:01, port_mask = 0x1 vlan , vid = 1, untag_force = 0x3, reg_mcast = 0x3, mem_list = 0x3 mcast, vid = 1, addr = ff:ff:ff:ff:ff:ff, port_mask = 0x1 ucast, vid = 1, addr = 74:da:ea:47:7d:9c, persistant, port_num = 0x0 mcast, vid = 1, addr = 33:33:00:00:00:01, port_mask = 0x1 mcast, vid = 1, addr = 01:00:5e:00:00:01, port_mask = 0x1 mcast, vid = 2, addr = 01:80:c2:00:00:00, port_mask = 0x1 mcast, vid = 2, addr = 01:80:c2:00:00:03, port_mask = 0x1 mcast, vid = 2, addr = 01:80:c2:00:00:0e, port_mask = 0x1 mcast, vid = 1, addr = 01:80:c2:00:00:00, port_mask = 0x1 mcast, vid = 1, addr = 01:80:c2:00:00:03, port_mask = 0x1 mcast, vid = 1, addr = 01:80:c2:00:00:0e, port_mask = 0x1 mcast, vid = 2, addr = 33:33:ff:47:7d:9d, port_mask = 0x1 mcast, vid = 1, addr = 33:33:ff:47:7d:9c, port_mask = 0x1 mcast, vid = 2, addr = 33:33:00:00:00:fb, port_mask = 0x1 mcast, vid = 2, addr = 33:33:00:01:00:03, port_mask = 0x1 mcast, vid = 1, addr = 33:33:00:00:00:fb, port_mask = 0x1 mcast, vid = 1, addr = 33:33:00:01:00:03, port_mask = 0x1 vlan , vid = 100, untag_force = 0x0, reg_mcast = 0x5, mem_list = 0x5 ucast, vid = 100, addr = 74:da:ea:47:7d:9d, persistant, port_num = 0x0 mcast, vid = 100, addr = ff:ff:ff:ff:ff:ff, port_mask = 0x1 mcast, vid = 100, addr = 33:33:00:00:00:01, port_mask = 0x1 mcast, vid = 100, addr = 01:00:5e:00:00:01, port_mask = 0x1 mcast, vid = 100, addr = 33:33:ff:47:7d:9d, port_mask = 0x1 mcast, vid = 100, addr = 01:80:c2:00:00:00, port_mask = 0x1 mcast, vid = 100, addr = 01:80:c2:00:00:03, port_mask = 0x1 mcast, vid = 100, addr = 01:80:c2:00:00:0e, port_mask = 0x1 mcast, vid = 100, addr = 33:33:00:00:00:fb, port_mask = 0x1 mcast, vid = 100, addr = 33:33:00:01:00:03, port_mask = 0x1 mcast, vid = 100, addr = 01:1b:19:00:00:00, port_mask = 0x1 ^^^ Here mcast entry (ptpl2), is added only for vlan 100 as it should be. Based on net-next/master Ivan Khoronzhuk (4): net: core: dev_addr_lists: add auxiliary func to handle reference address updates net: 8021q: vlan_core: allow use list of vlans for real device net: ethernet: ti: cpsw: fix vlan mcast net: ethernet: ti: cpsw: fix vlan configuration while down/up drivers/net/ethernet/ti/cpsw.c | 189 +++++++++++++++++++++++++++------ include/linux/if_vlan.h | 10 ++ include/linux/netdevice.h | 10 ++ net/8021q/vlan_core.c | 27 +++++ net/core/dev_addr_lists.c | 97 +++++++++++++++++ 5 files changed, 303 insertions(+), 30 deletions(-) -- 2.17.1