2 Copyright (C) 1998, 2001 Kunihiro Ishiguro
4 This file is part of GNU Zebra.
6 GNU Zebra is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 GNU Zebra is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Zebra; see the file COPYING. If not, write to the Free
18 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
25 #include "sockunion.h"
29 #include "bgpd/bgpd.h"
30 #include "bgpd/bgp_table.h"
33 bgp_table_lock (struct bgp_table *rt)
39 bgp_table_unlock (struct bgp_table *rt)
41 assert (rt->lock > 0);
49 route_table_finish (rt->route_table);
50 rt->route_table = NULL;
54 peer_unlock (rt->owner);
58 XFREE (MTYPE_BGP_TABLE, rt);
62 bgp_table_finish (struct bgp_table **rt)
66 bgp_table_unlock(*rt);
74 static struct route_node *
75 bgp_node_create (route_table_delegate_t *delegate, struct route_table *table)
77 struct bgp_node *node;
78 node = XCALLOC (MTYPE_BGP_NODE, sizeof (struct bgp_node));
79 return bgp_node_to_rnode (node);
86 bgp_node_destroy (route_table_delegate_t *delegate,
87 struct route_table *table, struct route_node *node)
89 struct bgp_node *bgp_node;
90 bgp_node = bgp_node_from_rnode (node);
91 XFREE (MTYPE_BGP_NODE, bgp_node);
95 * Function vector to customize the behavior of the route table
96 * library for BGP route tables.
98 route_table_delegate_t bgp_table_delegate = {
99 .create_node = bgp_node_create,
100 .destroy_node = bgp_node_destroy
107 bgp_table_init (afi_t afi, safi_t safi)
109 struct bgp_table *rt;
111 rt = XCALLOC (MTYPE_BGP_TABLE, sizeof (struct bgp_table));
113 rt->route_table = route_table_init_with_delegate (&bgp_table_delegate);
116 * Set up back pointer to bgp_table.
118 rt->route_table->info = rt;
121 rt->type = BGP_TABLE_MAIN;