Skip to content

Commit 2fcd82e

Browse files
ogerlitzdavem330
authored andcommitted
net/mlx5e: Warn when rejecting offload attempts of IP tunnels
We silently reject offloading of IPv6 tunnels, non vxlan tunnels, vxlan tunnels where the dst port to match is not provided, etc. Be a bit more verbose and print a warning so the user better realizes what went wrong here and can fix it. Fixes: a54e20b ('net/mlx5e: Add basic TC tunnel set action for SRIOV offloads') Fixes: bbd00f7 ('net/mlx5e: Add TC tunnel release action for SRIOV offloads') Signed-off-by: Or Gerlitz <[email protected]> Reviewed-by: Hadar Hen Zion <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent cd37766 commit 2fcd82e

File tree

1 file changed

+24
-6
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core

1 file changed

+24
-6
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -237,13 +237,16 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
237237

238238
/* Full udp dst port must be given */
239239
if (memchr_inv(&mask->dst, 0xff, sizeof(mask->dst)))
240-
return -EOPNOTSUPP;
240+
goto vxlan_match_offload_err;
241241

242242
if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->dst)) &&
243243
MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap))
244244
parse_vxlan_attr(spec, f);
245-
else
245+
else {
246+
netdev_warn(priv->netdev,
247+
"%d isn't an offloaded vxlan udp dport\n", be16_to_cpu(key->dst));
246248
return -EOPNOTSUPP;
249+
}
247250

248251
MLX5_SET(fte_match_set_lyr_2_4, headers_c,
249252
udp_dport, ntohs(mask->dst));
@@ -255,7 +258,10 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
255258
MLX5_SET(fte_match_set_lyr_2_4, headers_v,
256259
udp_sport, ntohs(key->src));
257260
} else { /* udp dst port must be given */
258-
return -EOPNOTSUPP;
261+
vxlan_match_offload_err:
262+
netdev_warn(priv->netdev,
263+
"IP tunnel decap offload supported only for vxlan, must set UDP dport\n");
264+
return -EOPNOTSUPP;
259265
}
260266

261267
if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS)) {
@@ -346,6 +352,9 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,
346352
if (parse_tunnel_attr(priv, spec, f))
347353
return -EOPNOTSUPP;
348354
break;
355+
case FLOW_DISSECTOR_KEY_IPV6_ADDRS:
356+
netdev_warn(priv->netdev,
357+
"IPv6 tunnel decap offload isn't supported\n");
349358
default:
350359
return -EOPNOTSUPP;
351360
}
@@ -792,27 +801,36 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv,
792801
int tunnel_type;
793802
int err;
794803

795-
/* udp dst port must be given */
804+
/* udp dst port must be set */
796805
if (!memchr_inv(&key->tp_dst, 0, sizeof(key->tp_dst)))
797-
return -EOPNOTSUPP;
806+
goto vxlan_encap_offload_err;
798807

799808
/* setting udp src port isn't supported */
800-
if (memchr_inv(&key->tp_src, 0, sizeof(key->tp_src)))
809+
if (memchr_inv(&key->tp_src, 0, sizeof(key->tp_src))) {
810+
vxlan_encap_offload_err:
811+
netdev_warn(priv->netdev,
812+
"must set udp dst port and not set udp src port\n");
801813
return -EOPNOTSUPP;
814+
}
802815

803816
if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->tp_dst)) &&
804817
MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) {
805818
info.tp_dst = key->tp_dst;
806819
info.tun_id = tunnel_id_to_key32(key->tun_id);
807820
tunnel_type = MLX5_HEADER_TYPE_VXLAN;
808821
} else {
822+
netdev_warn(priv->netdev,
823+
"%d isn't an offloaded vxlan udp dport\n", be16_to_cpu(key->tp_dst));
809824
return -EOPNOTSUPP;
810825
}
811826

812827
switch (family) {
813828
case AF_INET:
814829
info.daddr = key->u.ipv4.dst;
815830
break;
831+
case AF_INET6:
832+
netdev_warn(priv->netdev,
833+
"IPv6 tunnel encap offload isn't supported\n");
816834
default:
817835
return -EOPNOTSUPP;
818836
}

0 commit comments

Comments
 (0)