Пример #1
0
int
mcast_algo_init(struct vr_rtable *rtable, struct rtable_fspec *fs)
{

    if (rtable->algo_data)
        return 0;

    rtable->algo_data = vr_htable_create(vr_mcast_entries,
            vr_mcast_oentries, sizeof(struct vr_mcast_entry),
            sizeof(struct vr_mcast_entry_key), mcast_entry_valid);

    if (!rtable->algo_data)
        return -ENOMEM;

    rtable->algo_add = mcast_add;
    rtable->algo_del = mcast_delete;
    rtable->algo_lookup = mcast_lookup;
    rtable->algo_get = mcast_get;
    rtable->algo_dump = mcast_dump;

    /* local cache */
    vn_rtable = rtable->algo_data;

    return 0;
}
Пример #2
0
int
bridge_table_init(struct vr_rtable *rtable, struct rtable_fspec *fs)
{

    /* If table already exists, dont create again */
    if (rtable->algo_data)
        return 0;

    rtable->algo_data = vr_htable_create(vr_bridge_entries,
            vr_bridge_oentries, sizeof(struct vr_bridge_entry),
            sizeof(struct vr_bridge_entry_key), bridge_entry_valid);  

    if (!rtable->algo_data)
        return vr_module_error(-ENOMEM, __FUNCTION__, __LINE__, 
                vr_bridge_entries);

    /* Max VRF's does not matter as Bridge table is not per VRF. But
     * still this can be maintained in table 
     */
    rtable->algo_max_vrfs = fs->rtb_max_vrfs;
    rtable->algo_add = bridge_table_add;
    rtable->algo_del = bridge_table_delete;
    rtable->algo_lookup = bridge_table_lookup;
    rtable->algo_get = bridge_table_get;
    rtable->algo_dump = bridge_table_dump;

    /* Add the shortcut to lookup routine */
    vr_bridge_lookup = bridge_table_lookup;
    vn_rtable = rtable->algo_data;

    return 0;
}