uplink_dev = mlx5_eswitch_uplink_get_proto_dev(esw, REP_ETH);
                attr->fl.fl4.flowi4_oif = uplink_dev->ifindex;
+       } else {
+               struct mlx5e_tc_tunnel *tunnel = mlx5e_get_tc_tun(mirred_dev);
+
+               if (tunnel && tunnel->get_remote_ifindex)
+                       attr->fl.fl4.flowi4_oif = tunnel->get_remote_ifindex(mirred_dev);
        }
 
        rt = ip_route_output_key(dev_net(mirred_dev), &attr->fl.fl4);
                                       struct net_device *mirred_dev,
                                       struct mlx5e_tc_tun_route_attr *attr)
 {
+       struct mlx5e_tc_tunnel *tunnel = mlx5e_get_tc_tun(mirred_dev);
        struct net_device *route_dev;
        struct net_device *out_dev;
        struct dst_entry *dst;
        struct neighbour *n;
        int ret;
 
+       if (tunnel && tunnel->get_remote_ifindex)
+               attr->fl.fl6.flowi6_oif = tunnel->get_remote_ifindex(mirred_dev);
        dst = ipv6_stub->ipv6_dst_lookup_flow(dev_net(mirred_dev), NULL, &attr->fl.fl6,
                                              NULL);
        if (IS_ERR(dst))
 
                            void *headers_v);
        bool (*encap_info_equal)(struct mlx5e_encap_key *a,
                                 struct mlx5e_encap_key *b);
+       int (*get_remote_ifindex)(struct net_device *mirred_dev);
 };
 
 extern struct mlx5e_tc_tunnel vxlan_tunnel;
 
        return 0;
 }
 
+static int mlx5e_tc_tun_get_remote_ifindex(struct net_device *mirred_dev)
+{
+       const struct vxlan_dev *vxlan = netdev_priv(mirred_dev);
+       const struct vxlan_rdst *dst = &vxlan->default_dst;
+
+       return dst->remote_ifindex;
+}
+
 struct mlx5e_tc_tunnel vxlan_tunnel = {
        .tunnel_type          = MLX5E_TC_TUNNEL_TYPE_VXLAN,
        .match_level          = MLX5_MATCH_L4,
        .parse_udp_ports      = mlx5e_tc_tun_parse_udp_ports_vxlan,
        .parse_tunnel         = mlx5e_tc_tun_parse_vxlan,
        .encap_info_equal     = mlx5e_tc_tun_encap_info_equal_generic,
+       .get_remote_ifindex   = mlx5e_tc_tun_get_remote_ifindex,
 };