|
@@ -267,12 +267,15 @@ static int parse_tunnel_attr(struct mlx5e_priv *priv,
|
|
|
skb_flow_dissector_target(f->dissector,
|
|
|
FLOW_DISSECTOR_KEY_ENC_PORTS,
|
|
|
f->mask);
|
|
|
+ struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
|
|
|
+ struct net_device *up_dev = mlx5_eswitch_get_uplink_netdev(esw);
|
|
|
+ struct mlx5e_priv *up_priv = netdev_priv(up_dev);
|
|
|
|
|
|
/* Full udp dst port must be given */
|
|
|
if (memchr_inv(&mask->dst, 0xff, sizeof(mask->dst)))
|
|
|
goto vxlan_match_offload_err;
|
|
|
|
|
|
- if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->dst)) &&
|
|
|
+ if (mlx5e_vxlan_lookup_port(up_priv, be16_to_cpu(key->dst)) &&
|
|
|
MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap))
|
|
|
parse_vxlan_attr(spec, f);
|
|
|
else {
|
|
@@ -995,6 +998,8 @@ static int mlx5e_attach_encap(struct mlx5e_priv *priv,
|
|
|
struct mlx5_esw_flow_attr *attr)
|
|
|
{
|
|
|
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
|
|
|
+ struct net_device *up_dev = mlx5_eswitch_get_uplink_netdev(esw);
|
|
|
+ struct mlx5e_priv *up_priv = netdev_priv(up_dev);
|
|
|
unsigned short family = ip_tunnel_info_af(tun_info);
|
|
|
struct ip_tunnel_key *key = &tun_info->key;
|
|
|
struct mlx5_encap_entry *e;
|
|
@@ -1015,7 +1020,7 @@ vxlan_encap_offload_err:
|
|
|
return -EOPNOTSUPP;
|
|
|
}
|
|
|
|
|
|
- if (mlx5e_vxlan_lookup_port(priv, be16_to_cpu(key->tp_dst)) &&
|
|
|
+ if (mlx5e_vxlan_lookup_port(up_priv, be16_to_cpu(key->tp_dst)) &&
|
|
|
MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) {
|
|
|
tunnel_type = MLX5_HEADER_TYPE_VXLAN;
|
|
|
} else {
|