aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_tc.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index b60feceab63b..d2fc055f054a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -237,13 +237,16 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
237 237
238 /* Full udp dst port must be given */ 238 /* Full udp dst port must be given */
239 if (memchr_inv(&mask->dst, 0xff, sizeof(mask->dst))) 239 if (memchr_inv(&mask->dst, 0xff, sizeof(mask->dst)))
240 return -EOPNOTSUPP; 240 goto vxlan_match_offload_err;
241 241
242 if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->dst)) && 242 if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->dst)) &&
243 MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) 243 MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap))
244 parse_vxlan_attr(spec, f); 244 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));
246 return -EOPNOTSUPP; 248 return -EOPNOTSUPP;
249 }
247 250
248 MLX5_SET(fte_match_set_lyr_2_4, headers_c, 251 MLX5_SET(fte_match_set_lyr_2_4, headers_c,
249 udp_dport, ntohs(mask->dst)); 252 udp_dport, ntohs(mask->dst));
@@ -255,7 +258,10 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
255 MLX5_SET(fte_match_set_lyr_2_4, headers_v, 258 MLX5_SET(fte_match_set_lyr_2_4, headers_v,
256 udp_sport, ntohs(key->src)); 259 udp_sport, ntohs(key->src));
257 } else { /* udp dst port must be given */ 260 } else { /* udp dst port must be given */
258 return -EOPNOTSUPP; 261vxlan_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;
259 } 265 }
260 266
261 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS)) { 267 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,
346 if (parse_tunnel_attr(priv, spec, f)) 352 if (parse_tunnel_attr(priv, spec, f))
347 return -EOPNOTSUPP; 353 return -EOPNOTSUPP;
348 break; 354 break;
355 case FLOW_DISSECTOR_KEY_IPV6_ADDRS:
356 netdev_warn(priv->netdev,
357 "IPv6 tunnel decap offload isn't supported\n");
349 default: 358 default:
350 return -EOPNOTSUPP; 359 return -EOPNOTSUPP;
351 } 360 }
@@ -792,13 +801,17 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv,
792 int tunnel_type; 801 int tunnel_type;
793 int err; 802 int err;
794 803
795 /* udp dst port must be given */ 804 /* udp dst port must be set */
796 if (!memchr_inv(&key->tp_dst, 0, sizeof(key->tp_dst))) 805 if (!memchr_inv(&key->tp_dst, 0, sizeof(key->tp_dst)))
797 return -EOPNOTSUPP; 806 goto vxlan_encap_offload_err;
798 807
799 /* setting udp src port isn't supported */ 808 /* 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))) {
810vxlan_encap_offload_err:
811 netdev_warn(priv->netdev,
812 "must set udp dst port and not set udp src port\n");
801 return -EOPNOTSUPP; 813 return -EOPNOTSUPP;
814 }
802 815
803 if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->tp_dst)) && 816 if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->tp_dst)) &&
804 MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) { 817 MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) {
@@ -806,6 +819,8 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv,
806 info.tun_id = tunnel_id_to_key32(key->tun_id); 819 info.tun_id = tunnel_id_to_key32(key->tun_id);
807 tunnel_type = MLX5_HEADER_TYPE_VXLAN; 820 tunnel_type = MLX5_HEADER_TYPE_VXLAN;
808 } else { 821 } else {
822 netdev_warn(priv->netdev,
823 "%d isn't an offloaded vxlan udp dport\n", be16_to_cpu(key->tp_dst));
809 return -EOPNOTSUPP; 824 return -EOPNOTSUPP;
810 } 825 }
811 826
@@ -813,6 +828,9 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv,
813 case AF_INET: 828 case AF_INET:
814 info.daddr = key->u.ipv4.dst; 829 info.daddr = key->u.ipv4.dst;
815 break; 830 break;
831 case AF_INET6:
832 netdev_warn(priv->netdev,
833 "IPv6 tunnel encap offload isn't supported\n");
816 default: 834 default:
817 return -EOPNOTSUPP; 835 return -EOPNOTSUPP;
818 } 836 }