_In_ sai_object_id_t table_meta_tunnel_entry_id,
        _In_ uint32_t number_of_counters,
        _In_ const sai_stat_id_t *counter_ids)
{
    MUTEX();

    SWSS_LOG_ENTER();

    return SAI_STATUS_NOT_IMPLEMENTED;
}

REDIS_GENERIC_QUAD(TABLE_META_TUNNEL_ENTRY,table_meta_tunnel_entry);

const sai_bmtor_api_t redis_bmtor_api = {

    REDIS_GENERIC_QUAD_API(table_bitmap_classification_entry)

    redis_get_table_bitmap_classification_entry_stats,
    redis_get_table_bitmap_classification_entry_stats_ext,
    redis_clear_table_bitmap_classification_entry_stats,

    REDIS_GENERIC_QUAD_API(table_bitmap_router_entry)

    redis_get_table_bitmap_router_entry_stats,
    redis_get_table_bitmap_router_entry_stats_ext,
    redis_clear_table_bitmap_router_entry_stats,

    REDIS_GENERIC_QUAD_API(table_meta_tunnel_entry)

    redis_get_table_meta_tunnel_entry_stats,
    redis_get_table_meta_tunnel_entry_stats_ext,
        _Out_ uint64_t *counters)
{
    MUTEX();

    SWSS_LOG_ENTER();

    return SAI_STATUS_NOT_IMPLEMENTED;
}

sai_status_t redis_clear_policer_stats(
        _In_ sai_object_id_t policer_id,
        _In_ uint32_t number_of_counters,
        _In_ const sai_policer_stat_t *counter_ids)
{
    MUTEX();

    SWSS_LOG_ENTER();

    return SAI_STATUS_NOT_IMPLEMENTED;
}

REDIS_GENERIC_QUAD(POLICER,policer);

const sai_policer_api_t redis_policer_api = {

    REDIS_GENERIC_QUAD_API(policer)

    redis_get_policer_stats,
    redis_clear_policer_stats,
};
#include "sai_redis.h"

REDIS_GENERIC_QUAD(ROUTER_INTERFACE,router_interface);

const sai_router_interface_api_t redis_router_interface_api = {

    REDIS_GENERIC_QUAD_API(router_interface)
};
#include "sai_redis.h"

sai_status_t redis_clear_port_all_stats(
        _In_ sai_object_id_t port_id)
{
    MUTEX();

    SWSS_LOG_ENTER();

    return SAI_STATUS_NOT_IMPLEMENTED;
}

REDIS_GENERIC_QUAD(PORT,port);
REDIS_GENERIC_QUAD(PORT_POOL,port_pool);
REDIS_GENERIC_STATS(PORT,port);
REDIS_GENERIC_STATS(PORT_POOL,port_pool);

const sai_port_api_t redis_port_api = {

    REDIS_GENERIC_QUAD_API(port)
    REDIS_GENERIC_STATS_API(port)

    redis_clear_port_all_stats,

    REDIS_GENERIC_QUAD_API(port_pool)
    REDIS_GENERIC_STATS_API(port_pool)
};
            attr_list,
            object_statuses);
}

sai_status_t sai_bulk_get_route_entry_attribute(
        _In_ uint32_t object_count,
        _In_ const sai_route_entry_t *route_entry,
        _In_ const uint32_t *attr_count,
        _Inout_ sai_attribute_t **attr_list,
        _In_ sai_bulk_op_error_mode_t mode,
        _Out_ sai_status_t *object_statuses)
{
    std::lock_guard<std::mutex> lock(g_apimutex);

    SWSS_LOG_ENTER();

    return SAI_STATUS_NOT_IMPLEMENTED;
}

REDIS_GENERIC_QUAD_ENTRY(ROUTE_ENTRY,route_entry);

const sai_route_api_t redis_route_api = {

    REDIS_GENERIC_QUAD_API(route_entry)

    sai_bulk_create_route_entry,
    sai_bulk_remove_route_entry,
    sai_bulk_set_route_entry_attribute,
    sai_bulk_get_route_entry_attribute,
};
#include "sai_redis.h"
#include "sai_redis_internal.h"

REDIS_GENERIC_QUAD(L2MC_GROUP,l2mc_group);
REDIS_GENERIC_QUAD(L2MC_GROUP_MEMBER,l2mc_group_member);

const sai_l2mc_group_api_t redis_l2mc_group_api = {

    REDIS_GENERIC_QUAD_API(l2mc_group)
    REDIS_GENERIC_QUAD_API(l2mc_group_member)
};