extern struct zebra_t zebrad;
/* VRF information update. */
-static void
-zebra_vrf_add_update (struct zebra_vrf *zvrf)
+static void zebra_vrf_add_update(struct zebra_vrf *zvrf)
{
- struct listnode *node, *nnode;
- struct zserv *client;
+ struct listnode *node, *nnode;
+ struct zserv *client;
- if (IS_ZEBRA_DEBUG_EVENT)
- zlog_debug ("MESSAGE: ZEBRA_VRF_ADD %s", zvrf_name (zvrf));
+ if (IS_ZEBRA_DEBUG_EVENT)
+ zlog_debug("MESSAGE: ZEBRA_VRF_ADD %s", zvrf_name(zvrf));
- for (ALL_LIST_ELEMENTS (zebrad.client_list, node, nnode, client))
- zsend_vrf_add (client, zvrf);
+ for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client))
+ zsend_vrf_add(client, zvrf);
}
-static void
-zebra_vrf_delete_update (struct zebra_vrf *zvrf)
+static void zebra_vrf_delete_update(struct zebra_vrf *zvrf)
{
- struct listnode *node, *nnode;
- struct zserv *client;
+ struct listnode *node, *nnode;
+ struct zserv *client;
- if (IS_ZEBRA_DEBUG_EVENT)
- zlog_debug ("MESSAGE: ZEBRA_VRF_DELETE %s", zvrf_name (zvrf));
+ if (IS_ZEBRA_DEBUG_EVENT)
+ zlog_debug("MESSAGE: ZEBRA_VRF_DELETE %s", zvrf_name(zvrf));
- for (ALL_LIST_ELEMENTS (zebrad.client_list, node, nnode, client))
- zsend_vrf_delete (client, zvrf);
+ for (ALL_LIST_ELEMENTS(zebrad.client_list, node, nnode, client))
+ zsend_vrf_delete(client, zvrf);
}
-void
-zebra_vrf_update_all (struct zserv *client)
+void zebra_vrf_update_all(struct zserv *client)
{
- struct vrf *vrf;
+ struct vrf *vrf;
- RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id)
- {
- if (vrf->vrf_id)
- zsend_vrf_add (client, vrf_info_lookup (vrf->vrf_id));
- }
+ RB_FOREACH(vrf, vrf_id_head, &vrfs_by_id)
+ {
+ if (vrf->vrf_id)
+ zsend_vrf_add(client, vrf_info_lookup(vrf->vrf_id));
+ }
}
/* Callback upon creating a new VRF. */
-static int
-zebra_vrf_new (struct vrf *vrf)
+static int zebra_vrf_new(struct vrf *vrf)
{
- struct zebra_vrf *zvrf;
+ struct zebra_vrf *zvrf;
- if (IS_ZEBRA_DEBUG_EVENT)
- zlog_info ("ZVRF %s with id %u", vrf->name, vrf->vrf_id);
+ if (IS_ZEBRA_DEBUG_EVENT)
+ zlog_info("ZVRF %s with id %u", vrf->name, vrf->vrf_id);
- zvrf = zebra_vrf_alloc ();
- zvrf->zns = zebra_ns_lookup (NS_DEFAULT); /* Point to the global (single) NS */
- router_id_init (zvrf);
- vrf->info = zvrf;
- zvrf->vrf = vrf;
+ zvrf = zebra_vrf_alloc();
+ zvrf->zns = zebra_ns_lookup(
+ NS_DEFAULT); /* Point to the global (single) NS */
+ router_id_init(zvrf);
+ vrf->info = zvrf;
+ zvrf->vrf = vrf;
- return 0;
+ return 0;
}
/*
* the old ifindex and replace with new
* ifindex to insert back into the table
*/
-void
-zebra_vrf_static_route_interface_fixup (struct interface *ifp)
+void zebra_vrf_static_route_interface_fixup(struct interface *ifp)
{
- afi_t afi;
- safi_t safi;
- struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id (ifp->vrf_id);
- struct route_table *stable = NULL;
- struct route_node *rn = NULL;
- struct static_route *si = NULL;
-
- if (!zvrf)
- return;
-
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- {
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- stable = zvrf->stable[afi][safi];
- if (stable)
- for (rn = route_top (stable); rn; rn = route_next (rn))
- {
- if (rn->info)
- {
- si = rn->info;
- if ((strcmp (si->ifname, ifp->name) == 0) &&
- (si->ifindex != ifp->ifindex))
- {
- si->ifindex = ifp->ifindex;
- static_install_route (afi, safi, &rn->p, NULL, si);
- }
- }
- }
+ afi_t afi;
+ safi_t safi;
+ struct zebra_vrf *zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
+ struct route_table *stable = NULL;
+ struct route_node *rn = NULL;
+ struct static_route *si = NULL;
+
+ if (!zvrf)
+ return;
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
+ stable = zvrf->stable[afi][safi];
+ if (stable)
+ for (rn = route_top(stable); rn;
+ rn = route_next(rn)) {
+ if (rn->info) {
+ si = rn->info;
+ if ((strcmp(si->ifname,
+ ifp->name)
+ == 0)
+ && (si->ifindex
+ != ifp->ifindex)) {
+ si->ifindex =
+ ifp->ifindex;
+ static_install_route(
+ afi, safi,
+ &rn->p, NULL,
+ si);
+ }
+ }
+ }
+ }
}
- }
-
}
/* Callback upon enabling a VRF. */
-static int
-zebra_vrf_enable (struct vrf *vrf)
+static int zebra_vrf_enable(struct vrf *vrf)
{
- struct zebra_vrf *zvrf = vrf->info;
- struct route_table *stable;
- struct route_node *rn;
- struct static_route *si;
- struct interface *ifp;
- afi_t afi;
- safi_t safi;
-
- assert (zvrf);
-
- zebra_vrf_add_update (zvrf);
-
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- stable = zvrf->stable[afi][safi];
- if (! stable)
- continue;
-
- for (rn = route_top (stable); rn; rn = route_next (rn))
- for (si = rn->info; si; si = si->next)
- {
- si->vrf_id = vrf->vrf_id;
- if (si->ifindex)
- {
- ifp = if_lookup_by_name (si->ifname, si->vrf_id);
- if (ifp)
- si->ifindex = ifp->ifindex;
- else
- continue;
+ struct zebra_vrf *zvrf = vrf->info;
+ struct route_table *stable;
+ struct route_node *rn;
+ struct static_route *si;
+ struct interface *ifp;
+ afi_t afi;
+ safi_t safi;
+
+ assert(zvrf);
+
+ zebra_vrf_add_update(zvrf);
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++)
+ for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
+ stable = zvrf->stable[afi][safi];
+ if (!stable)
+ continue;
+
+ for (rn = route_top(stable); rn; rn = route_next(rn))
+ for (si = rn->info; si; si = si->next) {
+ si->vrf_id = vrf->vrf_id;
+ if (si->ifindex) {
+ ifp = if_lookup_by_name(
+ si->ifname, si->vrf_id);
+ if (ifp)
+ si->ifindex =
+ ifp->ifindex;
+ else
+ continue;
+ }
+ static_install_route(afi, safi, &rn->p,
+ NULL, si);
+ }
}
- static_install_route (afi, safi, &rn->p, NULL, si);
- }
- }
- return 0;
+ return 0;
}
/* Callback upon disabling a VRF. */
-static int
-zebra_vrf_disable (struct vrf *vrf)
+static int zebra_vrf_disable(struct vrf *vrf)
{
- struct zebra_vrf *zvrf = vrf->info;
- struct route_table *stable;
- struct route_node *rn;
- struct static_route *si;
- afi_t afi;
- safi_t safi;
-
- if (IS_ZEBRA_DEBUG_KERNEL)
- zlog_debug ("VRF %s id %u is now disabled.",
- zvrf_name (zvrf), zvrf_id (zvrf));
-
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- stable = zvrf->stable[afi][safi];
- if (! stable)
- continue;
-
- for (rn = route_top (stable); rn; rn = route_next (rn))
- for (si = rn->info; si; si = si->next)
- static_uninstall_route(afi, safi, &rn->p, NULL, si);
- }
-
- return 0;
+ struct zebra_vrf *zvrf = vrf->info;
+ struct route_table *stable;
+ struct route_node *rn;
+ struct static_route *si;
+ afi_t afi;
+ safi_t safi;
+
+ if (IS_ZEBRA_DEBUG_KERNEL)
+ zlog_debug("VRF %s id %u is now disabled.", zvrf_name(zvrf),
+ zvrf_id(zvrf));
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++)
+ for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
+ stable = zvrf->stable[afi][safi];
+ if (!stable)
+ continue;
+
+ for (rn = route_top(stable); rn; rn = route_next(rn))
+ for (si = rn->info; si; si = si->next)
+ static_uninstall_route(
+ afi, safi, &rn->p, NULL, si);
+ }
+
+ return 0;
}
-static int
-zebra_vrf_delete (struct vrf *vrf)
+static int zebra_vrf_delete(struct vrf *vrf)
{
- struct zebra_vrf *zvrf = vrf->info;
- struct route_table *table;
- u_int32_t table_id;
- afi_t afi;
- safi_t safi;
- unsigned i;
-
- assert (zvrf);
-
- zebra_vrf_delete_update (zvrf);
+ struct zebra_vrf *zvrf = vrf->info;
+ struct route_table *table;
+ u_int32_t table_id;
+ afi_t afi;
+ safi_t safi;
+ unsigned i;
+
+ assert(zvrf);
+
+ zebra_vrf_delete_update(zvrf);
+
+ /* uninstall everything */
+ if (!CHECK_FLAG(zvrf->flags, ZEBRA_VRF_RETAIN)) {
+ struct listnode *node;
+ struct interface *ifp;
+
+ for (afi = AFI_IP; afi <= AFI_IP6; afi++) {
+ for (safi = SAFI_UNICAST; safi <= SAFI_MULTICAST;
+ safi++)
+ rib_close_table(zvrf->table[afi][safi]);
+
+ if (vrf->vrf_id == VRF_DEFAULT)
+ for (table_id = 0;
+ table_id < ZEBRA_KERNEL_TABLE_MAX;
+ table_id++)
+ if (zvrf->other_table[afi][table_id])
+ rib_close_table(
+ zvrf->other_table
+ [afi]
+ [table_id]);
+ }
- /* uninstall everything */
- if (! CHECK_FLAG (zvrf->flags, ZEBRA_VRF_RETAIN))
- {
- struct listnode *node;
- struct interface *ifp;
+ /* Cleanup Vxlan table and update kernel */
+ zebra_vxlan_close_tables(zvrf);
- for (afi = AFI_IP; afi <= AFI_IP6; afi++)
- {
- for (safi = SAFI_UNICAST; safi <= SAFI_MULTICAST; safi++)
- rib_close_table (zvrf->table[afi][safi]);
+ zebra_mpls_close_tables(zvrf);
- if (vrf->vrf_id == VRF_DEFAULT)
- for (table_id = 0; table_id < ZEBRA_KERNEL_TABLE_MAX; table_id++)
- if (zvrf->other_table[afi][table_id])
- rib_close_table (zvrf->other_table[afi][table_id]);
+ for (ALL_LIST_ELEMENTS_RO(vrf->iflist, node, ifp))
+ if_nbr_ipv6ll_to_ipv4ll_neigh_del_all(ifp);
}
- /* Cleanup Vxlan table and update kernel */
- zebra_vxlan_close_tables (zvrf);
-
- zebra_mpls_close_tables (zvrf);
-
- for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp))
- if_nbr_ipv6ll_to_ipv4ll_neigh_del_all (ifp);
- }
-
- /* clean-up work queues */
- for (i = 0; i < MQ_SIZE; i++)
- {
- struct listnode *lnode, *nnode;
- struct route_node *rnode;
- rib_dest_t *dest;
-
- for (ALL_LIST_ELEMENTS (zebrad.mq->subq[i], lnode, nnode, rnode))
- {
- dest = rib_dest_from_rnode (rnode);
- if (dest && rib_dest_vrf (dest) == zvrf)
- {
- route_unlock_node (rnode);
- list_delete_node (zebrad.mq->subq[i], lnode);
- zebrad.mq->size--;
- }
+ /* clean-up work queues */
+ for (i = 0; i < MQ_SIZE; i++) {
+ struct listnode *lnode, *nnode;
+ struct route_node *rnode;
+ rib_dest_t *dest;
+
+ for (ALL_LIST_ELEMENTS(zebrad.mq->subq[i], lnode, nnode,
+ rnode)) {
+ dest = rib_dest_from_rnode(rnode);
+ if (dest && rib_dest_vrf(dest) == zvrf) {
+ route_unlock_node(rnode);
+ list_delete_node(zebrad.mq->subq[i], lnode);
+ zebrad.mq->size--;
+ }
+ }
}
- }
- /* release allocated memory */
- for (afi = AFI_IP; afi <= AFI_IP6; afi++)
- {
- void *table_info;
+ /* release allocated memory */
+ for (afi = AFI_IP; afi <= AFI_IP6; afi++) {
+ void *table_info;
- for (safi = SAFI_UNICAST; safi <= SAFI_MULTICAST; safi++)
- {
- table = zvrf->table[afi][safi];
- table_info = table->info;
- route_table_finish (table);
- XFREE (MTYPE_RIB_TABLE_INFO, table_info);
+ for (safi = SAFI_UNICAST; safi <= SAFI_MULTICAST; safi++) {
+ table = zvrf->table[afi][safi];
+ table_info = table->info;
+ route_table_finish(table);
+ XFREE(MTYPE_RIB_TABLE_INFO, table_info);
+
+ table = zvrf->stable[afi][safi];
+ route_table_finish(table);
+ }
- table = zvrf->stable[afi][safi];
- route_table_finish (table);
+ for (table_id = 0; table_id < ZEBRA_KERNEL_TABLE_MAX;
+ table_id++)
+ if (zvrf->other_table[afi][table_id]) {
+ table = zvrf->other_table[afi][table_id];
+ table_info = table->info;
+ route_table_finish(table);
+ XFREE(MTYPE_RIB_TABLE_INFO, table_info);
+ }
+
+ route_table_finish(zvrf->rnh_table[afi]);
+ route_table_finish(zvrf->import_check_table[afi]);
}
+ list_delete_all_node(zvrf->rid_all_sorted_list);
+ list_delete_all_node(zvrf->rid_lo_sorted_list);
+ XFREE(MTYPE_ZEBRA_VRF, zvrf);
+ vrf->info = NULL;
- for (table_id = 0; table_id < ZEBRA_KERNEL_TABLE_MAX; table_id++)
- if (zvrf->other_table[afi][table_id])
- {
- table = zvrf->other_table[afi][table_id];
- table_info = table->info;
- route_table_finish (table);
- XFREE (MTYPE_RIB_TABLE_INFO, table_info);
- }
-
- route_table_finish (zvrf->rnh_table[afi]);
- route_table_finish (zvrf->import_check_table[afi]);
- }
- list_delete_all_node (zvrf->rid_all_sorted_list);
- list_delete_all_node (zvrf->rid_lo_sorted_list);
- XFREE (MTYPE_ZEBRA_VRF, zvrf);
- vrf->info = NULL;
-
- return 0;
+ return 0;
}
/* Lookup the routing table in a VRF based on both VRF-Id and table-id.
* NOTE: Table-id is relevant only in the Default VRF.
*/
-struct route_table *
-zebra_vrf_table_with_table_id (afi_t afi, safi_t safi,
- vrf_id_t vrf_id, u_int32_t table_id)
+struct route_table *zebra_vrf_table_with_table_id(afi_t afi, safi_t safi,
+ vrf_id_t vrf_id,
+ u_int32_t table_id)
{
- struct route_table *table = NULL;
-
- if (afi >= AFI_MAX || safi >= SAFI_MAX)
- return NULL;
-
- if (vrf_id == VRF_DEFAULT)
- {
- if (table_id == RT_TABLE_MAIN ||
- table_id == zebrad.rtm_table_default)
- table = zebra_vrf_table (afi, safi, vrf_id);
- else
- table = zebra_vrf_other_route_table (afi, table_id, vrf_id);
- }
- else
- table = zebra_vrf_table (afi, safi, vrf_id);
-
- return table;
+ struct route_table *table = NULL;
+
+ if (afi >= AFI_MAX || safi >= SAFI_MAX)
+ return NULL;
+
+ if (vrf_id == VRF_DEFAULT) {
+ if (table_id == RT_TABLE_MAIN
+ || table_id == zebrad.rtm_table_default)
+ table = zebra_vrf_table(afi, safi, vrf_id);
+ else
+ table = zebra_vrf_other_route_table(afi, table_id,
+ vrf_id);
+ } else
+ table = zebra_vrf_table(afi, safi, vrf_id);
+
+ return table;
}
-static void
-zebra_rtable_node_cleanup (struct route_table *table, struct route_node *node)
+static void zebra_rtable_node_cleanup(struct route_table *table,
+ struct route_node *node)
{
- struct route_entry *re, *next;
+ struct route_entry *re, *next;
- RNODE_FOREACH_RE_SAFE (node, re, next)
- rib_unlink (node, re);
+ RNODE_FOREACH_RE_SAFE(node, re, next)
+ rib_unlink(node, re);
- if (node->info)
- XFREE (MTYPE_RIB_DEST, node->info);
+ if (node->info)
+ XFREE(MTYPE_RIB_DEST, node->info);
}
-static void
-zebra_stable_node_cleanup (struct route_table *table, struct route_node *node)
+static void zebra_stable_node_cleanup(struct route_table *table,
+ struct route_node *node)
{
- struct static_route *si, *next;
-
- if (node->info)
- for (si = node->info; si; si = next)
- {
- next = si->next;
- XFREE (MTYPE_STATIC_ROUTE, si);
- }
+ struct static_route *si, *next;
+
+ if (node->info)
+ for (si = node->info; si; si = next) {
+ next = si->next;
+ XFREE(MTYPE_STATIC_ROUTE, si);
+ }
}
-static void
-zebra_rnhtable_node_cleanup (struct route_table *table, struct route_node *node)
+static void zebra_rnhtable_node_cleanup(struct route_table *table,
+ struct route_node *node)
{
- if (node->info)
- zebra_free_rnh (node->info);
+ if (node->info)
+ zebra_free_rnh(node->info);
}
/*
* Create a routing table for the specific AFI/SAFI in the given VRF.
*/
-static void
-zebra_vrf_table_create (struct zebra_vrf *zvrf, afi_t afi, safi_t safi)
+static void zebra_vrf_table_create(struct zebra_vrf *zvrf, afi_t afi,
+ safi_t safi)
{
- rib_table_info_t *info;
- struct route_table *table;
-
- assert (!zvrf->table[afi][safi]);
-
- if (afi == AFI_IP6)
- table = srcdest_table_init();
- else
- table = route_table_init();
- table->cleanup = zebra_rtable_node_cleanup;
- zvrf->table[afi][safi] = table;
-
- info = XCALLOC (MTYPE_RIB_TABLE_INFO, sizeof (*info));
- info->zvrf = zvrf;
- info->afi = afi;
- info->safi = safi;
- table->info = info;
+ rib_table_info_t *info;
+ struct route_table *table;
+
+ assert(!zvrf->table[afi][safi]);
+
+ if (afi == AFI_IP6)
+ table = srcdest_table_init();
+ else
+ table = route_table_init();
+ table->cleanup = zebra_rtable_node_cleanup;
+ zvrf->table[afi][safi] = table;
+
+ info = XCALLOC(MTYPE_RIB_TABLE_INFO, sizeof(*info));
+ info->zvrf = zvrf;
+ info->afi = afi;
+ info->safi = safi;
+ table->info = info;
}
/* Allocate new zebra VRF. */
-struct zebra_vrf *
-zebra_vrf_alloc (void)
+struct zebra_vrf *zebra_vrf_alloc(void)
{
- struct zebra_vrf *zvrf;
- afi_t afi;
- safi_t safi;
- struct route_table *table;
-
- zvrf = XCALLOC (MTYPE_ZEBRA_VRF, sizeof (struct zebra_vrf));
-
- for (afi = AFI_IP; afi <= AFI_IP6; afi++)
- {
- for (safi = SAFI_UNICAST; safi <= SAFI_MULTICAST; safi++)
- {
- zebra_vrf_table_create (zvrf, afi, safi);
- if (afi == AFI_IP6)
- table = srcdest_table_init();
- else
- table = route_table_init();
- table->cleanup = zebra_stable_node_cleanup;
- zvrf->stable[afi][safi] = table;
- }
-
- table = route_table_init();
- table->cleanup = zebra_rnhtable_node_cleanup;
- zvrf->rnh_table[afi] = table;
-
- table = route_table_init();
- table->cleanup = zebra_rnhtable_node_cleanup;
- zvrf->import_check_table[afi] = table;
- }
-
- zebra_vxlan_init_tables (zvrf);
- zebra_mpls_init_tables (zvrf);
-
- return zvrf;
+ struct zebra_vrf *zvrf;
+ afi_t afi;
+ safi_t safi;
+ struct route_table *table;
+
+ zvrf = XCALLOC(MTYPE_ZEBRA_VRF, sizeof(struct zebra_vrf));
+
+ for (afi = AFI_IP; afi <= AFI_IP6; afi++) {
+ for (safi = SAFI_UNICAST; safi <= SAFI_MULTICAST; safi++) {
+ zebra_vrf_table_create(zvrf, afi, safi);
+ if (afi == AFI_IP6)
+ table = srcdest_table_init();
+ else
+ table = route_table_init();
+ table->cleanup = zebra_stable_node_cleanup;
+ zvrf->stable[afi][safi] = table;
+ }
+
+ table = route_table_init();
+ table->cleanup = zebra_rnhtable_node_cleanup;
+ zvrf->rnh_table[afi] = table;
+
+ table = route_table_init();
+ table->cleanup = zebra_rnhtable_node_cleanup;
+ zvrf->import_check_table[afi] = table;
+ }
+
+ zebra_vxlan_init_tables(zvrf);
+ zebra_mpls_init_tables(zvrf);
+
+ return zvrf;
}
/* Lookup VRF by identifier. */
-struct zebra_vrf *
-zebra_vrf_lookup_by_id (vrf_id_t vrf_id)
+struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id)
{
- return vrf_info_lookup (vrf_id);
+ return vrf_info_lookup(vrf_id);
}
/* Lookup VRF by name. */
-struct zebra_vrf *
-zebra_vrf_lookup_by_name (const char *name)
+struct zebra_vrf *zebra_vrf_lookup_by_name(const char *name)
{
- struct vrf *vrf;
+ struct vrf *vrf;
- if (!name)
- name = VRF_DEFAULT_NAME;
+ if (!name)
+ name = VRF_DEFAULT_NAME;
- vrf = vrf_lookup_by_name (name);
- if (vrf)
- return ((struct zebra_vrf *) vrf->info);
+ vrf = vrf_lookup_by_name(name);
+ if (vrf)
+ return ((struct zebra_vrf *)vrf->info);
- return NULL;
+ return NULL;
}
/* Lookup the routing table in an enabled VRF. */
-struct route_table *
-zebra_vrf_table (afi_t afi, safi_t safi, vrf_id_t vrf_id)
+struct route_table *zebra_vrf_table(afi_t afi, safi_t safi, vrf_id_t vrf_id)
{
- struct zebra_vrf *zvrf = vrf_info_lookup (vrf_id);
+ struct zebra_vrf *zvrf = vrf_info_lookup(vrf_id);
- if (!zvrf)
- return NULL;
+ if (!zvrf)
+ return NULL;
- if (afi >= AFI_MAX || safi >= SAFI_MAX)
- return NULL;
+ if (afi >= AFI_MAX || safi >= SAFI_MAX)
+ return NULL;
- return zvrf->table[afi][safi];
+ return zvrf->table[afi][safi];
}
/* Lookup the static routing table in a VRF. */
-struct route_table *
-zebra_vrf_static_table (afi_t afi, safi_t safi, struct zebra_vrf *zvrf)
+struct route_table *zebra_vrf_static_table(afi_t afi, safi_t safi,
+ struct zebra_vrf *zvrf)
{
- if (!zvrf)
- return NULL;
+ if (!zvrf)
+ return NULL;
- if (afi >= AFI_MAX || safi >= SAFI_MAX)
- return NULL;
+ if (afi >= AFI_MAX || safi >= SAFI_MAX)
+ return NULL;
- return zvrf->stable[afi][safi];
+ return zvrf->stable[afi][safi];
}
-struct route_table *
-zebra_vrf_other_route_table (afi_t afi, u_int32_t table_id, vrf_id_t vrf_id)
+struct route_table *zebra_vrf_other_route_table(afi_t afi, u_int32_t table_id,
+ vrf_id_t vrf_id)
{
- struct zebra_vrf *zvrf;
- rib_table_info_t *info;
- struct route_table *table;
-
- zvrf = vrf_info_lookup (vrf_id);
- if (! zvrf)
- return NULL;
-
- if(afi >= AFI_MAX)
- return NULL;
-
- if (table_id >= ZEBRA_KERNEL_TABLE_MAX)
- return NULL;
-
- if ((vrf_id == VRF_DEFAULT) && (table_id != RT_TABLE_MAIN) && (table_id != zebrad.rtm_table_default))
- {
- if (zvrf->other_table[afi][table_id] == NULL)
- {
- table = (afi == AFI_IP6) ? srcdest_table_init() : route_table_init();
- info = XCALLOC (MTYPE_RIB_TABLE_INFO, sizeof (*info));
- info->zvrf = zvrf;
- info->afi = afi;
- info->safi = SAFI_UNICAST;
- table->info = info;
- zvrf->other_table[afi][table_id] = table;
- }
-
- return (zvrf->other_table[afi][table_id]);
- }
-
- return zvrf->table[afi][SAFI_UNICAST];
+ struct zebra_vrf *zvrf;
+ rib_table_info_t *info;
+ struct route_table *table;
+
+ zvrf = vrf_info_lookup(vrf_id);
+ if (!zvrf)
+ return NULL;
+
+ if (afi >= AFI_MAX)
+ return NULL;
+
+ if (table_id >= ZEBRA_KERNEL_TABLE_MAX)
+ return NULL;
+
+ if ((vrf_id == VRF_DEFAULT) && (table_id != RT_TABLE_MAIN)
+ && (table_id != zebrad.rtm_table_default)) {
+ if (zvrf->other_table[afi][table_id] == NULL) {
+ table = (afi == AFI_IP6) ? srcdest_table_init()
+ : route_table_init();
+ info = XCALLOC(MTYPE_RIB_TABLE_INFO, sizeof(*info));
+ info->zvrf = zvrf;
+ info->afi = afi;
+ info->safi = SAFI_UNICAST;
+ table->info = info;
+ zvrf->other_table[afi][table_id] = table;
+ }
+
+ return (zvrf->other_table[afi][table_id]);
+ }
+
+ return zvrf->table[afi][SAFI_UNICAST];
}
-static int
-vrf_config_write (struct vty *vty)
+static int vrf_config_write(struct vty *vty)
{
- struct vrf *vrf;
- struct zebra_vrf *zvrf;
-
- RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
- {
- zvrf = vrf->info;
- if (! zvrf || strcmp (zvrf_name (zvrf), VRF_DEFAULT_NAME))
- {
- vty_out (vty, "vrf %s\n", zvrf_name(zvrf));
- vty_out (vty, "!\n");
- }
- }
- return 0;
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
+
+ RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
+ {
+ zvrf = vrf->info;
+ if (!zvrf || strcmp(zvrf_name(zvrf), VRF_DEFAULT_NAME)) {
+ vty_out(vty, "vrf %s\n", zvrf_name(zvrf));
+ vty_out(vty, "!\n");
+ }
+ }
+ return 0;
}
/* Zebra VRF initialization. */
-void
-zebra_vrf_init (void)
+void zebra_vrf_init(void)
{
- vrf_init (zebra_vrf_new,
- zebra_vrf_enable,
- zebra_vrf_disable,
- zebra_vrf_delete);
+ vrf_init(zebra_vrf_new, zebra_vrf_enable, zebra_vrf_disable,
+ zebra_vrf_delete);
- vrf_cmd_init (vrf_config_write);
+ vrf_cmd_init(vrf_config_write);
}