mlxsw: spectrum_router: Add support for setting counters on IPv6 neighbors
authorArkadi Sharshevsky <arkadis@mellanox.com>
Thu, 31 Aug 2017 15:59:18 +0000 (17:59 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 31 Aug 2017 21:42:19 +0000 (14:42 -0700)
Add support for setting counters on IPv6 neighbors based on dpipe's host6
table counter status.

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>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index db57c0c4c9d8c07728267cf95348664f46cb4dbf..0cf68102d113b7afdd9ccb4168b9d049b85a0681 100644 (file)
@@ -1008,21 +1008,33 @@ mlxsw_sp_neigh_entry_remove(struct mlxsw_sp *mlxsw_sp,
 }
 
 static bool
-mlxsw_sp_neigh4_counter_should_alloc(struct mlxsw_sp *mlxsw_sp)
+mlxsw_sp_neigh_counter_should_alloc(struct mlxsw_sp *mlxsw_sp,
+                                   struct mlxsw_sp_neigh_entry *neigh_entry)
 {
        struct devlink *devlink;
+       const char *table_name;
+
+       switch (mlxsw_sp_neigh_entry_type(neigh_entry)) {
+       case AF_INET:
+               table_name = MLXSW_SP_DPIPE_TABLE_NAME_HOST4;
+               break;
+       case AF_INET6:
+               table_name = MLXSW_SP_DPIPE_TABLE_NAME_HOST6;
+               break;
+       default:
+               WARN_ON(1);
+               return false;
+       }
 
        devlink = priv_to_devlink(mlxsw_sp->core);
-       return devlink_dpipe_table_counter_enabled(devlink,
-                                                  MLXSW_SP_DPIPE_TABLE_NAME_HOST4);
+       return devlink_dpipe_table_counter_enabled(devlink, table_name);
 }
 
 static void
 mlxsw_sp_neigh_counter_alloc(struct mlxsw_sp *mlxsw_sp,
                             struct mlxsw_sp_neigh_entry *neigh_entry)
 {
-       if (mlxsw_sp_neigh_entry_type(neigh_entry) != AF_INET ||
-           !mlxsw_sp_neigh4_counter_should_alloc(mlxsw_sp))
+       if (!mlxsw_sp_neigh_counter_should_alloc(mlxsw_sp, neigh_entry))
                return;
 
        if (mlxsw_sp_flow_counter_alloc(mlxsw_sp, &neigh_entry->counter_index))