Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp2148239pxa; Fri, 7 Aug 2020 04:27:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw9XDBr/fCRmSogA9fXLn65iNZC7TBuHQLZ0rlbR7q9YCBN1hXRtGLKDFmfOSP20tL15iKI X-Received: by 2002:a17:906:1b04:: with SMTP id o4mr9337985ejg.332.1596799627208; Fri, 07 Aug 2020 04:27:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596799627; cv=none; d=google.com; s=arc-20160816; b=NNXnh4jGhyINKspk+WUHs9lCH2v9JeqIshB7evbVAMXm8Uksj+H4pwsvQlLCSml0ci qxBFD7heTQFkrxNUGCerFTSVpMUoTPlAt4NXGVrV5pHb61J6xaS184S1MRD/maO+KMSu T1jPm4zDd9uWIejI0XWQjsyPOkN6MP/YogAqst4fxEGKydgBL/i7yCnbhA8HrSz3Xvqq n163x5qoWJiQEnsqtlZxiK0MYs81Akgr0zqHfazoRs2yKirIP8qPk1c42UKS7FRe0A2b Q+uSoIrsRi0lepHZKtIsIQN8UxrA6svW6OWAOP/19OJJjHqEgrk6alvbPwSBDuyTk1KG WrYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:subject:dkim-signature; bh=O7paGcOXKXd31brfw25UL/WyioLI5ZPkfZ3OZkjGuA4=; b=qnx7lZDdKvtSBGD1STgxUVlgaJuWjoLFuSO3TKh+roDu22i+WWO3Gw/ym1t2sbTGtm NY0tvTS72acMT+8qwJ4gCgAki5RBGbT2nBk76zlWx0BBxnXWF3b9nakSm6YkhrXkNHEC VlJQe3VMFXdPiyteCh455FUSL0aFRNhstyWQlZs0yRu71naPt+P7PyDJVdlN5trYKReU qDJE8kcdH+l0lNxdIboDNogbqE4HJpuBh1eKKUFJ4REQYDJEQzyMSUsfZTsLxzMrKcbF Qwtx6KVe5nTm/BioHox2StxdBuHZNEV+fAlk3h/swiS4BmbQ8YCfziblcQwdFn6GMAyz UjfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cumulusnetworks.com header.s=google header.b=Kg7pTCam; 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=NONE sp=NONE dis=NONE) header.from=cumulusnetworks.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id lc20si5178886ejb.468.2020.08.07.04.26.44; Fri, 07 Aug 2020 04:27:07 -0700 (PDT) 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=@cumulusnetworks.com header.s=google header.b=Kg7pTCam; 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=NONE sp=NONE dis=NONE) header.from=cumulusnetworks.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728278AbgHGLZv (ORCPT + 99 others); Fri, 7 Aug 2020 07:25:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45548 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726291AbgHGLZt (ORCPT ); Fri, 7 Aug 2020 07:25:49 -0400 Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB9D7C061574 for ; Fri, 7 Aug 2020 04:25:48 -0700 (PDT) Received: by mail-wm1-x342.google.com with SMTP id x5so1423708wmi.2 for ; Fri, 07 Aug 2020 04:25:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cumulusnetworks.com; s=google; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=O7paGcOXKXd31brfw25UL/WyioLI5ZPkfZ3OZkjGuA4=; b=Kg7pTCam7u8BpMn7OoNqeyGI8I/P6oFR0aJ89fN2fug7i+K+zbadsgZQ4+kJy7NHm5 PAA3S+C+E+VzX0swEy6cgRbbDFJvIMJnxji6BTjw+S5qJse3ZUYR9CK2slrKapauRYRz AzIb+e8HBy0Z5dahpoFE9RrUeXbk/tgXjXa8w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=O7paGcOXKXd31brfw25UL/WyioLI5ZPkfZ3OZkjGuA4=; b=RvkSEauGWYZOh2mIvwk6VOyMiCFJdd1DQtQZeYDkQRji5E3A+9yuhNG5kVi3IyNo+e DNjXQy8AJB8EF266h9pwe3Miek3vf33bYpYUMHJDnxnrpmfdnwAKpiRj9d7X5ryl3aRr p9D/4kCZd4eiTx1kTmiUi6+6a6iNm0CBX38poIYv3DZ9q709ocY8f7PilummX8rARvol 12PI+uJahVM3LV+EoimA8fAbFfZMLQ8/ng/qYg8w1uam5mBdP1B+ebbxaHfbVY8Qgsel ZTmMZU5lEilc+8WkwIgtpJj09TxA/ypcJU37fyFhWfnqT0UugXAr6szBSqZyfwpbYV3o +xng== X-Gm-Message-State: AOAM532dPtTTvkJ4UYBbgarrqhI8C84DfKN8qNwG4FTDfNYzf/9MieDD c0LVUhYBkzTKpUzSy4fABgsd+Q== X-Received: by 2002:a7b:cbd0:: with SMTP id n16mr12402671wmi.123.1596799547657; Fri, 07 Aug 2020 04:25:47 -0700 (PDT) Received: from [192.168.0.109] (84-238-136-197.ip.btc-net.bg. [84.238.136.197]) by smtp.gmail.com with ESMTPSA id b123sm10147077wme.20.2020.08.07.04.25.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 07 Aug 2020 04:25:46 -0700 (PDT) Subject: Re: [PATCH v5 1/2] net: dsa: Add protocol support for 802.1AD when adding or deleting vlan for dsa switch port To: hongbo.wang@nxp.com, xiaoliang.yang_1@nxp.com, allan.nielsen@microchip.com, po.liu@nxp.com, claudiu.manoil@nxp.com, alexandru.marginean@nxp.com, vladimir.oltean@nxp.com, leoyang.li@nxp.com, mingkai.hu@nxp.com, andrew@lunn.ch, f.fainelli@gmail.com, vivien.didelot@gmail.com, davem@davemloft.net, jiri@resnulli.us, idosch@idosch.org, kuba@kernel.org, vinicius.gomes@intel.com, roopa@cumulusnetworks.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, horatiu.vultur@microchip.com, alexandre.belloni@bootlin.com, UNGLinuxDriver@microchip.com, ivecera@redhat.com References: <20200807111349.20649-1-hongbo.wang@nxp.com> <20200807111349.20649-2-hongbo.wang@nxp.com> From: Nikolay Aleksandrov Message-ID: <1ae01bfb-437b-345d-f000-2c4de103f7b1@cumulusnetworks.com> Date: Fri, 7 Aug 2020 14:25:45 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20200807111349.20649-2-hongbo.wang@nxp.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/08/2020 14:13, hongbo.wang@nxp.com wrote: > From: "hongbo.wang" > > the following command will be supported: > > Set bridge's vlan protocol: > ip link set br0 type bridge vlan_protocol 802.1ad > Add VLAN: > ip link add link swp1 name swp1.100 type vlan protocol 802.1ad id 100 > Delete VLAN: > ip link del link swp1 name swp1.100 > > Signed-off-by: hongbo.wang > --- > include/net/switchdev.h | 1 + > net/bridge/br_switchdev.c | 22 ++++++++++++++++ > net/dsa/dsa_priv.h | 4 +-- > net/dsa/port.c | 6 +++-- > net/dsa/slave.c | 53 ++++++++++++++++++++++++++------------- > net/dsa/tag_8021q.c | 4 +-- > 6 files changed, 66 insertions(+), 24 deletions(-) > Hi, Please put the bridge changes in a separate patch with proper description. Reviewers would easily miss these bridge changes. Also I believe net-next is currently closed and that's where these patches should be targeted (i.e. have net-next after PATCH in the subject). Few more comments below. Thanks, Nik > diff --git a/include/net/switchdev.h b/include/net/switchdev.h > index ff2246914301..7594ea82879f 100644 > --- a/include/net/switchdev.h > +++ b/include/net/switchdev.h > @@ -97,6 +97,7 @@ struct switchdev_obj_port_vlan { > u16 flags; > u16 vid_begin; > u16 vid_end; > + u16 proto; > }; > > #define SWITCHDEV_OBJ_PORT_VLAN(OBJ) \ > diff --git a/net/bridge/br_switchdev.c b/net/bridge/br_switchdev.c > index 015209bf44aa..bcfa00d6d5eb 100644 > --- a/net/bridge/br_switchdev.c > +++ b/net/bridge/br_switchdev.c > @@ -146,6 +146,26 @@ br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type) > } > } > > +static u16 br_switchdev_get_bridge_vlan_proto(struct net_device *dev) const > +{ > + u16 vlan_proto = ETH_P_8021Q; > + struct net_device *br = NULL; > + struct net_bridge_port *p; > + > + if (netif_is_bridge_master(dev)) { > + br = dev; > + } else if (netif_is_bridge_port(dev)) { You can use br_port_get_rtnl_rcu() and just check if p is not NULL. But in general these helpers are used only on bridge devices, I don't think you can reach them with a device that's not either a bridge or a port. So you can just check if it's a bridge master else it's a port. > + p = br_port_get_rcu(dev); > + if (p && p->br) No need to check for p->br, it always exists. > + br = p->br->dev; > + } > + > + if (br) > + br_vlan_get_proto(br, &vlan_proto); > + > + return vlan_proto; > +} > + > int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags, > struct netlink_ext_ack *extack) > { > @@ -157,6 +177,7 @@ int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags, > .vid_end = vid, > }; > > + v.proto = br_switchdev_get_bridge_vlan_proto(dev); > return switchdev_port_obj_add(dev, &v.obj, extack); > } > > @@ -169,5 +190,6 @@ int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid) > .vid_end = vid, > }; > > + v.proto = br_switchdev_get_bridge_vlan_proto(dev); > return switchdev_port_obj_del(dev, &v.obj); > }