From patchwork Tue Nov 10 15:48:20 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Gardner X-Patchwork-Id: 542500 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id BEDBB141418; Wed, 11 Nov 2015 02:48:38 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical_com.20150623.gappssmtp.com header.i=@canonical_com.20150623.gappssmtp.com header.b=aKKQBdfy; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1ZwB9r-0001Ui-5J; Tue, 10 Nov 2015 15:48:31 +0000 Received: from mail-pa0-f45.google.com ([209.85.220.45]) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1ZwB9l-0001TG-SX for kernel-team@lists.ubuntu.com; Tue, 10 Nov 2015 15:48:26 +0000 Received: by pacdm15 with SMTP id dm15so412242pac.3 for ; Tue, 10 Nov 2015 07:48:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical_com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id; bh=v0fAPrhaDC76NV7FMyhftjgeLnvli+tSGvflCDpxg5o=; b=aKKQBdfyLiodkqVVhhLhROy7NH/mDLsbu3JBlbXPCKEl1+AsQIPB1nKI+/gfMpbm8b 92yKO6RK1Tom0jFKnuzl6TMQeXy4gN7Og5PBmWZGxWNN1xfzdiF0UCdJEu88HZ56urwI V/YyL+fBMMkNR9k0NMaPnb4Klj6x4Co2dSPdkv3vTj8IZ0GqSyMIcLAzdc7vm7rLp0yp G++jgvgyT+zkN26Gb0OeAZdn6rP0do7GrAnLs9VwRqg81rAoPFS1FuqSd5fwa1Vl2TK2 Z7C0M+Vi8oNMjx/0NwX9TWHO/ZI9tfbZxC3gIfCd4SB0Z/jL5s8vfleuBcC5WfGKh8iv zK/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=v0fAPrhaDC76NV7FMyhftjgeLnvli+tSGvflCDpxg5o=; b=bG1SwkIeyCmj5pEV0vaJ/QeuVShhqcBA+MtgEVikfv5NqLcoYnLsvMeBuX63cRZkoy LQUeS87PTkGxdFUFQ/n4cas1F15KOBYY3gcw+HECZYY8zR9T3lKYeYOwwsQb+o3kSzVD vxCY7NRpZetSVwBS0jqxPv4hH4aN189Uxa+04wB78RncAe/7K0bMQNPYhALv3fV7YXHi DI7gOT14Vsk+t1GZWoCkr8eWAikn0MOdg2jyiSY0ZgnSluQqRxH9LdlC8Dd0vcdw6nAD 1tdZlWRv5Z3yCPQ9HypNoqgSZb8/BRy4wWVWIGPbI3kEqF653vP/eVrmzfoPzgqSMHc6 n3pA== X-Gm-Message-State: ALoCoQliy0y9UiyqeppYl/tDx1Iug2e29l/jCgfntL4Mob8iVM5UJSFVS3fHSDYGs4RPHHMW4N6r X-Received: by 10.68.91.98 with SMTP id cd2mr6798602pbb.9.1447170505179; Tue, 10 Nov 2015 07:48:25 -0800 (PST) Received: from localhost.localdomain (host-174-45-44-32.hln-mt.client.bresnan.net. [174.45.44.32]) by smtp.gmail.com with ESMTPSA id ve8sm4799790pbc.48.2015.11.10.07.48.23 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 10 Nov 2015 07:48:24 -0800 (PST) From: tim.gardner@canonical.com To: kernel-team@lists.ubuntu.com Subject: [PATCH Wily SRU] net/mlx5e: Disable VLAN filter in promiscuous mode Date: Tue, 10 Nov 2015 08:48:20 -0700 Message-Id: <1447170500-19926-1-git-send-email-tim.gardner@canonical.com> X-Mailer: git-send-email 1.9.1 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: kernel-team-bounces@lists.ubuntu.com From: Achiad Shochat When the device was set to promiscuous mode, we didn't disable VLAN filtering, which is wrong behaviour, fix that. Now when the device is set to promiscuous mode RX packets sent over any VLAN (or no VLAN tag at all) will be accepted. Signed-off-by: Achiad Shochat Signed-off-by: Or Gerlitz Signed-off-by: David S. Miller (back ported from commit c07543431e9f3d126d083808efa0e76461d8833b) Signed-off-by: Talat Batheesh --- .../ethernet/mellanox/mlx5/core/en_flow_table.c | 38 +++++++++++++--------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_flow_table.c b/drivers/net/ethernet/mellanox/mlx5/core/en_flow_table.c index 70ec31b..40c67d7 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_flow_table.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_flow_table.c @@ -594,26 +594,24 @@ static void mlx5e_del_vlan_rule(struct mlx5e_priv *priv, void mlx5e_enable_vlan_filter(struct mlx5e_priv *priv) { - WARN_ON(!mutex_is_locked(&priv->state_lock)); + if (!priv->vlan.filter_disabled) + return; - if (priv->vlan.filter_disabled) { - priv->vlan.filter_disabled = false; - if (test_bit(MLX5E_STATE_OPENED, &priv->state)) - mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, - 0); - } + priv->vlan.filter_disabled = false; + if (priv->netdev->flags & IFF_PROMISC) + return; + mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, 0); } void mlx5e_disable_vlan_filter(struct mlx5e_priv *priv) { - WARN_ON(!mutex_is_locked(&priv->state_lock)); + if (priv->vlan.filter_disabled) + return; - if (!priv->vlan.filter_disabled) { - priv->vlan.filter_disabled = true; - if (test_bit(MLX5E_STATE_OPENED, &priv->state)) - mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, - 0); - } + priv->vlan.filter_disabled = true; + if (priv->netdev->flags & IFF_PROMISC) + return; + mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, 0); } int mlx5e_vlan_rx_add_vid(struct net_device *dev, __always_unused __be16 proto, @@ -775,8 +773,12 @@ void mlx5e_set_rx_mode_core(struct mlx5e_priv *priv) bool enable_broadcast = !ea->broadcast_enabled && broadcast_enabled; bool disable_broadcast = ea->broadcast_enabled && !broadcast_enabled; - if (enable_promisc) + if (enable_promisc) { mlx5e_add_eth_addr_rule(priv, &ea->promisc, MLX5E_PROMISC); + if (!priv->vlan.filter_disabled) + mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, + 0); + } if (enable_allmulti) mlx5e_add_eth_addr_rule(priv, &ea->allmulti, MLX5E_ALLMULTI); if (enable_broadcast) @@ -788,8 +790,12 @@ void mlx5e_set_rx_mode_core(struct mlx5e_priv *priv) mlx5e_del_eth_addr_from_flow_table(priv, &ea->broadcast); if (disable_allmulti) mlx5e_del_eth_addr_from_flow_table(priv, &ea->allmulti); - if (disable_promisc) + if (disable_promisc) { + if (!priv->vlan.filter_disabled) + mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_ANY_VID, + 0); mlx5e_del_eth_addr_from_flow_table(priv, &ea->promisc); + } ea->promisc_enabled = promisc_enabled; ea->allmulti_enabled = allmulti_enabled;