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=-8.9 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,SIGNED_OFF_BY, SPF_PASS,USER_AGENT_GIT 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 B3A2BC43381 for ; Wed, 20 Feb 2019 22:35:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 815CF20836 for ; Wed, 20 Feb 2019 22:35:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TgFIG0OX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727430AbfBTWfq (ORCPT ); Wed, 20 Feb 2019 17:35:46 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:43843 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725851AbfBTWfp (ORCPT ); Wed, 20 Feb 2019 17:35:45 -0500 Received: by mail-pg1-f193.google.com with SMTP id l11so1153572pgq.10 for ; Wed, 20 Feb 2019 14:35:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4gwDfNJfNw5HuAToTyMn+kCVHxDG6sibj49WzTaklCo=; b=TgFIG0OXp4TRFx23Wy327FOb2oR+UOxm5VFIT/FJ3adnvhGR6yHqNSCJxpOnNXObz8 8i51C9KPS3VOWOZu97GZmjpUVk7XSmAEcdrDUWZk6s+CROAJA19a0AGjp8aKLB1kFoO9 q7/jR/vmer8Mjn1gZxB2di3d9DHR8Qg6QvtaUdYW4UdQuftaHtS7OOua5ku9t2FnTRLP 91GPa1k48uag9K+H5rHD5PsLaeqH552zxoc157oGZHuPen0eqHvCcTOtuF/AQwYle7S6 surL5VD9aV7VQdCo9Z1J4y6DjDYIT5x9y4lewk3VRVtYyQKN8NQyAA8okCwbNvM3Uugi fFyA== 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:in-reply-to :references; bh=4gwDfNJfNw5HuAToTyMn+kCVHxDG6sibj49WzTaklCo=; b=qQFbx/MWVuO0mrWTQ88Corl6fqmhYBN0ykszcFbajywFMh4zlBTkBUieYtHMumzeDZ y9h4sphh7jbygFpDa2YtMLwvcz9y6SYHU47MZNjJ3dClcO4BVALlvdIHdY40fXlRk4/V 4Mo7yWUFYHDYgDxs/nKoLtmb2kNq52ajabv5P2utVuMIHM4o5GTXv/Q8M7ZHBImNG2eo N8SKXfs6xKT6Y/kDnk0Rv4FZid5xOACjdy7j5r0C0lJQTIt0tNAeg73UIB+xRHE985mz RVwFCglJOw2HLDZU0orVWtOGZ+orTfoiF4kAPTP+y6faHpNMbsbMJa7CQWANyKPSrI7z IINQ== X-Gm-Message-State: AHQUAuZ/Fwnz/UCJd9tywlxqjEGdoZwgmUC9qw4sXM6Ad1Zb7azjmtLQ lhjxu5dU9zQ0m9+56bvvNZkuMNHm X-Google-Smtp-Source: AHgI3IZbSGE0YXEv9gwQIJtfy8YO64jkEea1JxVte4ec3yXk9iU6FvUBTWttHQ1yyZashJ0l6LFaYA== X-Received: by 2002:a62:2cf:: with SMTP id 198mr37113007pfc.67.1550702144174; Wed, 20 Feb 2019 14:35:44 -0800 (PST) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id k7sm14493568pgr.28.2019.02.20.14.35.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Feb 2019 14:35:43 -0800 (PST) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , andrew@lunn.ch, vivien.didelot@gmail.com, davem@davemloft.net, idosch@mellanox.com, jiri@mellanox.com, rmk+kernel@armlinux.org.uk Subject: [PATCH net-next 1/2] net: dsa: Deny enslaving VLAN devices into VLAN aware bridge Date: Wed, 20 Feb 2019 14:35:38 -0800 Message-Id: <20190220223539.22106-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190220223539.22106-1-f.fainelli@gmail.com> References: <20190220223539.22106-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org VLAN devices on top of a DSA network device which is already part of a bridge and with said bridge being VLAN aware should not be allowed to be enslaved into that bridge. For one, this duplicates functionality offered by the VLAN aware bridge which supports tagged and untagged VLAN frames processing and it would make things needlessly complex to e.g.: propagate FDB/MDB accordingly. Signed-off-by: Florian Fainelli --- net/dsa/slave.c | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 2e5e7c04821b..97519ffa445e 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -1416,16 +1416,49 @@ static int dsa_slave_changeupper(struct net_device *dev, return err; } +static int dsa_slave_upper_vlan_check(struct net_device *dev, + struct netdev_notifier_changeupper_info * + info) +{ + struct netlink_ext_ack *ext_ack; + struct net_device *slave; + struct dsa_port *dp; + + ext_ack = netdev_notifier_info_to_extack(&info->info); + + if (!is_vlan_dev(dev)) + return NOTIFY_DONE; + + slave = vlan_dev_real_dev(dev); + if (!dsa_slave_dev_check(slave)) + return NOTIFY_DONE; + + dp = dsa_slave_to_port(slave); + if (!dp->bridge_dev) + return NOTIFY_DONE; + + /* Deny enslaving a VLAN device into a VLAN-aware bridge */ + if (br_vlan_enabled(dp->bridge_dev) && + netif_is_bridge_master(info->upper_dev) && info->linking) { + NL_SET_ERR_MSG_MOD(ext_ack, + "Cannot enslave VLAN device into VLAN aware bridge"); + return notifier_from_errno(-EINVAL); + } + + return NOTIFY_DONE; +} + static int dsa_slave_netdevice_event(struct notifier_block *nb, unsigned long event, void *ptr) { struct net_device *dev = netdev_notifier_info_to_dev(ptr); - if (!dsa_slave_dev_check(dev)) - return NOTIFY_DONE; + if (event == NETDEV_CHANGEUPPER) { + if (!dsa_slave_dev_check(dev)) + return dsa_slave_upper_vlan_check(dev, ptr); - if (event == NETDEV_CHANGEUPPER) return dsa_slave_changeupper(dev, ptr); + } return NOTIFY_DONE; } -- 2.17.1