aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOr Gerlitz2017-01-10 14:33:30 -0600
committerDavid S. Miller2017-01-10 20:34:01 -0600
commitcd3776638003b3362d9d7d1f27bcb80c276e2c28 (patch)
treea2ac3d5df108928508720bbca55c7f0693f6e0f5
parent57ea52a865144aedbcd619ee0081155e658b6f7d (diff)
downloadmkaricheri-ti-linux-kernel-cd3776638003b3362d9d7d1f27bcb80c276e2c28.tar.gz
mkaricheri-ti-linux-kernel-cd3776638003b3362d9d7d1f27bcb80c276e2c28.tar.xz
mkaricheri-ti-linux-kernel-cd3776638003b3362d9d7d1f27bcb80c276e2c28.zip
net/mlx5e: Properly handle offloading of source udp port for IP tunnels
We can offload the matching on source udp port of ip tunnels for decapsulation. We can not offload setting source udp port for tunnels as part of encapsulation. Fix both the code that deals with matching offload (decap) and the code that deal with encap offload to align with that. Fixes: a54e20b4fcae ('net/mlx5e: Add basic TC tunnel set action for SRIOV offloads') Fixes: bbd00f7e2349 ('net/mlx5e: Add TC tunnel release action for SRIOV offloads') Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Reviewed-by: Hadar Hen Zion <hadarh@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_tc.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index f8829b517156..b60feceab63b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -239,10 +239,6 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
239 if (memchr_inv(&mask->dst, 0xff, sizeof(mask->dst))) 239 if (memchr_inv(&mask->dst, 0xff, sizeof(mask->dst)))
240 return -EOPNOTSUPP; 240 return -EOPNOTSUPP;
241 241
242 /* udp src port isn't supported */
243 if (memchr_inv(&mask->src, 0, sizeof(mask->src)))
244 return -EOPNOTSUPP;
245
246 if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->dst)) && 242 if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->dst)) &&
247 MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) 243 MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap))
248 parse_vxlan_attr(spec, f); 244 parse_vxlan_attr(spec, f);
@@ -254,6 +250,10 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
254 MLX5_SET(fte_match_set_lyr_2_4, headers_v, 250 MLX5_SET(fte_match_set_lyr_2_4, headers_v,
255 udp_dport, ntohs(key->dst)); 251 udp_dport, ntohs(key->dst));
256 252
253 MLX5_SET(fte_match_set_lyr_2_4, headers_c,
254 udp_sport, ntohs(mask->src));
255 MLX5_SET(fte_match_set_lyr_2_4, headers_v,
256 udp_sport, ntohs(key->src));
257 } else { /* udp dst port must be given */ 257 } else { /* udp dst port must be given */
258 return -EOPNOTSUPP; 258 return -EOPNOTSUPP;
259 } 259 }
@@ -796,6 +796,10 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv,
796 if (!memchr_inv(&key->tp_dst, 0, sizeof(key->tp_dst))) 796 if (!memchr_inv(&key->tp_dst, 0, sizeof(key->tp_dst)))
797 return -EOPNOTSUPP; 797 return -EOPNOTSUPP;
798 798
799 /* setting udp src port isn't supported */
800 if (memchr_inv(&key->tp_src, 0, sizeof(key->tp_src)))
801 return -EOPNOTSUPP;
802
799 if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->tp_dst)) && 803 if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->tp_dst)) &&
800 MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) { 804 MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) {
801 info.tp_dst = key->tp_dst; 805 info.tp_dst = key->tp_dst;