mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
mlxsw: spectrum_dpipe: Add support for controlling nexthop counters
Add support for controlling nexthop counters via dpipe. Signed-off-by: Arkadi Sharshevsky <arkadis@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
190d38a52a
commit
427e652aa3
3 changed files with 36 additions and 6 deletions
|
@ -1132,6 +1132,29 @@ mlxsw_sp_dpipe_table_adj_entries_dump(void *priv, bool counters_enabled,
|
|||
return err;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_dpipe_table_adj_counters_update(void *priv, bool enable)
|
||||
{
|
||||
struct mlxsw_sp *mlxsw_sp = priv;
|
||||
struct mlxsw_sp_nexthop *nh;
|
||||
u32 adj_hash_index = 0;
|
||||
u32 adj_index = 0;
|
||||
|
||||
mlxsw_sp_nexthop_for_each(nh, mlxsw_sp->router) {
|
||||
if (!mlxsw_sp_nexthop_offload(nh) ||
|
||||
mlxsw_sp_nexthop_group_has_ipip(nh))
|
||||
continue;
|
||||
|
||||
mlxsw_sp_nexthop_indexes(nh, &adj_index, &adj_hash_index);
|
||||
if (enable)
|
||||
mlxsw_sp_nexthop_counter_alloc(mlxsw_sp, nh);
|
||||
else
|
||||
mlxsw_sp_nexthop_counter_free(mlxsw_sp, nh);
|
||||
mlxsw_sp_nexthop_update(mlxsw_sp,
|
||||
adj_index + adj_hash_index, nh);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u64
|
||||
mlxsw_sp_dpipe_table_adj_size_get(void *priv)
|
||||
{
|
||||
|
@ -1149,6 +1172,7 @@ static struct devlink_dpipe_table_ops mlxsw_sp_dpipe_table_adj_ops = {
|
|||
.matches_dump = mlxsw_sp_dpipe_table_adj_matches_dump,
|
||||
.actions_dump = mlxsw_sp_dpipe_table_adj_actions_dump,
|
||||
.entries_dump = mlxsw_sp_dpipe_table_adj_entries_dump,
|
||||
.counters_set_update = mlxsw_sp_dpipe_table_adj_counters_update,
|
||||
.size_get = mlxsw_sp_dpipe_table_adj_size_get,
|
||||
};
|
||||
|
||||
|
|
|
@ -2070,8 +2070,8 @@ struct mlxsw_sp_nexthop_group {
|
|||
#define nh_rif nexthops[0].rif
|
||||
};
|
||||
|
||||
static void mlxsw_sp_nexthop_counter_alloc(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_nexthop *nh)
|
||||
void mlxsw_sp_nexthop_counter_alloc(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_nexthop *nh)
|
||||
{
|
||||
struct devlink *devlink;
|
||||
|
||||
|
@ -2086,8 +2086,8 @@ static void mlxsw_sp_nexthop_counter_alloc(struct mlxsw_sp *mlxsw_sp,
|
|||
nh->counter_valid = true;
|
||||
}
|
||||
|
||||
static void mlxsw_sp_nexthop_counter_free(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_nexthop *nh)
|
||||
void mlxsw_sp_nexthop_counter_free(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_nexthop *nh)
|
||||
{
|
||||
if (!nh->counter_valid)
|
||||
return;
|
||||
|
@ -2433,8 +2433,8 @@ static int mlxsw_sp_adj_index_mass_update(struct mlxsw_sp *mlxsw_sp,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_nexthop_update(struct mlxsw_sp *mlxsw_sp, u32 adj_index,
|
||||
struct mlxsw_sp_nexthop *nh)
|
||||
int mlxsw_sp_nexthop_update(struct mlxsw_sp *mlxsw_sp, u32 adj_index,
|
||||
struct mlxsw_sp_nexthop *nh)
|
||||
{
|
||||
struct mlxsw_sp_neigh_entry *neigh_entry = nh->neigh_entry;
|
||||
char ratr_pl[MLXSW_REG_RATR_LEN];
|
||||
|
|
|
@ -122,5 +122,11 @@ bool mlxsw_sp_nexthop_group_has_ipip(struct mlxsw_sp_nexthop *nh);
|
|||
nh = mlxsw_sp_nexthop_next(router, nh))
|
||||
int mlxsw_sp_nexthop_counter_get(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_nexthop *nh, u64 *p_counter);
|
||||
int mlxsw_sp_nexthop_update(struct mlxsw_sp *mlxsw_sp, u32 adj_index,
|
||||
struct mlxsw_sp_nexthop *nh);
|
||||
void mlxsw_sp_nexthop_counter_alloc(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_nexthop *nh);
|
||||
void mlxsw_sp_nexthop_counter_free(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_nexthop *nh);
|
||||
|
||||
#endif /* _MLXSW_ROUTER_H_*/
|
||||
|
|
Loading…
Reference in a new issue