diff options
author | Yuval Mintz <yuvalm@mellanox.com> | 2017-12-15 02:44:21 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-12-15 10:47:36 -0500 |
commit | fccff0862838908d21eaf956d57e09c6c189f7c5 (patch) | |
tree | 3728e8371480245224140af5e5f43670dffc3d06 | |
parent | 8c8f67a46f2bf33556ad12a1971734047b60831a (diff) |
mlxsw: spectrum: Disable MAC learning for ovs port
Learning is currently enabled for ports which are OVS slaves -
even though OVS doesn't need this indication.
Since we're not associating a fid with the port, HW would continuously
notify driver of learned [& aged] MACs which would be logged as errors.
Fixes: 2b94e58df58c ("mlxsw: spectrum: Allow ports to work under OVS master")
Signed-off-by: Yuval Mintz <yuvalm@mellanox.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index 2d0897b7d860..9bd8d28de152 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c | |||
@@ -4300,6 +4300,7 @@ static int mlxsw_sp_port_stp_set(struct mlxsw_sp_port *mlxsw_sp_port, | |||
4300 | 4300 | ||
4301 | static int mlxsw_sp_port_ovs_join(struct mlxsw_sp_port *mlxsw_sp_port) | 4301 | static int mlxsw_sp_port_ovs_join(struct mlxsw_sp_port *mlxsw_sp_port) |
4302 | { | 4302 | { |
4303 | u16 vid = 1; | ||
4303 | int err; | 4304 | int err; |
4304 | 4305 | ||
4305 | err = mlxsw_sp_port_vp_mode_set(mlxsw_sp_port, true); | 4306 | err = mlxsw_sp_port_vp_mode_set(mlxsw_sp_port, true); |
@@ -4312,8 +4313,19 @@ static int mlxsw_sp_port_ovs_join(struct mlxsw_sp_port *mlxsw_sp_port) | |||
4312 | true, false); | 4313 | true, false); |
4313 | if (err) | 4314 | if (err) |
4314 | goto err_port_vlan_set; | 4315 | goto err_port_vlan_set; |
4316 | |||
4317 | for (; vid <= VLAN_N_VID - 1; vid++) { | ||
4318 | err = mlxsw_sp_port_vid_learning_set(mlxsw_sp_port, | ||
4319 | vid, false); | ||
4320 | if (err) | ||
4321 | goto err_vid_learning_set; | ||
4322 | } | ||
4323 | |||
4315 | return 0; | 4324 | return 0; |
4316 | 4325 | ||
4326 | err_vid_learning_set: | ||
4327 | for (vid--; vid >= 1; vid--) | ||
4328 | mlxsw_sp_port_vid_learning_set(mlxsw_sp_port, vid, true); | ||
4317 | err_port_vlan_set: | 4329 | err_port_vlan_set: |
4318 | mlxsw_sp_port_stp_set(mlxsw_sp_port, false); | 4330 | mlxsw_sp_port_stp_set(mlxsw_sp_port, false); |
4319 | err_port_stp_set: | 4331 | err_port_stp_set: |
@@ -4323,6 +4335,12 @@ err_port_stp_set: | |||
4323 | 4335 | ||
4324 | static void mlxsw_sp_port_ovs_leave(struct mlxsw_sp_port *mlxsw_sp_port) | 4336 | static void mlxsw_sp_port_ovs_leave(struct mlxsw_sp_port *mlxsw_sp_port) |
4325 | { | 4337 | { |
4338 | u16 vid; | ||
4339 | |||
4340 | for (vid = VLAN_N_VID - 1; vid >= 1; vid--) | ||
4341 | mlxsw_sp_port_vid_learning_set(mlxsw_sp_port, | ||
4342 | vid, true); | ||
4343 | |||
4326 | mlxsw_sp_port_vlan_set(mlxsw_sp_port, 2, VLAN_N_VID - 1, | 4344 | mlxsw_sp_port_vlan_set(mlxsw_sp_port, 2, VLAN_N_VID - 1, |
4327 | false, false); | 4345 | false, false); |
4328 | mlxsw_sp_port_stp_set(mlxsw_sp_port, false); | 4346 | mlxsw_sp_port_stp_set(mlxsw_sp_port, false); |