summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFeng Lu <lu.feng@6wind.com>2015-05-22 11:39:58 +0200
committerDavid Lamparter <equinox@opensourcerouting.org>2015-06-02 06:58:12 +0200
commit126215c1238eb42cc92d23aefbe1fac3b204438f (patch)
tree22910b50f39003e297efc6236711581cbf3b2ada
parent2fc97f6335dd5d7df2c285b363c6ef56bb98dcf8 (diff)
downloadquagga-126215c1238eb42cc92d23aefbe1fac3b204438f.tar.bz2
quagga-126215c1238eb42cc92d23aefbe1fac3b204438f.tar.xz
*: call if_init()/if_terminate() from vrf_init()/vrf_terminate()
Later, an interface will belong to a specific VRF, and the interface initialization will be a part of the VRF initialization. So now call if_init() from vrf_init(), and if_terminate() from vrf_terminate(). Daemons have the according changes: - if if_init() was called or "iflist" was initialized, now call vrf_init() instead; - if if_terminate() was called or "iflist" was destroyed, now call vrf_terminate() instead. Signed-off-by: Feng Lu <lu.feng@6wind.com> Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Vincent JARDIN <vincent.jardin@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
-rw-r--r--bgpd/bgp_main.c8
-rw-r--r--bgpd/bgp_zebra.c3
-rw-r--r--isisd/isis_circuit.c1
-rw-r--r--isisd/isis_main.c2
-rw-r--r--lib/vrf.c5
-rw-r--r--ospf6d/ospf6_main.c5
-rw-r--r--ospfd/ospf_interface.c1
-rw-r--r--ospfd/ospf_main.c2
-rw-r--r--pimd/pim_iface.c5
-rw-r--r--pimd/pim_iface.h2
-rw-r--r--pimd/pim_main.c2
-rw-r--r--pimd/pimd.c3
-rw-r--r--ripd/rip_interface.c1
-rw-r--r--ripd/rip_main.c2
-rw-r--r--ripngd/ripng_interface.c2
-rw-r--r--ripngd/ripng_main.c2
-rw-r--r--zebra/interface.c1
-rw-r--r--zebra/test_main.c1
18 files changed, 25 insertions, 23 deletions
diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c
index 5026b5ea..ad4de798 100644
--- a/bgpd/bgp_main.c
+++ b/bgpd/bgp_main.c
@@ -36,6 +36,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "filter.h"
#include "plist.h"
#include "stream.h"
+#include "vrf.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_attr.h"
@@ -248,17 +249,14 @@ bgp_exit (int status)
/* reverse bgp_zebra_init/if_init */
if (retain_mode)
if_add_hook (IF_DELETE_HOOK, NULL);
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+ for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
{
struct listnode *c_node, *c_nnode;
struct connected *c;
for (ALL_LIST_ELEMENTS (ifp->connected, c_node, c_nnode, c))
bgp_connected_delete (c);
-
- if_delete (ifp);
}
- list_free (iflist);
/* reverse bgp_attr_init */
bgp_attr_finish ();
@@ -293,6 +291,7 @@ bgp_exit (int status)
/* reverse community_list_init */
community_list_terminate (bgp_clist);
+ vrf_terminate ();
cmd_terminate ();
vty_terminate ();
if (zclient)
@@ -427,6 +426,7 @@ main (int argc, char **argv)
cmd_init (1);
vty_init (master);
memory_init ();
+ vrf_init ();
/* BGP related initialization. */
bgp_init ();
diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
index 8ae7f465..13f71de9 100644
--- a/bgpd/bgp_zebra.c
+++ b/bgpd/bgp_zebra.c
@@ -1096,8 +1096,5 @@ bgp_zebra_init (void)
zclient->ipv6_route_delete = zebra_read_ipv6;
#endif /* HAVE_IPV6 */
- /* Interface related init. */
- if_init ();
-
bgp_nexthop_buf = stream_new(BGP_NEXTHOP_BUF_SIZE);
}
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index fdff819c..2ef43ccf 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -2739,7 +2739,6 @@ void
isis_circuit_init ()
{
/* Initialize Zebra interface data structure */
- if_init ();
if_add_hook (IF_NEW_HOOK, isis_if_new_hook);
if_add_hook (IF_DELETE_HOOK, isis_if_delete_hook);
diff --git a/isisd/isis_main.c b/isisd/isis_main.c
index 283b7eaa..60ecb754 100644
--- a/isisd/isis_main.c
+++ b/isisd/isis_main.c
@@ -35,6 +35,7 @@
#include "sigevent.h"
#include "filter.h"
#include "zclient.h"
+#include "vrf.h"
#include "isisd/dict.h"
#include "include-netbsd/iso.h"
@@ -330,6 +331,7 @@ main (int argc, char **argv, char **envp)
vty_init (master);
memory_init ();
access_list_init();
+ vrf_init ();
isis_init ();
isis_circuit_init ();
isis_spf_cmds_init ();
diff --git a/lib/vrf.c b/lib/vrf.c
index 3ccbb996..51f9e379 100644
--- a/lib/vrf.c
+++ b/lib/vrf.c
@@ -22,6 +22,7 @@
#include <zebra.h>
+#include "if.h"
#include "vrf.h"
#include "prefix.h"
#include "table.h"
@@ -249,6 +250,8 @@ vrf_init (void)
/* Set the default VRF name. */
default_vrf->name = XSTRDUP (MTYPE_VRF_NAME, "Default-IP-Routing-Table");
+
+ if_init ();
}
/* Terminate VRF module. */
@@ -264,5 +267,7 @@ vrf_terminate (void)
route_table_finish (vrf_table);
vrf_table = NULL;
+
+ if_terminate ();
}
diff --git a/ospf6d/ospf6_main.c b/ospf6d/ospf6_main.c
index 4f6d9e51..1afe84a7 100644
--- a/ospf6d/ospf6_main.c
+++ b/ospf6d/ospf6_main.c
@@ -35,6 +35,7 @@
#include "privs.h"
#include "sigevent.h"
#include "zclient.h"
+#include "vrf.h"
#include "ospf6d.h"
#include "ospf6_top.h"
@@ -150,7 +151,7 @@ ospf6_exit (int status)
ospf6_asbr_terminate ();
ospf6_lsa_terminate ();
- if_terminate ();
+ vrf_terminate ();
vty_terminate ();
cmd_terminate ();
@@ -318,7 +319,7 @@ main (int argc, char *argv[], char *envp[])
cmd_init (1);
vty_init (master);
memory_init ();
- if_init ();
+ vrf_init ();
access_list_init ();
prefix_list_init ();
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index 0f02cc82..07c3fe35 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -1254,7 +1254,6 @@ void
ospf_if_init ()
{
/* Initialize Zebra interface data structure. */
- if_init ();
om->iflist = iflist;
if_add_hook (IF_NEW_HOOK, ospf_if_new_hook);
if_add_hook (IF_DELETE_HOOK, ospf_if_delete_hook);
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index 96dfd579..826fc983 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -39,6 +39,7 @@
#include "privs.h"
#include "sigevent.h"
#include "zclient.h"
+#include "vrf.h"
#include "ospfd/ospfd.h"
#include "ospfd/ospf_interface.h"
@@ -290,6 +291,7 @@ main (int argc, char **argv)
debug_init ();
vty_init (master);
memory_init ();
+ vrf_init ();
access_list_init ();
prefix_list_init ();
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c
index ecf9ef6b..dc3e9a2b 100644
--- a/pimd/pim_iface.c
+++ b/pimd/pim_iface.c
@@ -43,11 +43,6 @@
static void pim_if_igmp_join_del_all(struct interface *ifp);
-void pim_if_init()
-{
- if_init();
-}
-
static void *if_list_clean(struct pim_interface *pim_ifp)
{
if (pim_ifp->igmp_join_list) {
diff --git a/pimd/pim_iface.h b/pimd/pim_iface.h
index 4b06b9ff..8806fdd9 100644
--- a/pimd/pim_iface.h
+++ b/pimd/pim_iface.h
@@ -108,8 +108,6 @@ struct pim_interface {
((pim_ifp)->pim_hello_period * 7 / 2) : \
((pim_ifp)->pim_default_holdtime))
-void pim_if_init(void);
-
struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim);
void pim_if_delete(struct interface *ifp);
void pim_if_addr_add(struct connected *ifc);
diff --git a/pimd/pim_main.c b/pimd/pim_main.c
index b57f8811..63dd6364 100644
--- a/pimd/pim_main.c
+++ b/pimd/pim_main.c
@@ -31,6 +31,7 @@
#include <signal.h>
#include "memory.h"
+#include "vrf.h"
#include "filter.h"
#include "vty.h"
#include "sigevent.h"
@@ -203,6 +204,7 @@ int main(int argc, char** argv, char** envp) {
cmd_init(1);
vty_init(master);
memory_init();
+ vrf_init();
access_list_init();
pim_init();
diff --git a/pimd/pimd.c b/pimd/pimd.c
index 855defcc..78c3ff5d 100644
--- a/pimd/pimd.c
+++ b/pimd/pimd.c
@@ -24,6 +24,7 @@
#include "log.h"
#include "memory.h"
+#include "vrf.h"
#include "pimd.h"
#include "pim_cmd.h"
@@ -130,12 +131,12 @@ void pim_init()
qpim_infinite_assert_metric.route_metric = PIM_ASSERT_ROUTE_METRIC_MAX;
qpim_infinite_assert_metric.ip_address = qpim_inaddr_any;
- pim_if_init();
pim_cmd_init();
pim_ssmpingd_init();
}
void pim_terminate()
{
+ vrf_terminate();
pim_free();
}
diff --git a/ripd/rip_interface.c b/ripd/rip_interface.c
index 35685a75..f26ef48a 100644
--- a/ripd/rip_interface.c
+++ b/ripd/rip_interface.c
@@ -2055,7 +2055,6 @@ void
rip_if_init (void)
{
/* Default initial size of interface vector. */
- if_init();
if_add_hook (IF_NEW_HOOK, rip_interface_new_hook);
if_add_hook (IF_DELETE_HOOK, rip_interface_delete_hook);
diff --git a/ripd/rip_main.c b/ripd/rip_main.c
index e81e61b8..95b1f6d4 100644
--- a/ripd/rip_main.c
+++ b/ripd/rip_main.c
@@ -33,6 +33,7 @@
#include "privs.h"
#include "sigevent.h"
#include "zclient.h"
+#include "vrf.h"
#include "ripd/ripd.h"
@@ -280,6 +281,7 @@ main (int argc, char **argv)
vty_init (master);
memory_init ();
keychain_init ();
+ vrf_init ();
/* RIP related initialization. */
rip_init ();
diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c
index 35884634..c7865d1e 100644
--- a/ripngd/ripng_interface.c
+++ b/ripngd/ripng_interface.c
@@ -35,6 +35,7 @@
#include "table.h"
#include "thread.h"
#include "privs.h"
+#include "vrf.h"
#include "ripngd/ripngd.h"
#include "ripngd/ripng_debug.h"
@@ -1177,7 +1178,6 @@ void
ripng_if_init ()
{
/* Interface initialize. */
- iflist = list_new ();
if_add_hook (IF_NEW_HOOK, ripng_if_new_hook);
if_add_hook (IF_DELETE_HOOK, ripng_if_delete_hook);
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c
index acc980de..d8f22411 100644
--- a/ripngd/ripng_main.c
+++ b/ripngd/ripng_main.c
@@ -34,6 +34,7 @@
#include "if.h"
#include "privs.h"
#include "sigevent.h"
+#include "vrf.h"
#include "ripngd/ripngd.h"
@@ -276,6 +277,7 @@ main (int argc, char **argv)
cmd_init (1);
vty_init (master);
memory_init ();
+ vrf_init ();
/* RIPngd inits. */
ripng_init ();
diff --git a/zebra/interface.c b/zebra/interface.c
index 49d40ba3..3063dad8 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -1634,7 +1634,6 @@ void
zebra_if_init (void)
{
/* Initialize interface and new hook. */
- if_init ();
if_add_hook (IF_NEW_HOOK, if_zebra_new_hook);
if_add_hook (IF_DELETE_HOOK, if_zebra_delete_hook);
diff --git a/zebra/test_main.c b/zebra/test_main.c
index a92cd618..aad616f7 100644
--- a/zebra/test_main.c
+++ b/zebra/test_main.c
@@ -308,7 +308,6 @@ main (int argc, char **argv)
cmd_init (1);
vty_init (zebrad.master);
memory_init ();
- if_init();
zebra_debug_init ();
zebra_if_init ();
test_cmd_init ();