net/mlx5e: CT: Support restore ipv6 tunnel

Currently the driver restores only IPv4 tunnel headers.
Add support for restoring IPv6 tunnel header.

Fixes: b8ce903709 ("net/mlx5e: Restore tunnel metadata on miss")
Signed-off-by: Jianbo Liu <jianbol@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
Reviewed-by: Oz Shlomo <ozsh@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
Jianbo Liu 2020-07-20 01:36:45 +00:00 committed by Saeed Mahameed
parent 85496a2922
commit 01cefbbe2c

View File

@ -551,19 +551,31 @@ static bool mlx5e_restore_tunnel(struct mlx5e_priv *priv, struct sk_buff *skb,
} }
} }
tun_dst = tun_rx_dst(enc_opts.key.len); if (key.enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) {
if (!tun_dst) { tun_dst = __ip_tun_set_dst(key.enc_ipv4.src, key.enc_ipv4.dst,
WARN_ON_ONCE(true); key.enc_ip.tos, key.enc_ip.ttl,
key.enc_tp.dst, TUNNEL_KEY,
key32_to_tunnel_id(key.enc_key_id.keyid),
enc_opts.key.len);
} else if (key.enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
tun_dst = __ipv6_tun_set_dst(&key.enc_ipv6.src, &key.enc_ipv6.dst,
key.enc_ip.tos, key.enc_ip.ttl,
key.enc_tp.dst, 0, TUNNEL_KEY,
key32_to_tunnel_id(key.enc_key_id.keyid),
enc_opts.key.len);
} else {
netdev_dbg(priv->netdev,
"Couldn't restore tunnel, unsupported addr_type: %d\n",
key.enc_control.addr_type);
return false; return false;
} }
ip_tunnel_key_init(&tun_dst->u.tun_info.key, if (!tun_dst) {
key.enc_ipv4.src, key.enc_ipv4.dst, netdev_dbg(priv->netdev, "Couldn't restore tunnel, no tun_dst\n");
key.enc_ip.tos, key.enc_ip.ttl, return false;
0, /* label */ }
key.enc_tp.src, key.enc_tp.dst,
key32_to_tunnel_id(key.enc_key_id.keyid), tun_dst->u.tun_info.key.tp_src = key.enc_tp.src;
TUNNEL_KEY);
if (enc_opts.key.len) if (enc_opts.key.len)
ip_tunnel_info_opts_set(&tun_dst->u.tun_info, ip_tunnel_info_opts_set(&tun_dst->u.tun_info,