Skip to content

Commit 01cefbb

Browse files
jialiu02Saeed Mahameed
authored andcommitted
net/mlx5e: CT: Support restore ipv6 tunnel
Currently the driver restores only IPv4 tunnel headers. Add support for restoring IPv6 tunnel header. Fixes: b8ce903 ("net/mlx5e: Restore tunnel metadata on miss") Signed-off-by: Jianbo Liu <[email protected]> Reviewed-by: Roi Dayan <[email protected]> Reviewed-by: Oz Shlomo <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent 85496a2 commit 01cefbb

File tree

1 file changed

+21
-9
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core/en/rep

1 file changed

+21
-9
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -551,19 +551,31 @@ static bool mlx5e_restore_tunnel(struct mlx5e_priv *priv, struct sk_buff *skb,
551551
}
552552
}
553553

554-
tun_dst = tun_rx_dst(enc_opts.key.len);
554+
if (key.enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) {
555+
tun_dst = __ip_tun_set_dst(key.enc_ipv4.src, key.enc_ipv4.dst,
556+
key.enc_ip.tos, key.enc_ip.ttl,
557+
key.enc_tp.dst, TUNNEL_KEY,
558+
key32_to_tunnel_id(key.enc_key_id.keyid),
559+
enc_opts.key.len);
560+
} else if (key.enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
561+
tun_dst = __ipv6_tun_set_dst(&key.enc_ipv6.src, &key.enc_ipv6.dst,
562+
key.enc_ip.tos, key.enc_ip.ttl,
563+
key.enc_tp.dst, 0, TUNNEL_KEY,
564+
key32_to_tunnel_id(key.enc_key_id.keyid),
565+
enc_opts.key.len);
566+
} else {
567+
netdev_dbg(priv->netdev,
568+
"Couldn't restore tunnel, unsupported addr_type: %d\n",
569+
key.enc_control.addr_type);
570+
return false;
571+
}
572+
555573
if (!tun_dst) {
556-
WARN_ON_ONCE(true);
574+
netdev_dbg(priv->netdev, "Couldn't restore tunnel, no tun_dst\n");
557575
return false;
558576
}
559577

560-
ip_tunnel_key_init(&tun_dst->u.tun_info.key,
561-
key.enc_ipv4.src, key.enc_ipv4.dst,
562-
key.enc_ip.tos, key.enc_ip.ttl,
563-
0, /* label */
564-
key.enc_tp.src, key.enc_tp.dst,
565-
key32_to_tunnel_id(key.enc_key_id.keyid),
566-
TUNNEL_KEY);
578+
tun_dst->u.tun_info.key.tp_src = key.enc_tp.src;
567579

568580
if (enc_opts.key.len)
569581
ip_tunnel_info_opts_set(&tun_dst->u.tun_info,

0 commit comments

Comments
 (0)