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.8 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 90B36C282CE for ; Mon, 8 Apr 2019 08:45:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 61E9820883 for ; Mon, 8 Apr 2019 08:45:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aqPQ9B3c" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726471AbfDHIpc (ORCPT ); Mon, 8 Apr 2019 04:45:32 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:45887 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726437AbfDHIpc (ORCPT ); Mon, 8 Apr 2019 04:45:32 -0400 Received: by mail-pf1-f196.google.com with SMTP id e24so7190706pfi.12 for ; Mon, 08 Apr 2019 01:45:32 -0700 (PDT) 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 :mime-version:content-transfer-encoding; bh=1dKb938lXEur9zfW0hWJkWN0tESYfyEpSMitHgkka8I=; b=aqPQ9B3cXCyOr1tPv+abCJH/7pTpbxPdlDjeY7H62JQGJ2muQz/82wociB2aoRJESJ m/6aVY46+LmdmsnhFB1qs22LF1G6BgBuBkySC/TdOwMqTSEGGbgU8ORiz2mQP4mu3K/6 MqI4p1zNXAnhCG7mLCAE9+IPR7wWs9aLbr+a1SpWeHZ8gf6HOIcLbS/1++GE1SZJEDS2 rZlV40XuCZjjxExML6LKNHZ1tB10CY1J0uE+CFgmH6mgpuoxF5Jq4M7sYG+w6j8Eq1+F iPRCFK7e99QVI7nhHc6T+krSf+9soA5NnvVPVGRs3ZQjbb7pwOK/7PFmXT74xh1evAKx 1RQA== 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:mime-version:content-transfer-encoding; bh=1dKb938lXEur9zfW0hWJkWN0tESYfyEpSMitHgkka8I=; b=Hvp4O0ZxNPjIVDtxjeYhmA+GeWhOimziCnVln4FzbqOaGbtWqiSQ+l9ArsZiN4Zi6P amoXouSWBDFet5T/fqAYizbFb1oTej6SMoN4YYKXuznH6NFBsJHa8RmLkYObU2L5e9nJ jutpNk+rgXTIdW2FK5trMP02p8sdDp4VNlwg8/1Gu2pQhfY8TbNizUufCzy4ZHqKeiCH phxkJnGc0UxbCUdrYvS4ZXT3hb4TpA3HyL7AC3GXvCbIKh70qdPZOpmx2CnuwLFxfw4f 5gRBTjeSH351F07iKWuj7YS7YHQvJVpe+HV8ykR3f9GP7cmF78WRs6C9MOCWLGKmwsJI HX1g== X-Gm-Message-State: APjAAAXvQ95LwMmLZx/1UPWN5OhvYzPmhaYdjhfNZxEqV0+UJafW2ArZ WnO5fbnnICzmAtDdfRoCF2GwSl8T X-Google-Smtp-Source: APXvYqx/jQaMlY3hqzpd0iBorwxYV33YdsImFrG73QgoL6VOKuqRFF6kOTh62nBLC0omkT5AdARJbQ== X-Received: by 2002:a62:6c6:: with SMTP id 189mr1084561pfg.36.1554713131360; Mon, 08 Apr 2019 01:45:31 -0700 (PDT) Received: from dhcp-12-139.nay.redhat.com ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id c5sm6833647pgh.5.2019.04.08.01.45.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 08 Apr 2019 01:45:30 -0700 (PDT) From: Hangbin Liu To: netdev@vger.kernel.org Cc: David Miller , Stefano Brivio , Jiri Pirko , Marcelo Ricardo Leitner , Hangbin Liu Subject: [PATCHv2 net] team: set slave to promisc if team is already in promisc mode Date: Mon, 8 Apr 2019 16:45:17 +0800 Message-Id: <20190408084517.14712-1-liuhangbin@gmail.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190404124702.17041-1-liuhangbin@gmail.com> References: <20190404124702.17041-1-liuhangbin@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org After adding a team interface to bridge, the team interface will enter promisc mode. Then if we add a new slave to team0, the slave will keep promisc off. Fix it by setting slave to promisc on if team master is already in promisc mode, also do the same for allmulti. v2: add promisc and allmulti checking when delete ports Fixes: 3d249d4ca7d0 ("net: introduce ethernet teaming device") Signed-off-by: Hangbin Liu --- drivers/net/team/team.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 6ed96fdfd96d..9ce61b019aad 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c @@ -1246,6 +1246,23 @@ static int team_port_add(struct team *team, struct net_device *port_dev, goto err_option_port_add; } + /* set promiscuity level to new slave */ + if (dev->flags & IFF_PROMISC) { + err = dev_set_promiscuity(port_dev, 1); + if (err) + goto err_set_slave_promisc; + } + + /* set allmulti level to new slave */ + if (dev->flags & IFF_ALLMULTI) { + err = dev_set_allmulti(port_dev, 1); + if (err) { + if (dev->flags & IFF_PROMISC) + dev_set_promiscuity(port_dev, -1); + goto err_set_slave_promisc; + } + } + netif_addr_lock_bh(dev); dev_uc_sync_multiple(port_dev, dev); dev_mc_sync_multiple(port_dev, dev); @@ -1262,6 +1279,9 @@ static int team_port_add(struct team *team, struct net_device *port_dev, return 0; +err_set_slave_promisc: + __team_option_inst_del_port(team, port); + err_option_port_add: team_upper_dev_unlink(team, port); @@ -1307,6 +1327,12 @@ static int team_port_del(struct team *team, struct net_device *port_dev) team_port_disable(team, port); list_del_rcu(&port->list); + + if (dev->flags & IFF_PROMISC) + dev_set_promiscuity(port_dev, -1); + if (dev->flags & IFF_ALLMULTI) + dev_set_allmulti(port_dev, -1); + team_upper_dev_unlink(team, port); netdev_rx_handler_unregister(port_dev); team_port_disable_netpoll(port); -- 2.19.2