switch (vn->family) {
case AF_INET:
- rt_vn = &(hc->nve_groups_vn[AFI_IP]);
+ rt_vn = hc->nve_groups_vn[AFI_IP];
break;
case AF_INET6:
- rt_vn = &(hc->nve_groups_vn[AFI_IP6]);
+ rt_vn = hc->nve_groups_vn[AFI_IP6];
break;
default:
return NULL;
switch (un->family) {
case AF_INET:
- rt_un = &(hc->nve_groups_un[AFI_IP]);
+ rt_un = hc->nve_groups_un[AFI_IP];
break;
case AF_INET6:
- rt_un = &(hc->nve_groups_un[AFI_IP6]);
+ rt_un = hc->nve_groups_un[AFI_IP6];
break;
default:
return NULL;
}
if (argv[1]->arg[0] == 'u') {
- rt = &(bgp->rfapi_cfg->nve_groups_un[afi]);
+ rt = bgp->rfapi_cfg->nve_groups_un[afi];
is_un_prefix = 1;
} else {
- rt = &(bgp->rfapi_cfg->nve_groups_vn[afi]);
+ rt = bgp->rfapi_cfg->nve_groups_vn[afi];
}
rn = route_node_get(rt, &p); /* NB locks node */
h->nve_groups_sequential = list_new();
assert(h->nve_groups_sequential);
-
for (afi = AFI_IP; afi < AFI_MAX; afi++) {
- /* ugly, to deal with addition of delegates, part of 0.99.24.1
- * merge */
- h->nve_groups_vn[afi].delegate =
- route_table_get_default_delegate();
- h->nve_groups_un[afi].delegate =
- route_table_get_default_delegate();
+ h->nve_groups_vn[afi] = route_table_init();
+ h->nve_groups_un[afi] = route_table_init();
}
h->default_response_lifetime =
BGP_VNC_DEFAULT_RESPONSE_LIFETIME_DEFAULT;
void bgp_rfapi_cfg_destroy(struct bgp *bgp, struct rfapi_cfg *h)
{
+ int afi;
if (h == NULL)
return;
ecommunity_free(&h->default_rt_import_list);
if (h->default_rfp_cfg)
XFREE(MTYPE_RFAPI_RFP_GROUP_CFG, h->default_rfp_cfg);
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ route_table_finish(h->nve_groups_vn[afi]);
+ route_table_finish(h->nve_groups_un[afi]);
+ }
XFREE(MTYPE_RFAPI_CFG, h);
}
struct list *l2_groups; /* rfapi_l2_group_cfg list */
/* three views into the same collection of rfapi_nve_group_cfg */
struct list *nve_groups_sequential;
- struct route_table nve_groups_vn[AFI_MAX];
- struct route_table nve_groups_un[AFI_MAX];
+ struct route_table *nve_groups_vn[AFI_MAX];
+ struct route_table *nve_groups_un[AFI_MAX];
/*
* For Single VRF export to ordinary routing protocols. This is
if ((rc = rfapiRaddr2Qprefix(un_addr, &p)))
return rc;
- rn = route_node_lookup(&h->un[afi], &p);
+ rn = route_node_lookup(h->un[afi], &p);
if (!rn)
return ENOENT;
assert(afi_vn && afi_un);
assert(!rfapiRaddr2Qprefix(&rfd->un_addr, &pfx_un));
- rn = route_node_get(&(h->un[afi_un]), &pfx_un);
+ rn = route_node_get(h->un[afi_un], &pfx_un);
assert(rn);
rfd->next = rn->info;
rn->info = rfd;
h = (struct rfapi *)XCALLOC(MTYPE_RFAPI, sizeof(struct rfapi));
for (afi = AFI_IP; afi < AFI_MAX; afi++) {
- /* ugly, to deal with addition of delegates, part of 0.99.24.1
- * merge */
- h->un[afi].delegate = route_table_get_default_delegate();
+ h->un[afi] = route_table_init();
}
/*
void bgp_rfapi_destroy(struct bgp *bgp, struct rfapi *h)
{
+ int afi;
+
if (bgp == NULL || h == NULL)
return;
if (h->rfp != NULL)
rfp_stop(h->rfp);
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ route_table_finish(h->un[afi]);
+ }
+
XFREE(MTYPE_RFAPI_IMPORTTABLE, h->it_ce);
XFREE(MTYPE_RFAPI, h);
}