Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp987181yba; Thu, 4 Apr 2019 01:49:16 -0700 (PDT) X-Google-Smtp-Source: APXvYqxNGSPIESjUbmLfzq98pa+BlS+3pTCGNrKZ62HaNtIKXMjXq6VFD3lUahejUpoYLuKJxTKr X-Received: by 2002:a63:2c55:: with SMTP id s82mr4442219pgs.356.1554367756485; Thu, 04 Apr 2019 01:49:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554367756; cv=none; d=google.com; s=arc-20160816; b=yYkmsjLQSTfbKnKWNwD538Fw9pKXFlB+MVBkTvAWSAZ4gHpQgSeKuBYZPcF0BKWN3D 2n3rdlfdX48h2XvUZZUhz3GDGc3A3F1q7HyApyPZUo4mUaaGOq6JqCBmknWfnFGhPf0E pSXWZdLj7G95F+5MB5vHAHWzL84VXuwxpveYFekgIHk7nAZFrQOEq6KxJS+bkk84GRUV e3VepWgR978B3yA/pBQD1PAiQi+FXeqFqTaHifxPzxKdPlDcuQqNhZtE2lGucCKaCgR1 Oet1FhnjopnPZC1OhLqQbBSV0kgic509PQfSwDNlsCKx5M3B3AbPovjZCekXoMimorU4 bxfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=zPHfsmExTT+/d4uguYjWU68Yv+5ZDEBWjYZeod32njs=; b=GlqiPXQh7MDE/AaXWE44+eJkJmSeQcCWhYUw5cxFBhZk2bzv8kVuQv1J8JwwfNrp7h VVTh1bv/GXVPIVuwnAzxMjoPEw6bFdRuWBN+4G7hmkuT+31s6fdB3Ntik4TU/hVDm8Yx IPqa5wpcS/6W5m7qVaNNINJr4Cvoztp568HM6ZpcTiii+QAtAUCA7nCwcPV91drCxRiJ 9WrN8/jwWRwEcDR3SXtXnogz1aspCEjlw6wQII3yFGutvpzod3xqvPmffpbDcLxhaoru CNjbYEA3w4v27DyfA9cJ2RwHlJOW4GUr/xGduiZ24Bw+ONwUOtOMj3rYeU0g8ug6Chkd uXUg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y24si15382241plr.255.2019.04.04.01.49.01; Thu, 04 Apr 2019 01:49:16 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728864AbfDDIrs (ORCPT + 99 others); Thu, 4 Apr 2019 04:47:48 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:6244 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728643AbfDDIrG (ORCPT ); Thu, 4 Apr 2019 04:47:06 -0400 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id A540D6AE4AE9E3F32888; Thu, 4 Apr 2019 16:47:03 +0800 (CST) Received: from localhost.localdomain (10.67.212.75) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.408.0; Thu, 4 Apr 2019 16:46:54 +0800 From: Yonglong Liu To: CC: , , , , , Subject: [PATCH net 4/6] net: hns: fix ICMP6 neighbor solicitation messages discard problem Date: Thu, 4 Apr 2019 16:46:45 +0800 Message-ID: <1554367607-130891-5-git-send-email-liuyonglong@huawei.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1554367607-130891-1-git-send-email-liuyonglong@huawei.com> References: <1554367607-130891-1-git-send-email-liuyonglong@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.67.212.75] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ICMP6 neighbor solicitation messages will be discard by the Hip06 chips, because of not setting forwarding pool. Enable promisc mode has the same problem. This patch fix the wrong forwarding table configs for the multicast vague matching when enable promisc mode, and add forwarding pool for the forwarding table. Signed-off-by: Yonglong Liu --- drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c | 33 ++++++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c index ac55db0..f5ff07c 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c @@ -2750,6 +2750,17 @@ int hns_dsaf_get_regs_count(void) return DSAF_DUMP_REGS_NUM; } +static int hns_dsaf_get_port_id(u8 port) +{ + if (port < DSAF_SERVICE_NW_NUM) + return port; + + if (port >= DSAF_BASE_INNER_PORT_NUM) + return port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM; + + return -EINVAL; +} + static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port) { struct dsaf_tbl_tcam_ucast_cfg tbl_tcam_ucast = {0, 1, 0, 0, 0x80}; @@ -2815,23 +2826,33 @@ static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port) memset(&temp_key, 0x0, sizeof(temp_key)); mask_entry.addr[0] = 0x01; hns_dsaf_set_mac_key(dsaf_dev, &mask_key, mask_entry.in_vlan_id, - port, mask_entry.addr); + 0xf, mask_entry.addr); tbl_tcam_mcast.tbl_mcast_item_vld = 1; tbl_tcam_mcast.tbl_mcast_old_en = 0; - if (port < DSAF_SERVICE_NW_NUM) { - mskid = port; - } else if (port >= DSAF_BASE_INNER_PORT_NUM) { - mskid = port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM; - } else { + /* set MAC port to handle multicast */ + mskid = hns_dsaf_get_port_id(port); + if (mskid == -EINVAL) { dev_err(dsaf_dev->dev, "%s,pnum(%d)error,key(%#x:%#x)\n", dsaf_dev->ae_dev.name, port, mask_key.high.val, mask_key.low.val); return; } + dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32], + mskid % 32, 1); + /* set pool bit map to handle multicast */ + mskid = hns_dsaf_get_port_id(port_num); + if (mskid == -EINVAL) { + dev_err(dsaf_dev->dev, + "%s, pool bit map pnum(%d)error,key(%#x:%#x)\n", + dsaf_dev->ae_dev.name, port_num, + mask_key.high.val, mask_key.low.val); + return; + } dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32], mskid % 32, 1); + memcpy(&temp_key, &mask_key, sizeof(mask_key)); hns_dsaf_tcam_mc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_mc, (struct dsaf_tbl_tcam_data *)(&mask_key), -- 2.8.1