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; }
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; }