diff options
author | Yotam Gigi <yotamg@mellanox.com> | 2016-07-05 11:27:43 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-07-05 09:06:29 -0700 |
commit | c723c735fa6bacfdb01c4697c2cfeba142990d18 (patch) | |
tree | 52ca53d6e985d9c6853683d5fddab37941f32654 /drivers/net/ethernet/mellanox/mlxsw/spectrum.h | |
parent | 2a4501ae18b52fcdf553404286e6cefabd1d17ec (diff) | |
download | op-kernel-dev-c723c735fa6bacfdb01c4697c2cfeba142990d18.zip op-kernel-dev-c723c735fa6bacfdb01c4697c2cfeba142990d18.tar.gz |
mlxsw: spectrum_router: Periodically update the kernel's neigh table
As previously explained, the driver should periodically poll the device
for neighbours activity according to the configured DELAY_PROBE_TIME.
This will prevent active neighbours from staying in STALE state for long
periods of time.
During init configure the polling interval according to the
DELAY_PROBE_TIME used in the default table. In addition, register a
netevent notification block, so that the interval is updated whenever
DELAY_PROBE_TIME changes.
Using the computed interval schedule a delayed work, which will update
the kernel via neigh_event_send() on any active neighbour since the last
delayed work.
Signed-off-by: Yotam Gigi <yotamg@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlxsw/spectrum.h')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h index 734c5ba..9c2a60f 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h @@ -214,6 +214,10 @@ struct mlxsw_sp_router { struct mlxsw_sp_lpm_tree lpm_trees[MLXSW_SP_LPM_TREE_COUNT]; struct mlxsw_sp_vr vrs[MLXSW_SP_VIRTUAL_ROUTER_MAX]; struct rhashtable neigh_ht; + struct { + struct delayed_work dw; + unsigned long interval; /* ms */ + } neighs_update; }; struct mlxsw_sp { |