From patchwork Thu Aug 24 06:40:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 805253 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="NlbSFK1r"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xdF6z6l7Nz9t2l for ; Thu, 24 Aug 2017 16:40:59 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752005AbdHXGk0 (ORCPT ); Thu, 24 Aug 2017 02:40:26 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:36598 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751353AbdHXGkY (ORCPT ); Thu, 24 Aug 2017 02:40:24 -0400 Received: by mail-wm0-f68.google.com with SMTP id f127so1700228wmf.3 for ; Wed, 23 Aug 2017 23:40:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=XHIJ57xG/r/UFzi7N3mqbttUN0Z6rHe0fwz76q9ftS4=; b=NlbSFK1rykjVcsp0iD8f4ziVBNWNY57Rk/4x8tJxGyl2AYE1Bcl9jr2MPeq8QDtxx/ iJ3pgATornRvozSbuFFEQMDM9yZC341Rg+qa/61AsE/4bRSVHoeThR4Qry1UUKIHZVPV aVQM2alkrH9tJjXzl0wFVcdI3epgoY3HxQR6nKTtGlBUCUtBb1kvwSJi778v9imqhqw4 KaHXyxqPUhnX7L/AXaXI5V4Dh+3JhMBAPKpZbzH7hyfxH8poOURDMn3/Wj6Sz99CHRWJ uN6kr9c2o+/wWrA8m9Kr0gCfCtp7mR9zRvaxSQh1qrcIFvOUm5OALsHb9l/WNAc1LVWl ucJg== 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=XHIJ57xG/r/UFzi7N3mqbttUN0Z6rHe0fwz76q9ftS4=; b=mSZ+Cb8Cgy0GMjqXqzXk52DtNz5jBqJDE52pq1aFjCKwWW9Ddg16MKKnbqcmsm8M6I qUeC3MSUijP2H569mY5rRXYCCTnjamqVFH5lrPWYMPFoxuHcWxuJ4/6bT0MPCslsdWIj nDB5vnw9p97gIQmbyklxPVY9jNtDn3lxuMHsglwbI5CH2VKvbOf9/vTsyEqpf300EI7V Tsi5pXlwMUEXcI+YXRLvJyVJz9Zwg0CCA8xyG2SN5O0UwjI4799aGtNsdNKeEnMba2zK 26j3tX7YFQG+YYLg6mEXth5vaWRWjtDOfjesv9kMR50kAV0cfKMP37xqiXdfNAp0Hfz6 02kg== X-Gm-Message-State: AHYfb5jgXHrMwA/e7Cmj/nP198QNBBpK39FUlmcoc0KVSv9hKv0y4hUE mjGju7NlEp828C9y7xc= X-Received: by 10.28.210.149 with SMTP id j143mr264577wmg.146.1503556822608; Wed, 23 Aug 2017 23:40:22 -0700 (PDT) Received: from localhost (ip-89-177-135-35.net.upcbroadband.cz. [89.177.135.35]) by smtp.gmail.com with ESMTPSA id s86sm4901488wma.10.2017.08.23.23.40.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 23 Aug 2017 23:40:22 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, arkadis@mellanox.com, idosch@mellanox.com, mlxsw@mellanox.com Subject: [patch net-next 06/12] mlxsw: spectrum_router: Add helpers for neighbor access Date: Thu, 24 Aug 2017 08:40:04 +0200 Message-Id: <20170824064010.1646-7-jiri@resnulli.us> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170824064010.1646-1-jiri@resnulli.us> References: <20170824064010.1646-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Arkadi Sharshevsky This is done as a preparation before introducing the ability to dump the host table via dpipe, and to count the table size. The mlxsw's neighbor representative struct stays private to the router module. Signed-off-by: Arkadi Sharshevsky Signed-off-by: Jiri Pirko --- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 36 ++++++++++++++++++++++ .../net/ethernet/mellanox/mlxsw/spectrum_router.h | 13 ++++++++ 2 files changed, 49 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index a0a9728..0b989e1 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -909,6 +909,42 @@ static const struct rhashtable_params mlxsw_sp_neigh_ht_params = { .key_len = sizeof(struct mlxsw_sp_neigh_key), }; +struct mlxsw_sp_neigh_entry * +mlxsw_sp_rif_neigh_next(struct mlxsw_sp_rif *rif, + struct mlxsw_sp_neigh_entry *neigh_entry) +{ + if (!neigh_entry) { + if (list_empty(&rif->neigh_list)) + return NULL; + else + return list_first_entry(&rif->neigh_list, + typeof(*neigh_entry), + rif_list_node); + } + if (neigh_entry->rif_list_node.next == &rif->neigh_list) + return NULL; + return list_next_entry(neigh_entry, rif_list_node); +} + +int mlxsw_sp_neigh_entry_type(struct mlxsw_sp_neigh_entry *neigh_entry) +{ + return neigh_entry->key.n->tbl->family; +} + +unsigned char * +mlxsw_sp_neigh_entry_ha(struct mlxsw_sp_neigh_entry *neigh_entry) +{ + return neigh_entry->ha; +} + +u32 mlxsw_sp_neigh4_entry_dip(struct mlxsw_sp_neigh_entry *neigh_entry) +{ + struct neighbour *n; + + n = neigh_entry->key.n; + return ntohl(*((__be32 *) n->primary_key)); +} + static struct mlxsw_sp_neigh_entry * mlxsw_sp_neigh_entry_alloc(struct mlxsw_sp *mlxsw_sp, struct neighbour *n, u16 rif) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h index a3e8d2b..80ac032 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h @@ -42,6 +42,8 @@ enum mlxsw_sp_rif_counter_dir { MLXSW_SP_RIF_COUNTER_EGRESS, }; +struct mlxsw_sp_neigh_entry; + struct mlxsw_sp_rif *mlxsw_sp_rif_by_index(const struct mlxsw_sp *mlxsw_sp, u16 rif_index); u16 mlxsw_sp_rif_index(const struct mlxsw_sp_rif *rif); @@ -56,5 +58,16 @@ void mlxsw_sp_rif_counter_free(struct mlxsw_sp *mlxsw_sp, int mlxsw_sp_rif_counter_alloc(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_rif *rif, enum mlxsw_sp_rif_counter_dir dir); +struct mlxsw_sp_neigh_entry * +mlxsw_sp_rif_neigh_next(struct mlxsw_sp_rif *rif, + struct mlxsw_sp_neigh_entry *neigh_entry); +int mlxsw_sp_neigh_entry_type(struct mlxsw_sp_neigh_entry *neigh_entry); +unsigned char * +mlxsw_sp_neigh_entry_ha(struct mlxsw_sp_neigh_entry *neigh_entry); +u32 mlxsw_sp_neigh4_entry_dip(struct mlxsw_sp_neigh_entry *neigh_entry); + +#define mlxsw_sp_rif_neigh_for_each(neigh_entry, rif) \ + for (neigh_entry = mlxsw_sp_rif_neigh_next(rif, NULL); neigh_entry; \ + neigh_entry = mlxsw_sp_rif_neigh_next(rif, neigh_entry)) #endif /* _MLXSW_ROUTER_H_*/